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
This commit is contained in:
Bjorn Helgaas
2024-11-25 13:40:46 -06:00
2 changed files with 18 additions and 3 deletions

View File

@@ -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;

View File

@@ -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);