Linux MIPS Architecture development
 help / color / mirror / Atom feed
From: Braden Marr <bmarr@sutus.com>
To: Kiran Thota <Kiran_Thota@pmc-sierra.com>
Cc: Roman Mashak <mrv@corecom.co.kr>, linux-mips@linux-mips.org
Subject: Re: booting with NFS root
Date: Fri, 26 May 2006 10:56:42 -0700	[thread overview]
Message-ID: <4477415A.8070607@sutus.com> (raw)
In-Reply-To: <C28979E4F697C249ABDA83AC0C33CDF80DE0F2@sjc1exm07.pmc_nt.nt.pmc-sierra.bc.ca>

[-- Attachment #1: Type: text/plain, Size: 6155 bytes --]

Kiran Thota wrote:
> Roman,
>   You have an older version of the linux kernel. I can send you latest snapshot.
> There was a software bug. I don't know your source version to send patch but I am
> attaching the source titan_ge.c
>
> Regards,
> Kiran
Kiran,

I noticed in this driver update that the INTMSG vector is set after 
interrupts are enabled.

We have confirmed that if the Titan GE's INTMSG vector is configured 
instead to point to the Interrupt Controller's INTMSG register before 
the interrupts are enabled, then the chance of this exception occurring 
is reduced or removed.

I have attached a patch against your earlier titan_ge.c attachment that 
illustrates this change.

As I understand it, if an interrupt is pending from some previous use of 
the Titan GE block, such as in PMON (which uses a polling interrupt 
handler), where tftp is used to load the kernel into RAM via an Ethernet 
port, then when the interrupts are enabled in the kernel's titan_ge.c 
driver, a pending interrupt (from Ethernet packets received before while 
the kernel is booting, for example) could cause the Titan GE block to 
send the interrupt status message to a undetermined address within the 
RM9150 core! Since there is likely no conventional way to trap this type 
of exception, an erroneous do_cpu exception is the result.

Conceivably, any core block that attempts to use an INTMSG vector with 
an undetermined value could cause the same conditions.

cheers,

Braden Marr.  (email to: bmarr at sutus dot com)

>
> -----Original Message-----
> From: linux-mips-bounce@linux-mips.org [mailto:linux-mips-bounce@linux-mips.org] On Behalf Of Roman Mashak
> Sent: Thursday, May 25, 2006 5:50 PM
> To: linux-mips@linux-mips.org
> Subject: booting with NFS root
>
> Hello!
>
> I have evaluation board from PMC-sierra, their CPU is using E9000 core. 
> Kernel (2.4.26), root FS are provided by them. I set up NFS and TFTP servers on my linux box, kernel loads into board but fails to boot woth the following message (I skipped some lines of kernel):
>
> =====================
> PMC-Sierra TITAN 10/100/1000 Ethernet Driver Device Id : 206014,  Version : 0
> eth0: port 0 with MAC address 30:30:3a:31:31:3a Rx NAPI supported, Tx Coalescing ON
> eth1: port 1 with MAC address 30:30:3a:31:31:3b Rx NAPI supported, Tx Coalescing ON
> NET4: Linux TCP/IP 1.0 for NET4.0
> IP Protocols: ICMP, UDP, TCP, IGMP
> IP: routing cache hash table of 1024 buckets, 8Kbytes
> TCP: Hash tables configured (established 8192 bind 16384)
> IP-Config: Entered.
> ipconfig.c 1194
> dev.c 1998
> dev.c 2013
> dev.c 750
> irq.c 539
> irq.c 571
> irq.c 840
> irq.c 879
> handler->startup 80259d14
> irq.c 892
> irq.c 576
> Assigned IRQ 6 to port 0
> titan_ge.c 2256
> titan_ge.c 2278
> titan_ge.c 2316
> titan_ge.c 2359
> titan_ge.c 1614
> titan_ge.c 1659
> titan_ge.c 1698
> titan_ge.c 1717
> titan_ge.c 1837
> titan_ge.c 2025
> titan_ge.c 2118
> titan_ge.c 2177
> dev_addr=       1, reg_addr=      11
> val=    4111
> val=       1
> titan_ge.c 2184
> titan_ge.c 2397
> dev_addr=       1, reg_addr=      11
> val=    4112
> val=       1
> dev.c 788
> dev.c 2034
> dev.c 2043
> dev.c 2059
> IP-Config: eth0 UP (able=1, xid=57c63687) dev.c 1998 dev.c 2013 dev.c 750 irq.c 539 irq.c 571 irq.c 840 irq.c 879 irq.c 892 irq.c 576 Assigned IRQ 6 to port 1 titan_ge.c 2256 titan_ge.c 2278 titan_ge.c 2316 titan_ge.c 2359 titan_ge.c 1659 titan_ge.c 1698 titan_ge.c 1717 titan_ge.c 1837 titan_ge.c 2025 titan_ge.c 2118 titan_ge.c 2177
> dev_addr=       2, reg_addr=      11
> val=    4111
> val=       1
> titan_ge.c 2184
> titan_ge.c 2397
> dev_addr=       2, reg_addr=      11
> val=    4212
> val=       1
> eth1: Error opening interface
> dev.c 788
> dev.c 2034
> dev.c 2043
> dev.c 2059
> IP-Config: Failed to open eth1
> ipconfig.c 1199
> IP-Config: Guessing netmask 255.255.255.0
> IP-Config: Complete:
>       device=eth0, addr=192.168.11.42, mask=255.255.255.0, gw=255.255.255.255,
>      host=192.168.11.42, domain=, nis-domain=(none),
>      bootserver=255.255.255.255, rootserver=192.168.11.43, rootpath=
> NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
> Looking up port of RPC 100003/2 on 192.168.11.43 Looking up port of RPC 100005/1 on 192.168.11.43
> VFS: Mounted root (nfs filesystem).
> Freeing unused kernel memory: 104k freed do_cpu invoked from kernel context! in traps.c::do_cpu, line 676:
> $0 : 00000000 9004a000 2ab03fe0 2ab03fe0 2ab01560 00000000 00000ae0 00000ae0
> $8 : 00000020 2ab01fe0 2ab01520 00001000 00000019 00000080 811d7b18 00000c62
> $16: 2ab010c0 811d7c58 87f8cfe0 00000003 00000080 2ab01520 87f841a0 00000001
> $24: 00000000 00000080                   811d6000 811d7ba0 2aaa8000 8015f414
> Hi : 00000000
> Lo : 00000000
> epc   : 80256e14    Not tainted
> Status: 9004a003
> Cause : 1000002c
> PrId  : 000034c1
> Process init (pid: 1, stackpage=811d6000)
> Stack:    8015f8a8 8015f9a8 87f71180 8012b2fc 00000000 80135330 00002012
>  00000019 87f8cf60 2ab019e4 00000004 00002012 000590c0 2ab01000 10000000
>  811d7d88 87ff5740 00000000 811d7ef8 81164e80 00000000 00000002 87f841a0
>  8015ffd8 811d7c20 811d6000 811d7cbc 801975a4 00006012 0000000a 811d7c18
>  811d7c18 7f454c46 01020100 00000000 00000000 00020008 00000001 00401980
>  00000034 ...
> Call Trace:   [<8015f8a8>] [<8015f9a8>] [<8012b2fc>] [<80135330>] 
> [<8015ffd8>]
>  [<801975a4>] [<8015fbc0>] [<801493ac>] [<801007b8>] [<8014889c>] [<801495bc>]  [<801495a8>] [<801007b8>] [<80108f80>] [<801007b8>] [<8014fcc4>] [<801095c0>]  [<8025ad30>] [<801007b8>] [<8025ad30>] [<8014af50>] [<801007b8>] [<80117888>]  [<801194a0>] [<80100884>] [<801007b8>] [<8010079c>] [<8025de14>] [<80104320>]  [<80117aec>] [<8026b7a8>] [<801b2054>] [<80104310>]
>
> Code: 30c8003c  01244821  24840040 <ac85ffc0> ac85ffc4  ac85ffc8  ac85ffcc ac85ffd0  ac85ffd4 Kernel panic: Attempted to kill init!
> =====================
>
> I load kernel with the following parameters:
> tftp://192.168.11.43/vmlinux ip=192.168.11.42 root=/dev/nfs nfsroot=192.168.11.43:/export/linux/mips-fs-be
>
> What may be the problem here?
>
> Thanks in advance!
>
> With best regards, Roman Mashak.  E-mail: mrv@corecom.co.kr 
>
>
>


[-- Attachment #2: titan_ge-intmsg.patch --]
[-- Type: text/plain, Size: 1525 bytes --]

--- titan_ge.c.pmc	2006-05-25 20:10:29.000000000 -0700
+++ titan_ge.c	2006-05-25 20:12:34.000000000 -0700
@@ -2094,6 +2094,28 @@
 
 	udelay(30);
 
+#ifdef CONFIG_PMC_SEQUOIA
+
+// XD_OOD_INTSMSG = 0x61, XD_INTSMSG = 0x62, 
+// XD_RX_INTSMSG = XD_TX_INTSMSG = 0x60
+		TITAN_GE_WRITE(0x0060, RM9150_GCIC_INTMSG  >> 4);
+
+                reg_data = 0x61626060;
+		TITAN_GE_WRITE(0x0044, reg_data);
+		reg_data = TITAN_GE_READ(0x0080);
+		reg_data |= 0x1;		
+		TITAN_GE_WRITE(0x0080, reg_data);
+
+#else
+#ifdef TITAN_GE_12
+		TITAN_GE_WRITE(0x0024, 0x04844424);
+#else
+		TITAN_GE_WRITE(0x0024, 0x04000024);	/* IRQ vector */
+#endif
+		TITAN_GE_WRITE(0x0020, 0x000fb000);	/* INTMSG base */
+#endif // CONFIG_PMC_SEQUOIA
+	}
+
 	/* 
 	 * Enable the Interrupts for Tx and Rx 
 	 */
@@ -2128,28 +2150,6 @@
 		TITAN_GE_WRITE(0x003c, 0x00300);
 #endif
 
-#ifdef CONFIG_PMC_SEQUOIA
-
-// XD_OOD_INTSMSG = 0x61, XD_INTSMSG = 0x62, 
-// XD_RX_INTSMSG = XD_TX_INTSMSG = 0x60
-		TITAN_GE_WRITE(0x0060, RM9150_GCIC_INTMSG  >> 4);
-
-                reg_data = 0x61626060;
-		TITAN_GE_WRITE(0x0044, reg_data);
-		reg_data = TITAN_GE_READ(0x0080);
-		reg_data |= 0x1;		
-		TITAN_GE_WRITE(0x0080, reg_data);
-
-#else
-#ifdef TITAN_GE_12
-		TITAN_GE_WRITE(0x0024, 0x04844424);
-#else
-		TITAN_GE_WRITE(0x0024, 0x04000024);	/* IRQ vector */
-#endif
-		TITAN_GE_WRITE(0x0020, 0x000fb000);	/* INTMSG base */
-#endif // CONFIG_PMC_SEQUOIA
-	}
-
 	/* Priority */
 	reg_data = TITAN_GE_READ(0x1038 + (port_num << 12));
 	reg_data &= ~(0x00f00000);

  parent reply	other threads:[~2006-05-26 17:56 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-05-26  2:07 booting with NFS root Kiran Thota
2006-05-26  3:05 ` Roman Mashak
2006-05-26  3:05   ` Roman Mashak
2006-05-26 17:56 ` Braden Marr [this message]
  -- strict thread matches above, loose matches on Subject: below --
2006-05-26  0:49 Roman Mashak
2006-05-26  0:49 ` Roman Mashak
2006-05-26  1:38 ` Yoichi Yuasa
2006-05-26  2:40   ` Roman Mashak
2006-05-26  2:40     ` Roman Mashak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4477415A.8070607@sutus.com \
    --to=bmarr@sutus.com \
    --cc=Kiran_Thota@pmc-sierra.com \
    --cc=linux-mips@linux-mips.org \
    --cc=mrv@corecom.co.kr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox