patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / arch / arm / kernel / bios32.c
index 1442861..927711c 100644 (file)
@@ -155,6 +155,30 @@ static void __devinit pci_fixup_dec21285(struct pci_dev *dev)
        }
 }
 
+/*
+ * Same as above. The PrPMC800 carrier board for the PrPMC1100 
+ * card maps the host-bridge @ 00:01:00 for some reason and it
+ * ends up getting scanned. Note that we only want to do this
+ * fixup when we find the IXP4xx on a PrPMC system, which is why
+ * we check the machine type. We could be running on a board
+ * with an IXP4xx target device and we don't want to kill the
+ * resources in that case.
+ */
+static void __devinit pci_fixup_prpmc1100(struct pci_dev *dev)
+{
+       int i;
+
+       if (machine_is_prpmc1100()) {
+               dev->class &= 0xff;
+               dev->class |= PCI_CLASS_BRIDGE_HOST << 8;
+               for (i = 0; i < PCI_NUM_RESOURCES; i++) {
+                       dev->resource[i].start = 0;
+                       dev->resource[i].end   = 0;
+                       dev->resource[i].flags = 0;
+               }
+       }
+}
+
 /*
  * PCI IDE controllers use non-standard I/O port decoding, respect it.
  */
@@ -273,6 +297,10 @@ struct pci_fixup pcibios_fixups[] = {
                PCI_FIXUP_HEADER,
                PCI_ANY_ID,             PCI_ANY_ID,
                pci_fixup_ide_bases
+       }, {
+               PCI_FIXUP_HEADER,
+               PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_IXP4XX,
+               pci_fixup_prpmc1100
        }, { 0 }
 };