PCI/ACPI: correct error message for ASPM disabling
PATCH v2 1/2 PCI/ACPI: correct error message for ASPM disabling
If _OSC execution fails today for platforms without an _OSC entry, code is printing a misleading message saying disabling ASPM as follows:
acpi PNP0A03:00: _OSC failed (AE_NOT_FOUND); disabling ASPM
We need to ensure that platform supports ASPM to begin with.
--- drivers/acpi/pci_root.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/acpi/pci_root.c +3 -2
@@ -455,8 +455,9 @@ static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm)decode_osc_support (root,"OS supports" , support); status =acpi_pci_osc_support (root, support);if (ACPI_FAILURE (status)) { -dev_info (&device->dev,"_OSC failed (%s); disabling ASPM\n" , -acpi_format_exception (status)); +dev_info (&device->dev,"_OSC failed (%s)%s\n" , +acpi_format_exception (status), +pcie_aspm_support_enabled () ?"; disabling ASPM" :"" ); *no_aspm =1 ;return ; }
Signature · 1 line
2.7.4
PATCH v2 2/2 PCI/ACPI: allow _OSC presence to be optional for PCI
ACPI Spec 6.0 Section 6.2.11.3 OSC Implementation Example for PCI Host Bridge Devices:
For a host bridge device that originates a PCI Express hierarchy, the _OSC interface defined in this section is required.
For a host bridge device that originates a PCI/PCI-X bus hierarchy, inclusion of an _OSC object is optional.
Allow PCI host bridges to bail out silently if _OSC is not found.
--- drivers/acpi/pci_root.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
drivers/acpi/pci_root.c +11 -3
@@ -421,7 +421,8 @@ acpi_status acpi_pci_osc_control_set(acpi_handle handle, u32 *mask, u32 req) }EXPORT_SYMBOL (acpi_pci_osc_control_set); -static void negotiate_os_control (struct acpi_pci_root *root,int *no_aspm) +static void negotiate_os_control (struct acpi_pci_root *root,int *no_aspm, +bool is_pcie) {u32 support, control, requested;acpi_status status;
@@ -455,10 +456,15 @@ static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm)decode_osc_support (root,"OS supports" , support); status =acpi_pci_osc_support (root, support);if (ACPI_FAILURE (status)) { + *no_aspm =1 ; + +/* _OSC is optional for PCI host bridges */ +if ((status ==AE_NOT_FOUND ) && !is_pcie) +return ; +dev_info (&device->dev,"_OSC failed (%s)%s\n" ,acpi_format_exception (status),pcie_aspm_support_enabled () ?"; disabling ASPM" :"" ); - *no_aspm =1 ;return ; }
@@ -534,6 +540,7 @@ static int acpi_pci_root_add(struct acpi_device *device,acpi_handle handle = device->handle;int no_aspm =0 ;bool hotadd = system_state ==SYSTEM_RUNNING ; +bool is_pcie; root =kzalloc (sizeof (struct acpi_pci_root ),GFP_KERNEL );if (!root)
@@ -591,7 +598,8 @@ static int acpi_pci_root_add(struct acpi_device *device, root->mcfg_addr =acpi_pci_root_get_mcfg_addr (handle); -negotiate_os_control (root, &no_aspm); + is_pcie =strcmp (acpi_device_hid (device),"PNP0A08" ) ==0 ; +negotiate_os_control (root, &no_aspm, is_pcie);/* * TBD: Need PCI interface for enumeration/configuration of roots.
Signature · 1 line
2.7.4
Quoted 10 lines · Sinan Kaya
If
_OSCexecution fails today for platforms without an_OSCentry, code is printing a misleading message saying disabling ASPM as follows:acpi PNP0A03:00:
_OSCfailed (AE_NOT_FOUND); disabling ASPMWe need to ensure that platform supports ASPM to begin with.
Signed-off-by Sinan Kaya <[email protected]>Reported-by Michael Kelley <[email protected]>
Tentatively applied both to pci/aspm for v4.20, thanks!
Rafael, let me know if you object or would rather put these through your tree.
Quoted 23 lines
--- drivers/acpi/pci_root.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)drivers/acpi/pci_root.c +3
-2@@ -455,8 +455,9 @@ static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm)decode_osc_support (root,"OS supports" , support); status =acpi_pci_osc_support (root, support);if (ACPI_FAILURE (status)) { -dev_info (&device->dev,"_OSC failed (%s); disabling ASPM\n" , -acpi_format_exception (status)); +dev_info (&device->dev,"_OSC failed (%s)%s\n" , +acpi_format_exception (status), +pcie_aspm_support_enabled () ?"; disabling ASPM" :"" ); *no_aspm =1 ;return ; }Signature · 1 line
2.7.4
Rafael J. Wysocki
maintainerQuoted 8 lines · Bjorn Helgaas
Quoted 6 lines · Sinan Kaya
If
_OSCexecution fails today for platforms without an_OSCentry, code is printing a misleading message saying disabling ASPM as follows:acpi PNP0A03:00:
_OSCfailed (AE_NOT_FOUND); disabling ASPM
Quoted 8 lines
Quoted 4 lines
We need to ensure that platform supports ASPM to begin with.
Signed-off-by Sinan Kaya <[email protected]>Reported-by Michael Kelley <[email protected]>Tentatively applied both to pci/aspm for v4.20, thanks!
Rafael, let me know if you object or would rather put these through your tree.
I have no problems with these and they can go in via the PCI tree as far as I'm concerned.
Thanks,
Rafael