This week I started to create a linuxbios for an embedded Geode GX1 board (Kontron ETX-mgx). I was delighted to see that it was able to boot Linux at the first try!
Off course there remain some issues that need to be solved. The first thing I ran into is that I can't use the ethernet controller. When I try to load the ethernet module (dmfe.o) I get this message:
PCI: No IRQ known for interrupt pin A of device 00:02.0. Please try using pci=biosirq
This reason is that linux is not able to locate the interrupt table, because linuxbios failed to copy the table to the area at 0xf0000:
.... Copying IRQ routing tables to 0xf0000...done. Verifing copy of IRQ routing tables at 0xf0000...failed Moving GDT to 0x500...ok Wrote linuxbios table at: 00000530 - 000006b4 checksum e72d
I saw that this issue was discussed earlier in this list (March 2005, started by ramesh), but I found no reference as to if and how it was ever solved.
Any answers?
Thanks,
Joep Jansen
* joep@frog.nl joep@frog.nl [051203 16:04]:
This reason is that linux is not able to locate the interrupt table, because linuxbios failed to copy the table to the area at 0xf0000:
.... Copying IRQ routing tables to 0xf0000...done. Verifing copy of IRQ routing tables at 0xf0000...failed Moving GDT to 0x500...ok Wrote linuxbios table at: 00000530 - 000006b4 checksum e72d
I saw that this issue was discussed earlier in this list (March 2005, started by ramesh), but I found no reference as to if and how it was ever solved.
Are you using LinuxBIOS v1 or v2? Try disabling CONFIG_COMPRESS.
The bios area around 0xf0000 is probably readonly, so the write fails. CONFIG_COMPRESS will leave the in-flash copy of the pirq table readable for Linux.
Stefan
Thanks,
That helped, once I set the IRQ_SLOT_COUNT to the proper value (6), so that it matches the number of slots in interrupt table.
Now the pirq table is recognized by Linux, and the proper interrupt is assigned to the ethernet controller.
The next problem is that in spite of this, the ethernet chip doesn't generate interrupts anymore.
Is there any additional configuration /setup that I need to do?
Joep
- joep@frog.nl joep@frog.nl [051203 16:04]:
This reason is that linux is not able to locate the interrupt table, because linuxbios failed to copy the table to the area at 0xf0000:
.... Copying IRQ routing tables to 0xf0000...done. Verifing copy of IRQ routing tables at 0xf0000...failed Moving GDT to 0x500...ok Wrote linuxbios table at: 00000530 - 000006b4 checksum e72d
I saw that this issue was discussed earlier in this list (March 2005, started by ramesh), but I found no reference as to if and how it was ever solved.
Are you using LinuxBIOS v1 or v2? Try disabling CONFIG_COMPRESS.
The bios area around 0xf0000 is probably readonly, so the write fails. CONFIG_COMPRESS will leave the in-flash copy of the pirq table readable for Linux.
Stefan
The next problem is that in spite of this, the ethernet chip doesn't generate interrupts anymore.
Is there any additional configuration /setup that I need to do?
I had the exact problem with the 440BX.
Is the IRQ actually routed correctly?
On many bridges Linux expects the BIOS to have properly set up the IRQ routing from the PIRQ to the IRQ. Just having the table correct may not be enough. On the 440BX I had to do it manually. Boot COTS and compare the lspci -xxx of your northbridge with that of linuxBIOS and then go look for differences in the PIRQ to IRQ n routes.
-- Richard A. Smith
Is this v1 or v2?
Either way, just for now, build an uncompressed bios.
Longer term, you need to set up ram shadowing for the F segment.
ron
Richard Smith wrote:
The next problem is that in spite of this, the ethernet chip doesn't generate interrupts anymore.
Is there any additional configuration /setup that I need to do?
I had the exact problem with the 440BX.
Is the IRQ actually routed correctly?
On many bridges Linux expects the BIOS to have properly set up the IRQ routing from the PIRQ to the IRQ. Just having the table correct may not be enough. On the 440BX I had to do it manually. Boot COTS and compare the lspci -xxx of your northbridge with that of linuxBIOS and then go look for differences in the PIRQ to IRQ n routes.
in many cases, the fuctory BIOS IRQ table is wrong, requiring you to fix it up by hand. This is very common.
Also, if you have the old GX southbridge, linux is wrong: since 1/2 the GX1 bioses seem to set up the irq table wrong, linux does a Bad Thing in the cs5330 (or whatever it is) driver. See the delta on this driver from 2.4.18 to 2.4.19. It's a huge mess.
best bet is just forget the irq table and put the right IRQ value in the chip directly.
ron