04-13-2010 04:52 PM
Starting off with a working linux system on the ml510, I try to implement PCI capabilities as outlined on the wiki, adding them to my working setup. Upon boot, nothing at all happens. Not even the uncompressing kernel message. I also tried talking to the before working ethernet port after waiting a good length of time, in case the serial output got killed and everything else was okay, but that didn't produce anything either. I didn't modify my dts file at all after the it was produced by the system with the new hardware added. The wiki says to remove a memory, but I only instanciated one memory in the beginning so there were no duplicates. It was not very clear how to set up the dts file for specific PCI devices, but should that prevent it from booting if I didn't set up anything? I don't even have any cards pluged into the slots. Thanks for any help.
04-14-2010 06:16 AM
I can't think of anything obvious to tell you. I'm assuming if you take the PCI out of the device tree the same kernel runs ok, is that true?
Are you sure that you didn't skip over a small detail as it's easy to do? I'm not claiming the process is bulletproof as I haven't done it a lot (and don't do it regularly) and don't have it in any kind of automated testing yet either.
Thanks, sorry not much help.
04-15-2010 07:37 PM
I started over using your example MHS file and got it to where it now boots just fine. The linux kernel boot output is different depeding on whether or not I have a PCI card inserted, so I think that it is recognizing it. I can post if you want. My next concern is that I don't understand the xilinx wiki page about bindings an so forth. An example might help it all make sense. When you tested the NICs, did you use the dts file that you have posted on the wiki? If not, could you post it? If I understand it right, you need more details that pertain to your specific PCI device. For instance the ali_m1533 in the example, do I need to provide details like that about my PCI card? Any other pointers, examples or corrections to my way of thinking are welcome. Thank you very much for your help.
04-21-2010 11:44 AM - edited 04-21-2010 11:48 AM
I understand now what the dts file means:
/* IDSEL 0x16 / dev=6, bus=0 / PCI slot 3 */
0x3000 0 0 1 &xps_intc_0 3 2
0x3000 0 0 2 &xps_intc_0 2 2
0x3000 0 0 3 &xps_intc_0 5 2
0x3000 0 0 4 &xps_intc_0 4 2
The numbers above that are highlighted correspond to the interrupt number in the platform studio interrupt controller dialog window where the bottom entry is interrupt 0 and the next one up is interrupt 1, etc... So, referencing the above code and the example MHS file provided here or the image of the dialog window below:
the 1st entry in the above code corresponds to PCI_INTC_N
the 2nd entry -> PCI_INTD_N
the 3rd entry -> PCI_INTA_N
the 4th entry -> PCI_INTB_N
Now the system is able to talk with the PCI card. The trick was placing the correct interrupt numbers in the dts file. Also, another problem that I had was that the specific driver that I needed for the PCI device that I am using was not compiled into the kernel. I had to add that before it would work. And to answer my own question above, NO specific information is needed in the DTS file about any particular PCI card is needed. The card provides the kernel with information at boot-time which enables the kernel to match it to a particular driver if such driver is compiled in. What I need to figure out now is how to compile in a custom driver. I have been using the make ARCH=powerpc menuconfig to configure the kernel, but how do I add stuff that is not presented there as on option or otherwise include custom drivers in my kernel? I realize that that is a general linux topic, but is anyone cares to reply in the context of the this thread I would be grateful. Thanks.