--- quirks_original.c 2003-07-12 01:58:17.000000000 +0000 +++ quirks.c 2003-07-12 04:40:57.000000000 +0000 @@ -464,22 +464,23 @@ * Following the PCI ordering rules is optional on the AMD762. I'm not * sure what the designers were smoking but let's not inhale... * - * To be fair to AMD, it follows the spec by default, its BIOS people - * who turn it off! + * In fact, AMD even recommends to don't follow PCI standards + * in the section "Recommended BIOS settings" of the datasheet */ static void __init quirk_amd_ordering(struct pci_dev *dev) { - u32 pcic; - pci_read_config_dword(dev, 0x4C, &pcic); - if((pcic&6)!=6) + u32 pcic1,pcic2; + + pci_read_config_dword(dev, 0x4C, &pcic1); + pci_read_config_dword(dev, 0x84, &pcic2); + + if((pcic1&6)!=6 || (pcic2&(1<<23))!=(1<<23)) { - pcic |= 6; - printk(KERN_WARNING "BIOS failed to enable PCI standards compliance, fixing this error.\n"); - pci_write_config_dword(dev, 0x4C, pcic); - pci_read_config_dword(dev, 0x84, &pcic); - pcic |= (1<<23); /* Required in this mode */ - pci_write_config_dword(dev, 0x84, pcic); + /* The AMD762 doesn't follow PCI standards, but it seems to work better in this mode ! + In order to be fully PCI standards compliant, we should : + set bit 1 and 2 of register 0x4C ; set bit 23 and clear bit 3 of register 0x84 */ + printk(KERN_WARNING "BIOS didn't enabled PCI standards compliance.\n"); } }