mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08: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;
|
||||
}
|
||||
|
||||
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,
|
||||
bool is_pcie)
|
||||
{
|
||||
@ -416,20 +469,7 @@ static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm,
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* 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;
|
||||
support = calculate_support();
|
||||
|
||||
decode_osc_support(root, "OS supports", 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;
|
||||
}
|
||||
|
||||
control = OSC_PCI_EXPRESS_CAPABILITY_CONTROL
|
||||
| OSC_PCI_EXPRESS_PME_CONTROL;
|
||||
requested = control = calculate_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,
|
||||
OSC_PCI_EXPRESS_CAPABILITY_CONTROL);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
|
Loading…
Reference in New Issue
Block a user