Re: [PATCH v2] PCI: starfive: Enable PCIe controller's runtime PM before probing host bridge

From: Manivannan Sadhasivam
Date: Fri Oct 11 2024 - 23:50:41 EST


On Fri, Oct 11, 2024 at 04:55:30PM -0700, Mayank Rana wrote:
> PCIe controller device (i.e. PCIe starfive device) is parent to PCIe host
> bridge device. To enable runtime PM of PCIe host bridge device (child
> device), it is must to enable parent device's runtime PM to avoid seeing
> WARN_ON as "Enabling runtime PM for inactive device with active children".

"to avoid seeing the below warning from PM core:

pcie-starfive 940000000.pcie: Enabling runtime PM for inactive device
with active children"

> Fix this issue by enabling starfive pcie controller device's runtime PM
> before calling into pci_host_probe() through plda_pcie_host_init().

"before calling pci_host_probe() in plda_pcie_host_init()"

>
> Tested-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>
> Signed-off-by: Mayank Rana <quic_mrana@xxxxxxxxxxx>

Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx>

- Mani

> ---
> v1->v2: Updated commit description based on Bjorn's feedback
> Link to v1: https://patchwork.kernel.org/project/linux-pci/patch/20241010202950.3263899-1-quic_mrana@xxxxxxxxxxx/
>
> drivers/pci/controller/plda/pcie-starfive.c | 10 +++++++---
> 1 file changed, 7 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;
> --
> 2.25.1
>

--
மணிவண்ணன் சதாசிவம்