aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/pci_root.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/pci_root.c')
-rw-r--r--drivers/acpi/pci_root.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
index 642554b1b60c..5b38a026d122 100644
--- a/drivers/acpi/pci_root.c
+++ b/drivers/acpi/pci_root.c
@@ -31,6 +31,7 @@
31#include <linux/spinlock.h> 31#include <linux/spinlock.h>
32#include <linux/pm.h> 32#include <linux/pm.h>
33#include <linux/pci.h> 33#include <linux/pci.h>
34#include <linux/pci-acpi.h>
34#include <linux/acpi.h> 35#include <linux/acpi.h>
35#include <acpi/acpi_bus.h> 36#include <acpi/acpi_bus.h>
36#include <acpi/acpi_drivers.h> 37#include <acpi/acpi_drivers.h>
@@ -193,6 +194,7 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
193 unsigned long long value = 0; 194 unsigned long long value = 0;
194 acpi_handle handle = NULL; 195 acpi_handle handle = NULL;
195 struct acpi_device *child; 196 struct acpi_device *child;
197 u32 flags, base_flags;
196 198
197 199
198 if (!device) 200 if (!device)
@@ -210,6 +212,13 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
210 212
211 device->ops.bind = acpi_pci_bind; 213 device->ops.bind = acpi_pci_bind;
212 214
215 /*
216 * All supported architectures that use ACPI have support for
217 * PCI domains, so we indicate this in _OSC support capabilities.
218 */
219 flags = base_flags = OSC_PCI_SEGMENT_GROUPS_SUPPORT;
220 pci_acpi_osc_support(device->handle, flags);
221
213 /* 222 /*
214 * Segment 223 * Segment
215 * ------- 224 * -------
@@ -335,6 +344,17 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
335 list_for_each_entry(child, &device->children, node) 344 list_for_each_entry(child, &device->children, node)
336 acpi_pci_bridge_scan(child); 345 acpi_pci_bridge_scan(child);
337 346
347 /* Indicate support for various _OSC capabilities. */
348 if (pci_ext_cfg_avail(root->bus->self))
349 flags |= OSC_EXT_PCI_CONFIG_SUPPORT;
350 if (pcie_aspm_enabled())
351 flags |= OSC_ACTIVE_STATE_PWR_SUPPORT |
352 OSC_CLOCK_PWR_CAPABILITY_SUPPORT;
353 if (pci_msi_enabled())
354 flags |= OSC_MSI_SUPPORT;
355 if (flags != base_flags)
356 pci_acpi_osc_support(device->handle, flags);
357
338 end: 358 end:
339 if (result) { 359 if (result) {
340 if (!list_empty(&root->node)) 360 if (!list_empty(&root->node))