drivers/pci/controller/plda/pcie-starfive.c | 10 +++++++--- drivers/pci/probe.c | 11 +++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-)
It is a property of the runtime PM framework that it can only follow continuous dependency chains. That is, if there is a device with runtime PM disabled in a dependency chain, runtime PM cannot be enabled for devices below it and above it in that chain both at the same time. Since runtime PM is disabled for host bridge, the state of the child devices under the host bridge is not taken into account by PM framework for the top level parent, PCIe controller. So PM framework, allows the controller driver to enter runtime PM irrespective of the state of the devices under the host bridge. So enable runtime pm of the host bridge device, so that dependency chain in maintained between endpoint devices and the controller driver. PM framework expectes parent runtime pm enabled before enabling runtime pm of the child. As PCIe starfive device is enabling runtime pm after the pci_host_probe which enables runtime pm of the child device i.e for the bridge device a warning is shown saying "pcie-starfive 940000000.pcie: Enabling runtime PM for inactive device with active children" and also shows possible circular locking dependency detected message. As it is must to enable parent device's runtime PM before enabling child's runtime pm as the pcie-starfive device runtime pm is enabled after child runtime starfive device is seeing the warning. In the first patch fix the pcie-starfive driver by enabling runtime pm before calling pci_host_probe(). All other PCIe controller drivers are enabling runtime pm before calling pci_host_probe() which is as expected so don't require any fix like pcie-starfive driver. Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com> --- Changes in v7: - Bring the cover letter details to commit message as suggested by bjorn. - Add a comment in the driver to ensure pm_runtime_enable is called before host bridge pm_runtime_enable(). - Link to v6: https://lore.kernel.org/r/20241017-runtime_pm-v6-0-55eab5c2c940@quicinc.com Changes in v6: - include the patch by mayank which fixes runtime pm enable order for pcie starfive driver. Changes in v5: - call pm_runtime_no_callbacks() as suggested by Rafael. - include the commit texts as suggested by Rafael. - Link to v4: https://lore.kernel.org/linux-pci/20240708-runtime_pm-v4-1-c02a3663243b@quicinc.com/ Changes in v4: - Changed pm_runtime_enable() to devm_pm_runtime_enable() (suggested by mayank) - Link to v3: https://lore.kernel.org/lkml/20240609-runtime_pm-v3-1-3d0460b49d60@quicinc.com/ Changes in v3: - Moved the runtime API call's from the dwc driver to PCI framework as it is applicable for all (suggested by mani) - Updated the commit message. - Link to v2: https://lore.kernel.org/all/20240305-runtime_pm_enable-v2-1-a849b74091d1@quicinc.com Changes in v2: - Updated commit message as suggested by mani. - Link to v1: https://lore.kernel.org/r/20240219-runtime_pm_enable-v1-1-d39660310504@quicinc.com --- Krishna chaitanya chundru (1): PCI: Enable runtime pm of the host bridge Mayank Rana (1): PCI: starfive: Enable PCIe controller's runtime PM before probing host bridge drivers/pci/controller/plda/pcie-starfive.c | 10 +++++++--- drivers/pci/probe.c | 11 +++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) --- base-commit: 2f87d0916ce0d2925cedbc9e8f5d6291ba2ac7b2 change-id: 20241016-runtime_pm-d3dbf41736b6 Best regards, -- Krishna chaitanya chundru <quic_krichai@quicinc.com>
On Mon, Nov 11, 2024 at 02:11:51PM +0530, Krishna chaitanya chundru wrote: > It is a property of the runtime PM framework that it can only > follow continuous dependency chains. That is, if there is a device > with runtime PM disabled in a dependency chain, runtime PM cannot be > enabled for devices below it and above it in that chain both at the > same time. > > Since runtime PM is disabled for host bridge, the state of the child > devices under the host bridge is not taken into account by PM framework > for the top level parent, PCIe controller. So PM framework, allows > the controller driver to enter runtime PM irrespective of the state > of the devices under the host bridge. > > So enable runtime pm of the host bridge device, so that dependency > chain in maintained between endpoint devices and the controller driver. > > PM framework expectes parent runtime pm enabled before enabling runtime > pm of the child. As PCIe starfive device is enabling runtime pm after > the pci_host_probe which enables runtime pm of the child device i.e for > the bridge device a warning is shown saying "pcie-starfive 940000000.pcie: > Enabling runtime PM for inactive device with active children" and also > shows possible circular locking dependency detected message. > > As it is must to enable parent device's runtime PM before enabling child's > runtime pm as the pcie-starfive device runtime pm is enabled after child > runtime starfive device is seeing the warning. > > In the first patch fix the pcie-starfive driver by enabling runtime > pm before calling pci_host_probe(). > > All other PCIe controller drivers are enabling runtime pm before > calling pci_host_probe() which is as expected so don't require any > fix like pcie-starfive driver. > > Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com> Provisionally applied to pci/pm for v6.13. I see a typo or two, so the commit logs will likely be updated, but I pushed the branch to get build testing started. > --- > Changes in v7: > - Bring the cover letter details to commit message as suggested by bjorn. > - Add a comment in the driver to ensure pm_runtime_enable is called > before host bridge pm_runtime_enable(). > - Link to v6: https://lore.kernel.org/r/20241017-runtime_pm-v6-0-55eab5c2c940@quicinc.com > Changes in v6: > - include the patch by mayank which fixes runtime pm enable order for > pcie starfive driver. > Changes in v5: > - call pm_runtime_no_callbacks() as suggested by Rafael. > - include the commit texts as suggested by Rafael. > - Link to v4: https://lore.kernel.org/linux-pci/20240708-runtime_pm-v4-1-c02a3663243b@quicinc.com/ > Changes in v4: > - Changed pm_runtime_enable() to devm_pm_runtime_enable() (suggested by mayank) > - Link to v3: https://lore.kernel.org/lkml/20240609-runtime_pm-v3-1-3d0460b49d60@quicinc.com/ > Changes in v3: > - Moved the runtime API call's from the dwc driver to PCI framework > as it is applicable for all (suggested by mani) > - Updated the commit message. > - Link to v2: https://lore.kernel.org/all/20240305-runtime_pm_enable-v2-1-a849b74091d1@quicinc.com > Changes in v2: > - Updated commit message as suggested by mani. > - Link to v1: https://lore.kernel.org/r/20240219-runtime_pm_enable-v1-1-d39660310504@quicinc.com > > --- > Krishna chaitanya chundru (1): > PCI: Enable runtime pm of the host bridge > > Mayank Rana (1): > PCI: starfive: Enable PCIe controller's runtime PM before probing host bridge > > drivers/pci/controller/plda/pcie-starfive.c | 10 +++++++--- > drivers/pci/probe.c | 11 +++++++++++ > 2 files changed, 18 insertions(+), 3 deletions(-) > --- > base-commit: 2f87d0916ce0d2925cedbc9e8f5d6291ba2ac7b2 > change-id: 20241016-runtime_pm-d3dbf41736b6 > > Best regards, > -- > Krishna chaitanya chundru <quic_krichai@quicinc.com> >
© 2016 - 2024 Red Hat, Inc.