|
@@ -665,6 +665,16 @@ static void pci_amd_enable_64bit_bar(struct pci_dev *dev)
|
|
|
unsigned i;
|
|
|
u32 base, limit, high;
|
|
|
struct resource *res, *conflict;
|
|
|
+ struct pci_dev *other;
|
|
|
+
|
|
|
+ /* Check that we are the only device of that type */
|
|
|
+ other = pci_get_device(dev->vendor, dev->device, NULL);
|
|
|
+ if (other != dev ||
|
|
|
+ (other = pci_get_device(dev->vendor, dev->device, other))) {
|
|
|
+ /* This is a multi-socket system, don't touch it for now */
|
|
|
+ pci_dev_put(other);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
for (i = 0; i < 8; i++) {
|
|
|
pci_read_config_dword(dev, AMD_141b_MMIO_BASE(i), &base);
|
|
@@ -719,10 +729,10 @@ static void pci_amd_enable_64bit_bar(struct pci_dev *dev)
|
|
|
|
|
|
pci_bus_add_resource(dev->bus, res, 0);
|
|
|
}
|
|
|
-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_AMD, 0x1401, pci_amd_enable_64bit_bar);
|
|
|
-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_AMD, 0x141b, pci_amd_enable_64bit_bar);
|
|
|
-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_AMD, 0x1571, pci_amd_enable_64bit_bar);
|
|
|
-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_AMD, 0x15b1, pci_amd_enable_64bit_bar);
|
|
|
-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_AMD, 0x1601, pci_amd_enable_64bit_bar);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x1401, pci_amd_enable_64bit_bar);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x141b, pci_amd_enable_64bit_bar);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x1571, pci_amd_enable_64bit_bar);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x15b1, pci_amd_enable_64bit_bar);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x1601, pci_amd_enable_64bit_bar);
|
|
|
|
|
|
#endif
|