[PATCH] PCI: qcom: Power on pwrctrl devices for firmware-managed hosts
From: Zhangfei Gao
Date: Thu Nov 05 2026 - 05:26:29 EST
commit b921aa3f8dec ("PCI/pwrctrl: Switch to pwrctrl create, power
on/off, destroy APIs") switched PCI pwrctrl users to explicit create and
power control APIs, but only added the calls to the regular DesignWare
host initialization path.
Firmware-managed hosts bypass that path and probe the ECAM host bridge
directly. Endpoints already powered by firmware, such as NVMe devices,
remain discoverable. Endpoints that rely on Linux pwrctrl and pwrseq,
such as WCN7850, remain powered off and cannot be discovered.
Create and power on pwrctrl devices before probing the host bridge, and
release them on errors.
Fixes: b921aa3f8deca ("PCI/pwrctrl: Switch to pwrctrl create, power on/off, destroy APIs")
Signed-off-by: Zhangfei Gao <zhangfei.gao@xxxxxxxxxxxxxxxx>
---
drivers/pci/controller/dwc/pcie-qcom.c | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
index 0d56051b5de3..7313acd7e480 100644
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -2308,11 +2308,27 @@ static int qcom_pcie_probe(struct platform_device *pdev)
bridge->ops = (struct pci_ops *)&pci_qcom_ecam_ops.pci_ops;
bridge->msi_domain = true;
+ ret = pci_pwrctrl_create_devices(dev);
+ if (ret)
+ goto err_fw_pwrctrl_destroy;
+
+ ret = pci_pwrctrl_power_on_devices(dev);
+ if (ret)
+ goto err_fw_pwrctrl_destroy;
+
ret = pci_host_probe(bridge);
if (ret)
- goto err_pm_runtime_put;
+ goto err_fw_pwrctrl_power_off;
return 0;
+
+err_fw_pwrctrl_power_off:
+ pci_pwrctrl_power_off_devices(dev);
+err_fw_pwrctrl_destroy:
+ if (ret != -EPROBE_DEFER)
+ pci_pwrctrl_destroy_devices(dev);
+
+ goto err_pm_runtime_put;
}
pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
--
2.43.0