mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 10:46:33 +00:00
PCI/ACPI: Move supported and control calculations to separate functions
Move the calculations of supported and controlled _OSC features out of negotiate_os_control() into separate functions. Link: https://lore.kernel.org/r/20210824122054.29481-3-joro@8bytes.org Signed-off-by: Joerg Roedel <jroedel@suse.de> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Rafael J. Wysocki <rafael@kernel.org>
This commit is contained in:
parent
af9d82626c
commit
4c6f6060b7
@ -396,6 +396,59 @@ static acpi_status acpi_pci_osc_control_set(acpi_handle handle, u32 *mask, u32 r
|
|||||||
return AE_OK;
|
return AE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u32 calculate_support(void)
|
||||||
|
{
|
||||||
|
u32 support;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* All supported architectures that use ACPI have support for
|
||||||
|
* PCI domains, so we indicate this in _OSC support capabilities.
|
||||||
|
*/
|
||||||
|
support = OSC_PCI_SEGMENT_GROUPS_SUPPORT;
|
||||||
|
support |= OSC_PCI_HPX_TYPE_3_SUPPORT;
|
||||||
|
if (pci_ext_cfg_avail())
|
||||||
|
support |= OSC_PCI_EXT_CONFIG_SUPPORT;
|
||||||
|
if (pcie_aspm_support_enabled())
|
||||||
|
support |= OSC_PCI_ASPM_SUPPORT | OSC_PCI_CLOCK_PM_SUPPORT;
|
||||||
|
if (pci_msi_enabled())
|
||||||
|
support |= OSC_PCI_MSI_SUPPORT;
|
||||||
|
if (IS_ENABLED(CONFIG_PCIE_EDR))
|
||||||
|
support |= OSC_PCI_EDR_SUPPORT;
|
||||||
|
|
||||||
|
return support;
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 calculate_control(void)
|
||||||
|
{
|
||||||
|
u32 control;
|
||||||
|
|
||||||
|
control = OSC_PCI_EXPRESS_CAPABILITY_CONTROL
|
||||||
|
| OSC_PCI_EXPRESS_PME_CONTROL;
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_PCIEASPM))
|
||||||
|
control |= OSC_PCI_EXPRESS_LTR_CONTROL;
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_HOTPLUG_PCI_PCIE))
|
||||||
|
control |= OSC_PCI_EXPRESS_NATIVE_HP_CONTROL;
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_HOTPLUG_PCI_SHPC))
|
||||||
|
control |= OSC_PCI_SHPC_NATIVE_HP_CONTROL;
|
||||||
|
|
||||||
|
if (pci_aer_available())
|
||||||
|
control |= OSC_PCI_EXPRESS_AER_CONTROL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Per the Downstream Port Containment Related Enhancements ECN to
|
||||||
|
* the PCI Firmware Spec, r3.2, sec 4.5.1, table 4-5,
|
||||||
|
* OSC_PCI_EXPRESS_DPC_CONTROL indicates the OS supports both DPC
|
||||||
|
* and EDR.
|
||||||
|
*/
|
||||||
|
if (IS_ENABLED(CONFIG_PCIE_DPC) && IS_ENABLED(CONFIG_PCIE_EDR))
|
||||||
|
control |= OSC_PCI_EXPRESS_DPC_CONTROL;
|
||||||
|
|
||||||
|
return control;
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
bool is_pcie)
|
||||||
{
|
{
|
||||||
@ -416,20 +469,7 @@ static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
support = calculate_support();
|
||||||
* All supported architectures that use ACPI have support for
|
|
||||||
* PCI domains, so we indicate this in _OSC support capabilities.
|
|
||||||
*/
|
|
||||||
support = OSC_PCI_SEGMENT_GROUPS_SUPPORT;
|
|
||||||
support |= OSC_PCI_HPX_TYPE_3_SUPPORT;
|
|
||||||
if (pci_ext_cfg_avail())
|
|
||||||
support |= OSC_PCI_EXT_CONFIG_SUPPORT;
|
|
||||||
if (pcie_aspm_support_enabled())
|
|
||||||
support |= OSC_PCI_ASPM_SUPPORT | OSC_PCI_CLOCK_PM_SUPPORT;
|
|
||||||
if (pci_msi_enabled())
|
|
||||||
support |= OSC_PCI_MSI_SUPPORT;
|
|
||||||
if (IS_ENABLED(CONFIG_PCIE_EDR))
|
|
||||||
support |= OSC_PCI_EDR_SUPPORT;
|
|
||||||
|
|
||||||
decode_osc_support(root, "OS supports", support);
|
decode_osc_support(root, "OS supports", support);
|
||||||
status = acpi_pci_osc_support(root, support);
|
status = acpi_pci_osc_support(root, support);
|
||||||
@ -456,31 +496,8 @@ static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
control = OSC_PCI_EXPRESS_CAPABILITY_CONTROL
|
requested = control = calculate_control();
|
||||||
| OSC_PCI_EXPRESS_PME_CONTROL;
|
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_PCIEASPM))
|
|
||||||
control |= OSC_PCI_EXPRESS_LTR_CONTROL;
|
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_HOTPLUG_PCI_PCIE))
|
|
||||||
control |= OSC_PCI_EXPRESS_NATIVE_HP_CONTROL;
|
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_HOTPLUG_PCI_SHPC))
|
|
||||||
control |= OSC_PCI_SHPC_NATIVE_HP_CONTROL;
|
|
||||||
|
|
||||||
if (pci_aer_available())
|
|
||||||
control |= OSC_PCI_EXPRESS_AER_CONTROL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Per the Downstream Port Containment Related Enhancements ECN to
|
|
||||||
* the PCI Firmware Spec, r3.2, sec 4.5.1, table 4-5,
|
|
||||||
* OSC_PCI_EXPRESS_DPC_CONTROL indicates the OS supports both DPC
|
|
||||||
* and EDR.
|
|
||||||
*/
|
|
||||||
if (IS_ENABLED(CONFIG_PCIE_DPC) && IS_ENABLED(CONFIG_PCIE_EDR))
|
|
||||||
control |= OSC_PCI_EXPRESS_DPC_CONTROL;
|
|
||||||
|
|
||||||
requested = control;
|
|
||||||
status = acpi_pci_osc_control_set(handle, &control,
|
status = acpi_pci_osc_control_set(handle, &control,
|
||||||
OSC_PCI_EXPRESS_CAPABILITY_CONTROL);
|
OSC_PCI_EXPRESS_CAPABILITY_CONTROL);
|
||||||
if (ACPI_SUCCESS(status)) {
|
if (ACPI_SUCCESS(status)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user