| Message ID | 20261002110935.2004349-3-claudiu.beznea@kernel.org |
|---|---|
| State | New |
| Headers | show |
| Series | PCI: rzg3s-host: Add PCIe hotplug support | expand |
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> > > The runtime PM documentation states the following: > - During system suspend, pm_runtime_get_noresume() is called for every > device right before executing the subsystem-level .prepare() callback > (in device_prepare()). In addition, the PM core disables runtime PM for > every device right before executing the subsystem-level .suspend_late() > callback (in device_suspend_late()). > - During system resume, pm_runtime_enable() is called for every device > right after executing the subsystem-level .resume_early() callback (in > device_resume_early()), and pm_runtime_put() is called right after > executing the subsystem-level .complete() callback (in > device_complete()). > > The driver's .suspend_noirq() callback is invoked after .suspend_late(), > [ ... ] > Fixes: 7ef502fb35b2 ("PCI: Add Renesas RZ/G3S host controller driver") > Cc: stable@vger.kernel.org > Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> > Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> > Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> Sashiko has reviewed this patch and found no issues. It looks great!
diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/controller/pcie-rzg3s-host.c index e1105b1f2652..0ef49bb5ab1a 100644 --- a/drivers/pci/controller/pcie-rzg3s-host.c +++ b/drivers/pci/controller/pcie-rzg3s-host.c @@ -1961,19 +1961,18 @@ static int rzg3s_pcie_suspend_noirq(struct device *dev) if (ret) goto config_reinit; - ret = pm_runtime_put_sync(dev); - if (ret) - goto power_resets_restore; + /* + * Since the power domain's genpd_suspend_noirq() will disable clocks, + * there is no need to manually invoke runtime PM API here. + */ ret = rzg3s_sysc_config_func(sysc, RZG3S_SYSC_FUNC_ID_RST_RSM_B, 0); if (ret) - goto rpm_resume; + goto power_resets_restore; return 0; /* Restore the previous state if any error happens */ -rpm_resume: - pm_runtime_resume_and_get(dev); power_resets_restore: reset_control_bulk_deassert(data->num_power_resets, host->power_resets); @@ -2011,13 +2010,14 @@ static int rzg3s_pcie_resume_noirq(struct device *dev) goto assert_rst_rsm_b; } - ret = pm_runtime_resume_and_get(dev); - if (ret) - goto assert_rst_rsm_b; + /* + * Since the power domain's genpd_resume_noirq() will enable clocks, + * there is no need to manually invoke runtime PM API here. + */ ret = rzg3s_pcie_power_resets_deassert(host); if (ret) - goto rpm_put; + goto assert_rst_rsm_b; ret = rzg3s_pcie_host_setup(host, rzg3s_pcie_msi_hw_setup, rzg3s_pcie_msi_hw_teardown); @@ -2033,8 +2033,6 @@ static int rzg3s_pcie_resume_noirq(struct device *dev) assert_power_resets: reset_control_bulk_assert(data->num_power_resets, host->power_resets); -rpm_put: - pm_runtime_put_sync(dev); assert_rst_rsm_b: rzg3s_sysc_config_func(sysc, RZG3S_SYSC_FUNC_ID_RST_RSM_B, 0); return ret;