aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/pci/acpi.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/pci/acpi.c')
-rw-r--r--arch/x86/pci/acpi.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
index 192397c98606..49e5195223db 100644
--- a/arch/x86/pci/acpi.c
+++ b/arch/x86/pci/acpi.c
@@ -22,6 +22,7 @@ struct pci_root_info {
22}; 22};
23 23
24static bool pci_use_crs = true; 24static bool pci_use_crs = true;
25static bool pci_ignore_seg = false;
25 26
26static int __init set_use_crs(const struct dmi_system_id *id) 27static int __init set_use_crs(const struct dmi_system_id *id)
27{ 28{
@@ -35,7 +36,14 @@ static int __init set_nouse_crs(const struct dmi_system_id *id)
35 return 0; 36 return 0;
36} 37}
37 38
38static const struct dmi_system_id pci_use_crs_table[] __initconst = { 39static int __init set_ignore_seg(const struct dmi_system_id *id)
40{
41 printk(KERN_INFO "PCI: %s detected: ignoring ACPI _SEG\n", id->ident);
42 pci_ignore_seg = true;
43 return 0;
44}
45
46static const struct dmi_system_id pci_crs_quirks[] __initconst = {
39 /* http://bugzilla.kernel.org/show_bug.cgi?id=14183 */ 47 /* http://bugzilla.kernel.org/show_bug.cgi?id=14183 */
40 { 48 {
41 .callback = set_use_crs, 49 .callback = set_use_crs,
@@ -98,6 +106,16 @@ static const struct dmi_system_id pci_use_crs_table[] __initconst = {
98 DMI_MATCH(DMI_BIOS_VERSION, "6JET85WW (1.43 )"), 106 DMI_MATCH(DMI_BIOS_VERSION, "6JET85WW (1.43 )"),
99 }, 107 },
100 }, 108 },
109
110 /* https://bugzilla.kernel.org/show_bug.cgi?id=15362 */
111 {
112 .callback = set_ignore_seg,
113 .ident = "HP xw9300",
114 .matches = {
115 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
116 DMI_MATCH(DMI_PRODUCT_NAME, "HP xw9300 Workstation"),
117 },
118 },
101 {} 119 {}
102}; 120};
103 121
@@ -108,7 +126,7 @@ void __init pci_acpi_crs_quirks(void)
108 if (dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL) && year < 2008) 126 if (dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL) && year < 2008)
109 pci_use_crs = false; 127 pci_use_crs = false;
110 128
111 dmi_check_system(pci_use_crs_table); 129 dmi_check_system(pci_crs_quirks);
112 130
113 /* 131 /*
114 * If the user specifies "pci=use_crs" or "pci=nocrs" explicitly, that 132 * If the user specifies "pci=use_crs" or "pci=nocrs" explicitly, that
@@ -455,6 +473,9 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_pci_root *root)
455 int pxm; 473 int pxm;
456#endif 474#endif
457 475
476 if (pci_ignore_seg)
477 domain = 0;
478
458 if (domain && !pci_domains_supported) { 479 if (domain && !pci_domains_supported) {
459 printk(KERN_WARNING "pci_bus %04x:%02x: " 480 printk(KERN_WARNING "pci_bus %04x:%02x: "
460 "ignored (multiple domains not supported)\n", 481 "ignored (multiple domains not supported)\n",