diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2024-11-25 22:40:46 +0300 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2024-11-25 22:40:46 +0300 |
commit | 95e93032badb21e1d232c7e4a882fc359fa18a55 (patch) | |
tree | b587fccdac50f10f48bfd12730cc3b4371db0fa3 /drivers/pci | |
parent | 2438a7457179957b273e76e3090a82b19a60a287 (diff) | |
parent | dc421bb3c0db2aac926b548d259d3b550394908e (diff) | |
download | linux-95e93032badb21e1d232c7e4a882fc359fa18a55.tar.xz |
Merge branch 'pci/pm'
- Enable starfive controller runtime PM before probing host bridge (Mayank
Rana)
- Enable runtime power management for host bridges (Krishna chaitanya
chundru)
* pci/pm:
PCI: Enable runtime PM of the host bridge
PCI: starfive: Enable controller runtime PM before probing host bridge
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/controller/plda/pcie-starfive.c | 10 | ||||
-rw-r--r-- | drivers/pci/probe.c | 11 |
2 files changed, 18 insertions, 3 deletions
diff --git a/drivers/pci/controller/plda/pcie-starfive.c b/drivers/pci/controller/plda/pcie-starfive.c index 0567ec373a3e..e73c1b7bc8ef 100644 --- a/drivers/pci/controller/plda/pcie-starfive.c +++ b/drivers/pci/controller/plda/pcie-starfive.c @@ -404,6 +404,9 @@ static int starfive_pcie_probe(struct platform_device *pdev) if (ret) return ret; + pm_runtime_enable(&pdev->dev); + pm_runtime_get_sync(&pdev->dev); + plda->host_ops = &sf_host_ops; plda->num_events = PLDA_MAX_EVENT_NUM; /* mask doorbell event */ @@ -413,11 +416,12 @@ static int starfive_pcie_probe(struct platform_device *pdev) plda->events_bitmap <<= PLDA_NUM_DMA_EVENTS; ret = plda_pcie_host_init(&pcie->plda, &starfive_pcie_ops, &stf_pcie_event); - if (ret) + if (ret) { + pm_runtime_put_sync(&pdev->dev); + pm_runtime_disable(&pdev->dev); return ret; + } - pm_runtime_enable(&pdev->dev); - pm_runtime_get_sync(&pdev->dev); platform_set_drvdata(pdev, pcie); return 0; diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 8c54084c585b..9b2aa4ef3192 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -3111,6 +3111,17 @@ int pci_host_probe(struct pci_host_bridge *bridge) pcie_bus_configure_settings(child); pci_bus_add_devices(bus); + + /* + * Ensure pm_runtime_enable() is called for the controller drivers + * before calling pci_host_probe(). The PM framework expects that + * if the parent device supports runtime PM, it will be enabled + * before child runtime PM is enabled. + */ + pm_runtime_set_active(&bridge->dev); + pm_runtime_no_callbacks(&bridge->dev); + devm_pm_runtime_enable(&bridge->dev); + return 0; } EXPORT_SYMBOL_GPL(pci_host_probe); |