Geode problem with 2.4.19 SOLVED

Ronald G. Minnich rminnich at lanl.gov
Fri Nov 1 19:50:01 CET 2002


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




More information about the coreboot mailing list