PCI: Move is_pciehp check out of pciehp_is_native()
pci_bridge_d3_possible() seeks to forbid runtime power management on: * Non Hot-Plug Capable PCIe ports which are nevertheless ACPI slots (recognizable as: bridge->is_hotplug_bridge && !bridge->is_pciehp) * Hot-Plug Capable PCIe ports for which platform firmware has not granted PCIe Native Hot-Plug control to the operating system (recognizable as: bridge->is_pciehp && !pciehp_is_native(bridge)) Somewhat confusingly, the check for is_hotplug_bridge is in pci_bridge_d3_possible(), whereas the one for is_pciehp is in pciehp_is_native(). For clarity, check is_pciehp directly in pci_bridge_d3_possible() (and in the other caller of pciehp_is_native(), hotplug_is_native()). Rephrase the code comment preceding these checks to no longer mention "System Management Mode", which is an x86 term inappropriate in generic PCI code. Likewise no longer mention "Thunderbolt on non-Macs", because there is nothing Thunderbolt-specific about these checks. It used to be the case that non-Macs relied on the platform for Thunderbolt tunnel management and hotplug, but they've since moved to OS-native tunnel management (as Macs always have), hence the code comment is no longer accurate. There is a subsequent check for is_hotplug_bridge further down in pci_bridge_d3_possible(). Change the check to is_pciehp because any ports matching "bridge->is_hotplug_bridge && !bridge->is_pciehp" are already filtered out at the top of the function. Do the same for another check in acpi_pci_bridge_d3(), which is called from pci_bridge_d3_possible() via platform_pci_bridge_d3(). No functional change intended. Signed-off-by: Lukas Wunner <lukas@wunner.de> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://patch.msgid.link/18b2c2110ad0f27a34b189d793310b9c4f2f24a0.1752390102.git.lukas@wunner.depull/1320/head
parent
c6036c3394
commit
c2f9de5e2d
|
|
@ -820,9 +820,6 @@ bool pciehp_is_native(struct pci_dev *bridge)
|
||||||
if (!IS_ENABLED(CONFIG_HOTPLUG_PCI_PCIE))
|
if (!IS_ENABLED(CONFIG_HOTPLUG_PCI_PCIE))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!bridge->is_pciehp)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (pcie_ports_native)
|
if (pcie_ports_native)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
@ -1000,7 +997,7 @@ bool acpi_pci_bridge_d3(struct pci_dev *dev)
|
||||||
struct acpi_device *adev, *rpadev;
|
struct acpi_device *adev, *rpadev;
|
||||||
const union acpi_object *obj;
|
const union acpi_object *obj;
|
||||||
|
|
||||||
if (acpi_pci_disabled || !dev->is_hotplug_bridge)
|
if (acpi_pci_disabled || !dev->is_pciehp)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
adev = ACPI_COMPANION(&dev->dev);
|
adev = ACPI_COMPANION(&dev->dev);
|
||||||
|
|
|
||||||
|
|
@ -3050,10 +3050,14 @@ bool pci_bridge_d3_possible(struct pci_dev *bridge)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hotplug ports handled by firmware in System Management Mode
|
* Hotplug ports handled by platform firmware may not be put
|
||||||
* may not be put into D3 by the OS (Thunderbolt on non-Macs).
|
* into D3 by the OS, e.g. ACPI slots ...
|
||||||
*/
|
*/
|
||||||
if (bridge->is_hotplug_bridge && !pciehp_is_native(bridge))
|
if (bridge->is_hotplug_bridge && !bridge->is_pciehp)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* ... or PCIe hotplug ports not handled natively by the OS. */
|
||||||
|
if (bridge->is_pciehp && !pciehp_is_native(bridge))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (pci_bridge_d3_force)
|
if (pci_bridge_d3_force)
|
||||||
|
|
@ -3072,7 +3076,7 @@ bool pci_bridge_d3_possible(struct pci_dev *bridge)
|
||||||
* by vendors for runtime D3 at least until 2018 because there
|
* by vendors for runtime D3 at least until 2018 because there
|
||||||
* was no OS support.
|
* was no OS support.
|
||||||
*/
|
*/
|
||||||
if (bridge->is_hotplug_bridge)
|
if (bridge->is_pciehp)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (dmi_check_system(bridge_d3_blacklist))
|
if (dmi_check_system(bridge_d3_blacklist))
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,7 @@ static inline bool shpchp_is_native(struct pci_dev *bridge) { return true; }
|
||||||
|
|
||||||
static inline bool hotplug_is_native(struct pci_dev *bridge)
|
static inline bool hotplug_is_native(struct pci_dev *bridge)
|
||||||
{
|
{
|
||||||
return pciehp_is_native(bridge) || shpchp_is_native(bridge);
|
return (bridge->is_pciehp && pciehp_is_native(bridge)) ||
|
||||||
|
shpchp_is_native(bridge);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue