
It's a 2.4.19 change, I call it a bug, but maybe they had some reason? 2.4.19 code: /* * Cyrix: nibble offset 0x5C */ static int pirq_cyrix_get(struct pci_dev *router, struct pci_dev *dev, int pirq) { return read_config_nybble(router, 0x5C, (pirq-1)^1); } static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) { write_config_nybble(router, 0x5C, (pirq-1)^1, irq); return 1; } 2.4.17 code: /* * Cyrix: nibble offset 0x5C */ static int pirq_cyrix_get(struct pci_dev *router, struct pci_dev *dev, int pirq) { return read_config_nybble(router, 0x5C, pirq-1); } static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) { write_config_nybble(router, 0x5C, pirq-1, irq); return 1; } Note the ^1, which flips the low-order bit. I commented this ^1 out on 2.4.19 and everything works as it should. The error was consistent with an incorrect flipping of the low-order bit. I have no idea why this change would have been put into place, or if it was even tested. I do know some geode BIOSes have screwed-up IRQ tables in flash, so maybe they were fixing a problem but doing it the wrong way. Not sure. I know we have some Linux kernel guys on the list, forward to whoever needs to see this if you wish. ron

"Ronald G. Minnich" <rminnich@lanl.gov> writes:
Note the ^1, which flips the low-order bit. I commented this ^1 out on 2.4.19 and everything works as it should. The error was consistent with an incorrect flipping of the low-order bit. I have no idea why this change would have been put into place, or if it was even tested.
I do know some geode BIOSes have screwed-up IRQ tables in flash, so maybe they were fixing a problem but doing it the wrong way. Not sure.
I know we have some Linux kernel guys on the list, forward to whoever needs to see this if you wish.
I think Alan Cox added this because all of his MediaGX/Geode boards have a buggered BIOS. You'd better tell him that he's wrong. :-) /Christer -- "Just how much can I get away with and still go to heaven?" Freelance consultant specializing in device driver programming for Linux Christer Weinigel <christer@weinigel.se> http://www.weinigel.se
participants (2)
-
Christer Weinigel
-
Ronald G. Minnich