vserver 1.9.5.x5
[linux-2.6.git] / arch / i386 / pci / mmconfig.c
index f42c453..504fb18 100644 (file)
@@ -30,7 +30,7 @@ static inline void pci_exp_set_dev_base(int bus, int devfn)
        u32 dev_base = pci_mmcfg_base_addr | (bus << 20) | (devfn << 12);
        if (dev_base != mmcfg_last_accessed_device) {
                mmcfg_last_accessed_device = dev_base;
-               set_fixmap(FIX_PCIE_MCFG, dev_base);
+               set_fixmap_nocache(FIX_PCIE_MCFG, dev_base);
        }
 }
 
@@ -85,9 +85,6 @@ static int pci_mmcfg_write(int seg, int bus, int devfn, int reg, int len, u32 va
                break;
        }
 
-       /* Dummy read to flush PCI write */
-       readl(mmcfg_virt_addr);
-
        spin_unlock_irqrestore(&pci_config_lock, flags);
 
        return 0;
@@ -105,6 +102,13 @@ static int __init pci_mmcfg_init(void)
        if (!pci_mmcfg_base_addr)
                goto out;
 
+       /* Kludge for now. Don't use mmconfig on AMD systems because
+          those have some busses where mmconfig doesn't work,
+          and we don't parse ACPI MCFG well enough to handle that. 
+          Remove when proper handling is added. */
+       if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
+               goto out; 
+
        printk(KERN_INFO "PCI: Using MMCONFIG\n");
        raw_pci_ops = &pci_mmcfg;
        pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF;