summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Rothwell <sfr@canb.auug.org.au>2010-02-16 18:16:28 +1100
committerStephen Rothwell <sfr@canb.auug.org.au>2010-02-16 18:16:28 +1100
commitb766a27a403e5961d27febf13347bbf8ebed2b8d (patch)
tree020562303f3f2b62d10d08c904735eaec735d3af
parent52a9977058aa338cdbc35ad20b5e820813f4045d (diff)
Revert "x86/PCI: use host bridge _CRS info by default on 2008 and newer machines"
This reverts commit 6b673390ae99fbaeeafc40a6e42ba97e1beada0b.
-rw-r--r--Documentation/kernel-parameters.txt8
-rw-r--r--arch/ia64/include/asm/acpi.h1
-rw-r--r--arch/x86/include/asm/pci_x86.h1
-rw-r--r--arch/x86/pci/acpi.c53
-rw-r--r--arch/x86/pci/common.c3
-rw-r--r--drivers/acpi/pci_root.c1
-rw-r--r--include/acpi/acpi_drivers.h1
7 files changed, 8 insertions, 60 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 5056c4662a5d..c496dfafb819 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1988,12 +1988,8 @@ and is between 256 and 4096 characters. It is defined in the file
IRQ routing is enabled.
noacpi [X86] Do not use ACPI for IRQ routing
or for PCI scanning.
- use_crs [X86] Use PCI host bridge window information
- from ACPI. On BIOSes from 2008 or later, this
- is enabled by default. If you need to use this,
- please report a bug.
- nocrs [X86] Ignore PCI host bridge windows from ACPI.
- If you need to use this, please report a bug.
+ use_crs [X86] Use _CRS for PCI resource
+ allocation.
routeirq Do IRQ routing for all PCI devices.
This is normally done in pci_enable_device(),
so this option is a temporary workaround
diff --git a/arch/ia64/include/asm/acpi.h b/arch/ia64/include/asm/acpi.h
index 7f2d7f2d3e2a..7ae58892ba8d 100644
--- a/arch/ia64/include/asm/acpi.h
+++ b/arch/ia64/include/asm/acpi.h
@@ -97,7 +97,6 @@ ia64_acpi_release_global_lock (unsigned int *lock)
#endif
#define acpi_processor_cstate_check(x) (x) /* no idle limits on IA64 :) */
static inline void disable_acpi(void) { }
-static inline void pci_acpi_crs_quirks(void) { }
const char *acpi_get_sysname (void);
int acpi_request_vector (u32 int_type);
diff --git a/arch/x86/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h
index 2692cdcc7068..cb39be7416d4 100644
--- a/arch/x86/include/asm/pci_x86.h
+++ b/arch/x86/include/asm/pci_x86.h
@@ -29,7 +29,6 @@
#define PCI_CHECK_ENABLE_AMD_MMCONF 0x20000
#define PCI_HAS_IO_ECS 0x40000
#define PCI_NOASSIGN_ROMS 0x80000
-#define PCI_ROOT_NO_CRS 0x100000
extern unsigned int pci_probe;
extern unsigned long pirq_table_addr;
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
index 5f11ff6f5389..a2f8cdb8c1d5 100644
--- a/arch/x86/pci/acpi.c
+++ b/arch/x86/pci/acpi.c
@@ -15,51 +15,6 @@ struct pci_root_info {
int busnum;
};
-static bool pci_use_crs = true;
-
-static int __init set_use_crs(const struct dmi_system_id *id)
-{
- pci_use_crs = true;
- return 0;
-}
-
-static const struct dmi_system_id pci_use_crs_table[] __initconst = {
- /* http://bugzilla.kernel.org/show_bug.cgi?id=14183 */
- {
- .callback = set_use_crs,
- .ident = "IBM System x3800",
- .matches = {
- DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
- DMI_MATCH(DMI_PRODUCT_NAME, "x3800"),
- },
- },
- {}
-};
-
-void __init pci_acpi_crs_quirks(void)
-{
- int year;
-
- if (dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL) && year < 2008)
- pci_use_crs = false;
-
- dmi_check_system(pci_use_crs_table);
-
- /*
- * If the user specifies "pci=use_crs" or "pci=nocrs" explicitly, that
- * takes precedence over anything we figured out above.
- */
- if (pci_probe & PCI_ROOT_NO_CRS)
- pci_use_crs = false;
- else if (pci_probe & PCI_USE__CRS)
- pci_use_crs = true;
-
- printk(KERN_INFO "PCI: %s host bridge windows from ACPI; "
- "if necessary, use \"pci=%s\" and report a bug\n",
- pci_use_crs ? "Using" : "Ignoring",
- pci_use_crs ? "nocrs" : "use_crs");
-}
-
static acpi_status
resource_to_addr(struct acpi_resource *resource,
struct acpi_resource_address64 *addr)
@@ -151,7 +106,7 @@ setup_resource(struct acpi_resource *acpi_res, void *data)
res->child = NULL;
align_resource(info->bridge, res);
- if (!pci_use_crs) {
+ if (!(pci_probe & PCI_USE__CRS)) {
dev_printk(KERN_DEBUG, &info->bridge->dev,
"host bridge window %pR (ignored)\n", res);
return AE_OK;
@@ -182,8 +137,12 @@ get_current_resources(struct acpi_device *device, int busnum,
struct pci_root_info info;
size_t size;
- if (pci_use_crs)
+ if (pci_probe & PCI_USE__CRS)
pci_bus_remove_resources(bus);
+ else
+ dev_info(&device->dev,
+ "ignoring host bridge windows from ACPI; "
+ "boot with \"pci=use_crs\" to use them\n");
info.bridge = device;
info.bus = bus;
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index 3736176acaab..d2552c68e94d 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -520,9 +520,6 @@ char * __devinit pcibios_setup(char *str)
} else if (!strcmp(str, "use_crs")) {
pci_probe |= PCI_USE__CRS;
return NULL;
- } else if (!strcmp(str, "nocrs")) {
- pci_probe |= PCI_ROOT_NO_CRS;
- return NULL;
} else if (!strcmp(str, "earlydump")) {
pci_early_dump_regs = 1;
return NULL;
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
index 4a46051a831e..64ae2f2a209a 100644
--- a/drivers/acpi/pci_root.c
+++ b/drivers/acpi/pci_root.c
@@ -566,7 +566,6 @@ static int __init acpi_pci_root_init(void)
if (acpi_pci_disabled)
return 0;
- pci_acpi_crs_quirks();
if (acpi_bus_register_driver(&acpi_pci_root_driver) < 0)
return -ENODEV;
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h
index 3a4767c01c5f..f4906f6568d4 100644
--- a/include/acpi/acpi_drivers.h
+++ b/include/acpi/acpi_drivers.h
@@ -104,7 +104,6 @@ int acpi_pci_bind_root(struct acpi_device *device);
struct pci_bus *pci_acpi_scan_root(struct acpi_device *device, int domain,
int bus);
-void pci_acpi_crs_quirks(void);
/* --------------------------------------------------------------------------
Processor