Message ID | 20241011235530.3919347-1-quic_mrana@quicinc.com |
---|---|
State | New |
Headers | show |
Series | [v2] PCI: starfive: Enable PCIe controller's runtime PM before probing host bridge | expand |
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@samsung.com> > Signed-off-by: Mayank Rana <quic_mrana@quicinc.com> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> - 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@quicinc.com/ > > 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 >
On 10/11/2024 8:50 PM, Manivannan Sadhasivam wrote: > 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" ACK >> 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()" ACK >> >> Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> >> Signed-off-by: Mayank Rana <quic_mrana@quicinc.com> > > Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> > > - 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@quicinc.com/ >> >> 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 >> > Regards, Mayank
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;