[PATCH] Re: PCI IRQ problems -- update

Jim Paris
2004-12-11T22:05:29Z

> The ICH3-M datasheet says offset 0x09 is the Programming Interface
> register. Default value is 0x8A (legacy on both), value here is 0x8E
> (legacy on primary, native on secondary). This mixed-mode setting
> is noted as a disallowed combination in the datasheet.
>
> So it looks like my BIOS is screwing me. Where could/should I fix
> this up?

I added a quirk for this case. This is against 2.6.10-rc3, and it
makes all of my problems go away cleanly. Is this reasonable?

-jim

--- a/drivers/pci/quirks.c 2004-12-10 19:18:50.000000000 -0500
+++ b/drivers/pci/quirks.c 2004-12-11 16:32:41.000000000 -0500
@@ -717,6 +717,26 @@
}
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, quirk_svwks_csb5ide );

+/*
+ * Intel 82801CAM ICH3-M datasheet says IDE modes must be the same
+ */
+static void __init quirk_ide_samemode(struct pci_dev *pdev)
+{
+ u8 prog;
+ pci_read_config_byte(pdev, PCI_CLASS_PROG, &prog);
+ if ( ((prog & 1) && !(prog & 4)) || ((prog & 4) && !(prog & 1)) )
+ {
+ printk(KERN_INFO
+ "PCI: IDE mode mismatch; forcing legacy mode\n");
+ prog &= ~5;
+ pdev->class &= ~5;
+ pci_write_config_byte(pdev, PCI_CLASS_PROG, prog);
+ /* need to re-assign BARs for compat mode */
+ quirk_ide_bases(pdev);
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_10, quirk_ide_samemode);
+
/* This was originally an Alpha specific thing, but it really fits here.
* The i82375 PCI/EISA bridge appears as non-classified. Fix that.
*/