On Thu, 2010-05-27 at 02:27 +0200, Peter Stuge wrote:
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.
Yes, that was already in the new comment, that it was passed to me by you.
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.
It just works fne for the i440BX, but you need a stub function pirq_assign_irqs() in the board specific codebase (my solution).
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
pirq_routing_irqs() calls as the last action pirq_assign_irqs()
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 looked at all those you meantioned here, and soem of them are quite similar. Maybe we can find a common solution "one size fits all", i like sourcecode that can handle all the different board types.
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?
First thing is that we need to identify the different board solutions which are similar, and see what kind of solution groups we have at the moment, and maybe its just enough to have a adjuster function for a specific board, which is called start of the pirq_routing_irqs(), and when no specific adjusting is required this can be left out by Kconfig and the same applies to the pirq_assign_irqs()
//Peter
Marc