|
Kyle McMartin |
6558398 |
commit 885c252ffb059dc493200bdb981bdd21cabe4442
|
|
Kyle McMartin |
6558398 |
Author: Matthew Garrett <mjg@redhat.com>
|
|
Kyle McMartin |
6558398 |
Date: Thu Dec 9 18:31:59 2010 -0500
|
|
Kyle McMartin |
6558398 |
|
|
Kyle McMartin |
6558398 |
PCI: _OSC "supported" field should contain supported features, not enabled ones
|
|
Kyle McMartin |
6558398 |
|
|
Kyle McMartin |
6558398 |
From testing with Windows, the call to the PCI root _OSC method includes
|
|
Kyle McMartin |
6558398 |
the full set of features supported by the operating system even if the
|
|
Kyle McMartin |
6558398 |
hardware has already indicated that it doesn't support ASPM or MSI.
|
|
Kyle McMartin |
6558398 |
https://bugzilla.redhat.com/show_bug.cgi?id=638912 is a case where making
|
|
Kyle McMartin |
6558398 |
the _OSC call will incorrectly configure the chipset unless the supported
|
|
Kyle McMartin |
6558398 |
field has bits 1, 2 and 4 set. Rework the functionality to ensure that
|
|
Kyle McMartin |
6558398 |
we match this behaviour.
|
|
Kyle McMartin |
6558398 |
|
|
Kyle McMartin |
6558398 |
Signed-off-by: Matthew Garrett <mjg@redhat.com>
|
|
Kyle McMartin |
6558398 |
|
|
Kyle McMartin |
6558398 |
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
|
|
Kyle McMartin |
6558398 |
index 96668ad..afb5d08 100644
|
|
Kyle McMartin |
6558398 |
--- a/drivers/acpi/pci_root.c
|
|
Kyle McMartin |
6558398 |
+++ b/drivers/acpi/pci_root.c
|
|
Kyle McMartin |
6558398 |
@@ -450,7 +450,7 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
|
|
Kyle McMartin |
6558398 |
struct acpi_pci_root *root;
|
|
Kyle McMartin |
6558398 |
acpi_handle handle;
|
|
Kyle McMartin |
6558398 |
struct acpi_device *child;
|
|
Kyle McMartin |
6558398 |
- u32 flags, base_flags;
|
|
Kyle McMartin |
6558398 |
+ u32 flags;
|
|
Kyle McMartin |
6558398 |
|
|
Kyle McMartin |
6558398 |
root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL);
|
|
Kyle McMartin |
6558398 |
if (!root)
|
|
Kyle McMartin |
6558398 |
@@ -498,10 +498,15 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
|
|
Kyle McMartin |
6558398 |
device->driver_data = root;
|
|
Kyle McMartin |
6558398 |
|
|
Kyle McMartin |
6558398 |
/*
|
|
Kyle McMartin |
6558398 |
- * All supported architectures that use ACPI have support for
|
|
Kyle McMartin |
6558398 |
- * PCI domains, so we indicate this in _OSC support capabilities.
|
|
Kyle McMartin |
6558398 |
+ * Indicate support for various _OSC capabilities. These match
|
|
Kyle McMartin |
6558398 |
+ * what the operating system supports, not what the hardware supports,
|
|
Kyle McMartin |
6558398 |
+ * so they shouldn't be conditional on functionality that's been
|
|
Kyle McMartin |
6558398 |
+ * blacklisted
|
|
Kyle McMartin |
6558398 |
*/
|
|
Kyle McMartin |
6558398 |
- flags = base_flags = OSC_PCI_SEGMENT_GROUPS_SUPPORT;
|
|
Kyle McMartin |
6558398 |
+ flags = OSC_EXT_PCI_CONFIG_SUPPORT | OSC_ACTIVE_STATE_PWR_SUPPORT |
|
|
Kyle McMartin |
6558398 |
+ OSC_CLOCK_PWR_CAPABILITY_SUPPORT |
|
|
Kyle McMartin |
6558398 |
+ OSC_PCI_SEGMENT_GROUPS_SUPPORT | OSC_MSI_SUPPORT;
|
|
Kyle McMartin |
6558398 |
+
|
|
Kyle McMartin |
6558398 |
acpi_pci_osc_support(root, flags);
|
|
Kyle McMartin |
6558398 |
|
|
Kyle McMartin |
6558398 |
/*
|
|
Kyle McMartin |
6558398 |
@@ -555,17 +560,6 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
|
|
Kyle McMartin |
6558398 |
list_for_each_entry(child, &device->children, node)
|
|
Kyle McMartin |
6558398 |
acpi_pci_bridge_scan(child);
|
|
Kyle McMartin |
6558398 |
|
|
Kyle McMartin |
6558398 |
- /* Indicate support for various _OSC capabilities. */
|
|
Kyle McMartin |
6558398 |
- if (pci_ext_cfg_avail(root->bus->self))
|
|
Kyle McMartin |
6558398 |
- flags |= OSC_EXT_PCI_CONFIG_SUPPORT;
|
|
Kyle McMartin |
6558398 |
- if (pcie_aspm_enabled())
|
|
Kyle McMartin |
6558398 |
- flags |= OSC_ACTIVE_STATE_PWR_SUPPORT |
|
|
Kyle McMartin |
6558398 |
- OSC_CLOCK_PWR_CAPABILITY_SUPPORT;
|
|
Kyle McMartin |
6558398 |
- if (pci_msi_enabled())
|
|
Kyle McMartin |
6558398 |
- flags |= OSC_MSI_SUPPORT;
|
|
Kyle McMartin |
6558398 |
- if (flags != base_flags)
|
|
Kyle McMartin |
6558398 |
- acpi_pci_osc_support(root, flags);
|
|
Kyle McMartin |
6558398 |
-
|
|
Kyle McMartin |
6558398 |
pci_acpi_add_bus_pm_notifier(device, root->bus);
|
|
Kyle McMartin |
6558398 |
if (device->wakeup.flags.run_wake)
|
|
Kyle McMartin |
6558398 |
device_set_run_wake(root->bus->bridge, true);
|