There are a lot of pitfalls that might give you such kernel panic and I am sure I did not have a chance to experience them all. But I can share with you my check list for the panic of hanging at "Now booting the kernel".
Firstly, you may uncheck PCI bus option in your kernel config. If you still cannot get "Now booting the kernel" passed, then you need to make sure there are 128Mb ddr RAM on your ML310. From your booting message, I assume you have 128Mb RAM. But if actually you don't have that much size, the kernel may get confused and stuck. Secondly, if you see this panic only when enabling PCI bus option, then I suggest you look into your arch/ppc/kernel/ppc405_pci.c, make sure the kernel actually execute this piece of code: #ifdef CONFIG_XILINX_OCP /* Eliminate "unused variable" warning for pcip. Optimizer removes. */ pcip = NULL; new_pmm_min = PPC405_PCI_LOWER_MEM; new_pmm_max = PPC405_PCI_UPPER_MEM; Some mainline kernel does not have CONFIG_XILINX_OCP setting for you , and ML310/ML410 does need them to boot up PCI bus. Let me know if you still have problem. Bin -----Original Message----- From: [EMAIL PROTECTED] 代表 [EMAIL PROTECTED] Sent: 8/5/2008 (星期二) 22:00 To: linuxppc-embedded@ozlabs.org Subject: Linuxppc-embedded Digest, Vol 48, Issue 7 Send Linuxppc-embedded mailing list submissions to linuxppc-embedded@ozlabs.org To subscribe or unsubscribe via the World Wide Web, visit https://ozlabs.org/mailman/listinfo/linuxppc-embedded or, via email, send a message with subject or body 'help' to [EMAIL PROTECTED] You can reach the person managing the list at [EMAIL PROTECTED] When replying, please edit your Subject line so it is more specific than "Re: Contents of Linuxppc-embedded digest..." Today's Topics: 1. Re: floating point support in the driver. (David Hawkins) 2. Re: PCI support on the ML310 (Linux 2.4/2.6) (Juliana Su) ---------------------------------------------------------------------- Message: 1 Date: Tue, 05 Aug 2008 09:53:45 -0700 From: David Hawkins <[EMAIL PROTECTED]> Subject: Re: floating point support in the driver. To: Misbah khan <[EMAIL PROTECTED]> Cc: linuxppc-embedded@ozlabs.org Message-ID: <[EMAIL PROTECTED]> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Hi Misbah, > I am running the algorithm on OMAP processor (arm-core) > and i did tried the same on iMX processor which > takes 1.7 times more than OMAP. Ok, thats a 10,000ft benchmark. The observation being that it fails your requirement. How does that time compare to the operations required, and their expected times? > It is true that the algorithm is performing the vector > operation which is blowing the cache. Determined how? Obviously if your cache is 16K and your data is 64K, there's no way it'll fit in there at once, but the algorithm could be crafted such that 1K at a time was processed, while another data packet was moved onto the cache ... but this is very processor specific. > But the question is How to lock the cache ? In driver > how should we implement the same ? > > An example code or a document could be helpful in this regard. Indeed :) I have no idea how the OMAP works, so the following are just random, and possibly incorrect ramblings ... The MPC8349EA startup code uses a trick where it zeros out sections of the cache while providing an address. Once the addresses and zeros are in the cache, its locked. From that point on, memory accesses to those addresses result in cache 'hits'. This is the startup stack used by the U-Boot bootloader. If something similar was done under Linux, then *I guess* you could implement mmap() and ioremap() the section of addresses associated with the locked cache lines. You could then DMA data to and from the cache area, and run your algorithm there. That would provide you 'fast SRAM'. However, you might be able to get the same effect by setting up your processing algorithm such that it handled smaller chunks of data. Feel free to explain your data processing :) Cheers, Dave ------------------------------ Message: 2 Date: Tue, 05 Aug 2008 15:09:28 -0400 From: Juliana Su <[EMAIL PROTECTED]> Subject: Re: PCI support on the ML310 (Linux 2.4/2.6) To: linuxppc-embedded@ozlabs.org Message-ID: <[EMAIL PROTECTED]> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Hi, Thanks for your reply, Bin! I checked system.mhs and "C_BRIDGE_IDSEL_ADDR_BIT" was set to 16, but the code that was in pci_init( ) was the code for as if "C_BRIDGE_IDSEL_ADDR_BIT" was set to 24. After replacing the code in pci_init( ), the PCI now initializes. However, after the ML310 initialization finishes, the system hangs at "Now booting the kernel". I remember encountering this problem when I was porting Linux 2.6. It had to do with a linker problem and after rolling back to gcc-4.0.2, I got past the problem. I'm using Linux 2.4, though, so that solution will not work here... I am using UART Lite and I made sure that it (and not UART 16550) was selected in the kernel configuration and that "Console on UART Lite port" was selected as well. I also made sure that UART Lite was what was chosen when I built the BSP. Oh, and there is a /dev/ttyUL0 device node in my root file system. I even did a "make mrproper" and re-did the kernel configuration, but that did not solve my pro blem. Any suggestions? Thanks! -Juliana Xilinx ML310 Board-Specific Initialization: ppb_init: dev = 9, id = ac23104c pci_scan: bus 0, device 0, id 030010ee pci_scan: bus 0, device 1, id 545110b9 pci_scan: bus 0, device 2, id 153310b9 pci_scan: bus 0, device 3, id 545710b9 pci_scan: bus 0, device 7, id 12298086 pci_scan: bus 0, device 9, id ac23104c pci_scan: bus 0, device 12, id 710110b9 pci_scan: bus 0, device 15, id 523710b9 sio_init: Device ID = 53 15, Revision = f3. sio_init: LPT1 base = 0x0378, irq = 5. sio_init: COM1 base = 0x03f8, irq = 4. sio_init: COM2 base = 0x02f8, irq = 3. sio_init: KBC irq = 1, PS2 irq = 1. sio_init: Super I/O initialization complete. loaded at: 00400000 004E91F4 board data at: 004E613C 004E6154 relocated to: 00406410 00406428 zimage at: 00406BF9 004E5566 avail ram: 004EA000 08000000 Linux/PPC load: console=ttyUL0,9600 ip=off root=/dev/xsysace/disc0/part2 rw Uncompressing Linux...done. Now booting the kernel ------------------------------ Message: 11 Date: Tue, 5 Aug 2008 12:48:29 -0400 From: "Huang, Bin" <[EMAIL PROTECTED]> Subject: re ?PCI support on the ML310 (Linux 2.4/2.6) To: <linuxppc-embedded@ozlabs.org> Message-ID: <[EMAIL PROTECTED]> Content-Type: text/plain; charset="gb2312" As far as I know, only MVista has complete PCI support for ML310. I have been migrating their PCI stuff to 2.6 kernel for couple of months so I might understand what you are suffering here. If your system hangs just after "Xilinx ML310 Board-Specific Initialization:", then probably there is something wrong with your OPB-PCI core on virtex-2 FPGA. I highly recommend you double check the value of "C_BRIDGE_IDSEL_ADDR_BIT" within your system.mhs file. When the 2.4/2.6 kernel tries to initialize pci core, it has to do self- configuration first. If the wrong address is assigned in pci_init(), then the kernel could not proceed any more. Here is what you need to take care of: for C_BRIDGE_IDSEL_ADDR_BIT = 24, use pci_init() { /* self-configuration */ WR32(PCI_CONFIG_ADDR, htole32(0x80004004)); // address WR32(PCI_CONFIG_DATA, htole32(0xffff0147)); // data /* max latency timer on bridge */ WR32(PCI_CONFIG_ADDR, htole32(0x8000400c)); // address WR32(PCI_CONFIG_DATA, htole32(0x0000ff00)); // data /* max bus number */ WR32(PCI_CONFIG_ADDR+8, htole32(0xff000000)); }; for C_BRIDGE_IDSEL_ADDR_BIT = 16, use pci_init() { /* self-configuration */ WR32(PCI_CONFIG_ADDR, htole32(0x80000004)); // address WR32(PCI_CONFIG_DATA, htole32(0xffff0147)); // data /* max latency timer on bridge */ WR32(PCI_CONFIG_ADDR, htole32(0x8000000c)); // address WR32(PCI_CONFIG_DATA, htole32(0x0000ff00)); // data /* max bus number */ WR32(PCI_CONFIG_ADDR+8, htole32(0xff000000)); }; You may check Xilinx's user guide 241 for more details. Porting BSP from EDK9.1 to MVista 2.4 should be quite straightforward, but porting them to 2.6 virtex is a little bit vague. If you are trying to use IDE southbridge, I could recommend you start from 2.6.10 rather than 2.6 virtex because driver/ide/pci/alim15x3.c has been updated a lot and I hate to say that a none-disclosure agreement on alim15x3 makes it time consuming to understand super I/O on ml310. If you just need PCI bus function, then life will much more easier but you still need be care of about opb-pci core parameters Bin -----Original Message----- From: [EMAIL PROTECTED] ?? [EMAIL PROTECTED] Sent: 8/4/2008 (???) 22:00 To: linuxppc-embedded@ozlabs.org Subject: Linuxppc-embedded Digest, Vol 48, Issue 5 Send Linuxppc-embedded mailing list submissions to linuxppc-embedded@ozlabs.org To subscribe or unsubscribe via the World Wide Web, visit https://ozlabs.org/mailman/listinfo/linuxppc-embedded or, via email, send a message with subject or body 'help' to [EMAIL PROTECTED] You can reach the person managing the list at [EMAIL PROTECTED] When replying, please edit your Subject line so it is more specific than "Re: Contents of Linuxppc-embedded digest..." Today's Topics: 1. PCI support on the ML310 (Linux 2.4/2.6) (Juliana Su) 2. Re: Creating a wrapped zImage.initrd -- can't start the trampoline? (Grant Likely) 3. Re: suffisant space for U-Boot, Linux and an initrd image ? (4MB SDRAM) (Wolfgang Denk) ---------------------------------------------------------------------- Message: 1 Date: Mon, 04 Aug 2008 16:08:33 -0400 From: Juliana Su <[EMAIL PROTECTED]> Subject: PCI support on the ML310 (Linux 2.4/2.6) To: linuxppc-embedded@ozlabs.org Message-ID: <[EMAIL PROTECTED]> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Hi, I am trying to get PCI support on the ML310. I was able to port Linux 2.6 (linux-2.6-virtex from Secret Lab) onto the board, but unfortunately there is no PCI support in the kernel. When I enabled PCI support, I got the same errors (see below) that were reported on the Secret Lab Wiki. CC arch/ppc/syslib/ppc4xx_setup.o arch/ppc/syslib/ppc4xx_setup.c: In function `ppc4xx_map_io': arch/ppc/syslib/ppc4xx_setup.c:118: error: `PPC4xx_PCI_IO_VADDR' undeclared (first use in this function) arch/ppc/syslib/ppc4xx_setup.c:118: error: (Each undeclared identifier is reported only once arch/ppc/syslib/ppc4xx_setup.c:118: error: for each function it appears in.) arch/ppc/syslib/ppc4xx_setup.c:119: error: `PPC4xx_PCI_IO_PADDR' undeclared (first use in this function) arch/ppc/syslib/ppc4xx_setup.c:119: error: `PPC4xx_PCI_IO_SIZE' undeclared (first use in this function) arch/ppc/syslib/ppc4xx_setup.c:120: error: `PPC4xx_PCI_CFG_VADDR' undeclared (first use in this function) arch/ppc/syslib/ppc4xx_setup.c:121: error: `PPC4xx_PCI_CFG_PADDR' undeclared (first use in this function) arch/ppc/syslib/ppc4xx_setup.c:121: error: `PPC4xx_PCI_CFG_SIZE' undeclared (first use in this function) arch/ppc/syslib/ppc4xx_setup.c:122: error: `PPC4xx_PCI_LCFG_VADDR' undeclared (first use in this function) arch/ppc/syslib/ppc4xx_setup.c:123: error: `PPC4xx_PCI_LCFG_PADDR' undeclared (first use in this function) arch/ppc/syslib/ppc4xx_setup.c:123: error: `PPC4xx_PCI_LCFG_SIZE' undeclared (first use in this function) make[1]: *** [arch/ppc/syslib/ppc4xx_setup.o] Error 1 make: *** [arch/ppc/syslib] Error 2 I went back to Linux 2.4 (v2.4.20_mvl31-ml300), but the system hangs during ml310_init( ), specifically when it gets to pci_init( ), in ml310.c. I put some print statements in ml310.c to debug and found out that it gets pass the first two lines in pci_init( ) before hanging. Basically, all I get on my screen is: Xilinx ML310 Board-Specific Initialization: ml310_init( ) looks like this: void ml310_init() { prints("\n\n"); prints("Xilinx ML310 Board-Specific Initialization:\n"); prints("\n"); pci_init(); ppb_init(9); pci_scan(); sio_init(); sbr_init(); }; and pci_init( ) looks like this: void pci_init() { /* self-configuration */ WR32(PCI_CONFIG_ADDR, htole32(0x80004004)); // address WR32(PCI_CONFIG_DATA, htole32(0xffff0147)); // data /* max latency timer on bridge */ WR32(PCI_CONFIG_ADDR, htole32(0x8000400c)); // address WR32(PCI_CONFIG_DATA, htole32(0x0000ff00)); // data /* max bus number */ WR32(PCI_CONFIG_ADDR+8, htole32(0xff000000)); }; ml310.c was generated when I made the BSP in Xilinx EDK 9.1. I copied it, along with the other files from the BSP, into the kernel source. I am using a Crosstool cross-compiler, gcc-3.4.1-glibc-2.3.3. I have also tried the linuxppc-2.4 and mvistappc_2_4_devel kernels from source.mvista.com, but those both crashed with similar (and several) errors concerning ide-taskfile.c during compilation. Is anybody aware of how to manually map the PCI constants in 2.6 and willing to help me map them? Does anybody have an idea why pci_init( ) is getting stuck? Any suggestions, in general, would be greatly appreciated. Let me know if I need to provide more information or code. Thanks! -Juliana ------------------------------ _______________________________________________ Linuxppc-embedded mailing list Linuxppc-embedded@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-embedded End of Linuxppc-embedded Digest, Vol 48, Issue 7 ************************************************
<<winmail.dat>>
_______________________________________________ Linuxppc-embedded mailing list Linuxppc-embedded@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-embedded