mbertens wrote:
+++ src/arch/i386/boot/pirq_routing.c (working copy) @@ -121,7 +121,11 @@
printk(BIOS_DEBUG, "INT: %c link: %x bitmap: %x ", 'A' + j, link, bitmap);
// fix made by Marc Bertens <mbertens@xs4all.nl>
if (link > 0x5f) {
// This is basically for the 440BX
link -= 0x5f;
}
Um, except that I gave you that code.
It is a bit of a hack. So far this file and function is actually only called by Geode LX mainboards, and I don't quite understand why.
Maybe something equivalent of this code is invoked in other ways in all the other boards? The gist of pirq_routing_irqs() is to call pci_assign_irqs() and pirq_assign_irqs(). How
There are various other solutions to calling pci_assign_irqs() on other boards:
northbridge/via/cx700/cx700_lpc.c northbridge/via/vx800/vx800_lpc.c southbridge/via/vt8231/vt8231_lpc.c southbridge/via/vt8235/vt8235_lpc.c southbridge/via/vt8237r/vt8237r_lpc.c mainboard/amd/serengeti/cheetah/irq_tables.c mainboard/msi/ms7135/irq_tables.c mainboard/olpc/btest/mainboard.c mainboard/tyan/s2882/irq_tables.c mainboard/iwill/dk8_htx/irq_tables.c mainboard/emulation/qemu-x86/mainboard.c mainboard/technologic/ts5300/mainboard.c mainboard/digitallogic/msm586seg/mainboard.c
I have fairly strong opinion about those call sites being so different (maybe due to ignorance) but more importantly what are the other boards doing? There seems to be a large number of non-Geode systems not in the list above where pci_assign_irqs() is never called. The doxygen for the function says:
"This function should be called for each PCI slot in your system."
What gives? Can we find a generic solution to this interrupt problem?
//Peter