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 _______________________________________________ Linuxbios mailing list [EMAIL PROTECTED] http://www.clustermatic.org/mailman/listinfo/linuxbios