X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Farm%2Fkernel%2Fbios32.c;h=927711c48492dab18867bf502594a6973016e02c;hb=746550cff061581f89c687ada8523670768364f2;hp=1442861492f32b1ec2e085f702aade3eadb89d7b;hpb=86090fcac5e27b630656fe3d963a6b80e26dac44;p=linux-2.6.git diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index 144286149..927711c48 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c @@ -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 } };