]> err.no Git - linux-2.6/blobdiff - arch/x86/kernel/mmconf-fam10h_64.c
Merge branch 'generic-ipi' into generic-ipi-for-linus
[linux-2.6] / arch / x86 / kernel / mmconf-fam10h_64.c
index 37897920ec651cdcd93f418ebdf8dddef641f818..fdfdc550b366043045a34a4c476c61d6ff67b5d7 100644 (file)
@@ -6,11 +6,15 @@
 #include <linux/mm.h>
 #include <linux/string.h>
 #include <linux/pci.h>
+#include <linux/dmi.h>
 #include <asm/pci-direct.h>
 #include <linux/sort.h>
 #include <asm/io.h>
 #include <asm/msr.h>
 #include <asm/acpi.h>
+#include <asm/mmconfig.h>
+
+#include "../pci/pci.h"
 
 struct pci_hostbridge_probe {
        u32 bus;
@@ -176,6 +180,9 @@ void __cpuinit fam10h_check_enable_mmcfg(void)
        u64 val;
        u32 address;
 
+       if (!(pci_probe & PCI_CHECK_ENABLE_AMD_MMCONF))
+               return;
+
        address = MSR_FAM10H_MMIO_CONF_BASE;
        rdmsrl(address, val);
 
@@ -213,3 +220,25 @@ void __cpuinit fam10h_check_enable_mmcfg(void)
               FAM10H_MMIO_CONF_ENABLE;
        wrmsrl(address, val);
 }
+
+static int __devinit set_check_enable_amd_mmconf(const struct dmi_system_id *d)
+{
+        pci_probe |= PCI_CHECK_ENABLE_AMD_MMCONF;
+        return 0;
+}
+
+static struct dmi_system_id __devinitdata mmconf_dmi_table[] = {
+        {
+                .callback = set_check_enable_amd_mmconf,
+                .ident = "Sun Microsystems Machine",
+                .matches = {
+                        DMI_MATCH(DMI_SYS_VENDOR, "Sun Microsystems"),
+                },
+        },
+       {}
+};
+
+void __init check_enable_amd_mmconf_dmi(void)
+{
+       dmi_check_system(mmconf_dmi_table);
+}