From: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> If devicetree describes power supplies related to a PCI device, pci_pwrctrl_create_device() previously created a pwrctrl platform device even if CONFIG_PCI_PWRCTL was not enabled. When pci_pwrctrl_create_device() creates a pwrctrl device and returns it, pci_scan_device() doesn't enumerating the PCI device on the assumption that the pwrctrl core will rescan the bus after turning on the power. If CONFIG_PCI_PWRCTL is not enabled, the rescan never happens. This breaks PCI enumeration on any system that describes power supplies in devicetree but does not use pwrctrl. Jim reported that some brcmstb platforms break this way. If CONFIG_PCI_PWRCTL is not enabled, skip creating the pwrctrl platform device and scan the device normally. Fixes: 957f40d039a9 ("PCI/pwrctrl: Move creation of pwrctrl devices to pci_scan_device()") Reported-by: Jim Quinlan <james.quinlan@xxxxxxxxxxxx> Closes: https://lore.kernel.org/r/CA+-6iNwgaByXEYD3j=-+H_PKAxXRU78svPMRHDKKci8AGXAUPg@xxxxxxxxxxxxxx Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> --- This an alternate to https://lore.kernel.org/r/20250522140326.93869-1-manivannan.sadhasivam@xxxxxxxxxx It should accomplish the same thing but I think using #ifdef makes it a little more visible and easier to see that pci_pwrctrl_create_device() is only relevant when CONFIG_PCI_PWRCTL is enabled. drivers/pci/probe.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 364fa2a514f8..855da472b608 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -2510,6 +2510,7 @@ EXPORT_SYMBOL(pci_bus_read_dev_vendor_id); static struct platform_device *pci_pwrctrl_create_device(struct pci_bus *bus, int devfn) { +#if defined(CONFIG_PCI_PWRCTL) || defined(CONFIG_PCI_PWRCTL_MODULE) struct pci_host_bridge *host = pci_find_host_bridge(bus); struct platform_device *pdev; struct device_node *np; @@ -2536,6 +2537,9 @@ static struct platform_device *pci_pwrctrl_create_device(struct pci_bus *bus, in } return pdev; +#else + return NULL; +#endif } /* -- 2.43.0