linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/8] clk: qcom: fix runtime PM bugs
@ 2023-07-18 13:28 Johan Hovold
  2023-07-18 13:28 ` [PATCH 1/8] clk: qcom: camcc-sc7180: fix async resume during probe Johan Hovold
                   ` (9 more replies)
  0 siblings, 10 replies; 15+ messages in thread
From: Johan Hovold @ 2023-07-18 13:28 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Andy Gross, Konrad Dybcio, Michael Turquette, Stephen Boyd,
	linux-arm-msm, linux-clk, linux-kernel, Johan Hovold

This series fixes a number of runtime PM related bugs found through
inspection.

Johan


Johan Hovold (8):
  clk: qcom: camcc-sc7180: fix async resume during probe
  clk: qcom: dispcc-sm8450: fix runtime PM imbalance on probe errors
  clk: qcom: dispcc-sm8550: fix runtime PM imbalance on probe errors
  clk: qcom: gcc-sc8280xp: fix runtime PM imbalance on probe errors
  clk: qcom: lpasscc-sc7280: fix missing resume during probe
  clk: qcom: q6sstop-qcs404: fix missing resume during probe
  clk: qcom: mss-sc7180: fix missing resume during probe
  clk: qcom: turingcc-qcs404: fix missing resume during probe

 drivers/clk/qcom/camcc-sc7180.c    |  2 +-
 drivers/clk/qcom/dispcc-sm8450.c   | 13 +++++++++++--
 drivers/clk/qcom/dispcc-sm8550.c   | 13 +++++++++++--
 drivers/clk/qcom/gcc-sc8280xp.c    | 14 +++++++++++---
 drivers/clk/qcom/lpasscc-sc7280.c  | 16 ++++++++++++----
 drivers/clk/qcom/mss-sc7180.c      | 13 ++++++++++++-
 drivers/clk/qcom/q6sstop-qcs404.c  | 15 +++++++++++++--
 drivers/clk/qcom/turingcc-qcs404.c | 13 ++++++++++++-
 8 files changed, 83 insertions(+), 16 deletions(-)

-- 
2.41.0


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH 1/8] clk: qcom: camcc-sc7180: fix async resume during probe
  2023-07-18 13:28 [PATCH 0/8] clk: qcom: fix runtime PM bugs Johan Hovold
@ 2023-07-18 13:28 ` Johan Hovold
  2023-07-18 13:28 ` [PATCH 2/8] clk: qcom: dispcc-sm8450: fix runtime PM imbalance on probe errors Johan Hovold
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Johan Hovold @ 2023-07-18 13:28 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Andy Gross, Konrad Dybcio, Michael Turquette, Stephen Boyd,
	linux-arm-msm, linux-clk, linux-kernel, Johan Hovold, stable

To make sure that the controller is runtime resumed and its power domain
is enabled before accessing its registers during probe, the synchronous
runtime PM interface must be used.

Fixes: 8d4025943e13 ("clk: qcom: camcc-sc7180: Use runtime PM ops instead of clk ones")
Cc: stable@vger.kernel.org      # 5.11
Cc: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
---
 drivers/clk/qcom/camcc-sc7180.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/clk/qcom/camcc-sc7180.c b/drivers/clk/qcom/camcc-sc7180.c
index 8a4ba7a19ed1..6f56bdbf0204 100644
--- a/drivers/clk/qcom/camcc-sc7180.c
+++ b/drivers/clk/qcom/camcc-sc7180.c
@@ -1664,7 +1664,7 @@ static int cam_cc_sc7180_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	ret = pm_runtime_get(&pdev->dev);
+	ret = pm_runtime_resume_and_get(&pdev->dev);
 	if (ret)
 		return ret;
 
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 2/8] clk: qcom: dispcc-sm8450: fix runtime PM imbalance on probe errors
  2023-07-18 13:28 [PATCH 0/8] clk: qcom: fix runtime PM bugs Johan Hovold
  2023-07-18 13:28 ` [PATCH 1/8] clk: qcom: camcc-sc7180: fix async resume during probe Johan Hovold
@ 2023-07-18 13:28 ` Johan Hovold
  2023-07-18 13:28 ` [PATCH 3/8] clk: qcom: dispcc-sm8550: " Johan Hovold
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Johan Hovold @ 2023-07-18 13:28 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Andy Gross, Konrad Dybcio, Michael Turquette, Stephen Boyd,
	linux-arm-msm, linux-clk, linux-kernel, Johan Hovold, stable,
	Dmitry Baryshkov

Make sure to decrement the runtime PM usage count before returning in
case regmap initialisation fails.

Fixes: 16fb89f92ec4 ("clk: qcom: Add support for Display Clock Controller on SM8450")
Cc: stable@vger.kernel.org      # 6.1
Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
---
 drivers/clk/qcom/dispcc-sm8450.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/clk/qcom/dispcc-sm8450.c b/drivers/clk/qcom/dispcc-sm8450.c
index adbfd30bfc96..84db4ff5485a 100644
--- a/drivers/clk/qcom/dispcc-sm8450.c
+++ b/drivers/clk/qcom/dispcc-sm8450.c
@@ -1776,8 +1776,10 @@ static int disp_cc_sm8450_probe(struct platform_device *pdev)
 		return ret;
 
 	regmap = qcom_cc_map(pdev, &disp_cc_sm8450_desc);
-	if (IS_ERR(regmap))
-		return PTR_ERR(regmap);
+	if (IS_ERR(regmap)) {
+		ret = PTR_ERR(regmap);
+		goto err_put_rpm;
+	}
 
 	clk_lucid_evo_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
 	clk_lucid_evo_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config);
@@ -1792,9 +1794,16 @@ static int disp_cc_sm8450_probe(struct platform_device *pdev)
 	regmap_update_bits(regmap, 0xe05c, BIT(0), BIT(0));
 
 	ret = qcom_cc_really_probe(pdev, &disp_cc_sm8450_desc, regmap);
+	if (ret)
+		goto err_put_rpm;
 
 	pm_runtime_put(&pdev->dev);
 
+	return 0;
+
+err_put_rpm:
+	pm_runtime_put_sync(&pdev->dev);
+
 	return ret;
 }
 
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 3/8] clk: qcom: dispcc-sm8550: fix runtime PM imbalance on probe errors
  2023-07-18 13:28 [PATCH 0/8] clk: qcom: fix runtime PM bugs Johan Hovold
  2023-07-18 13:28 ` [PATCH 1/8] clk: qcom: camcc-sc7180: fix async resume during probe Johan Hovold
  2023-07-18 13:28 ` [PATCH 2/8] clk: qcom: dispcc-sm8450: fix runtime PM imbalance on probe errors Johan Hovold
@ 2023-07-18 13:28 ` Johan Hovold
  2023-07-18 13:28 ` [PATCH 4/8] clk: qcom: gcc-sc8280xp: " Johan Hovold
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Johan Hovold @ 2023-07-18 13:28 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Andy Gross, Konrad Dybcio, Michael Turquette, Stephen Boyd,
	linux-arm-msm, linux-clk, linux-kernel, Johan Hovold, stable,
	Neil Armstrong

Make sure to decrement the runtime PM usage count before returning in
case regmap initialisation fails.

Fixes: 90114ca11476 ("clk: qcom: add SM8550 DISPCC driver")
Cc: stable@vger.kernel.org      # 6.3
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
---
 drivers/clk/qcom/dispcc-sm8550.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/clk/qcom/dispcc-sm8550.c b/drivers/clk/qcom/dispcc-sm8550.c
index 1e5a11081860..b2fae9001ff2 100644
--- a/drivers/clk/qcom/dispcc-sm8550.c
+++ b/drivers/clk/qcom/dispcc-sm8550.c
@@ -1761,8 +1761,10 @@ static int disp_cc_sm8550_probe(struct platform_device *pdev)
 		return ret;
 
 	regmap = qcom_cc_map(pdev, &disp_cc_sm8550_desc);
-	if (IS_ERR(regmap))
-		return PTR_ERR(regmap);
+	if (IS_ERR(regmap)) {
+		ret = PTR_ERR(regmap);
+		goto err_put_rpm;
+	}
 
 	clk_lucid_evo_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
 	clk_lucid_evo_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config);
@@ -1777,9 +1779,16 @@ static int disp_cc_sm8550_probe(struct platform_device *pdev)
 	regmap_update_bits(regmap, 0xe054, BIT(0), BIT(0));
 
 	ret = qcom_cc_really_probe(pdev, &disp_cc_sm8550_desc, regmap);
+	if (ret)
+		goto err_put_rpm;
 
 	pm_runtime_put(&pdev->dev);
 
+	return 0;
+
+err_put_rpm:
+	pm_runtime_put_sync(&pdev->dev);
+
 	return ret;
 }
 
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 4/8] clk: qcom: gcc-sc8280xp: fix runtime PM imbalance on probe errors
  2023-07-18 13:28 [PATCH 0/8] clk: qcom: fix runtime PM bugs Johan Hovold
                   ` (2 preceding siblings ...)
  2023-07-18 13:28 ` [PATCH 3/8] clk: qcom: dispcc-sm8550: " Johan Hovold
@ 2023-07-18 13:28 ` Johan Hovold
  2023-07-19  7:09   ` Johan Hovold
  2023-07-18 13:28 ` [PATCH 5/8] clk: qcom: lpasscc-sc7280: fix missing resume during probe Johan Hovold
                   ` (5 subsequent siblings)
  9 siblings, 1 reply; 15+ messages in thread
From: Johan Hovold @ 2023-07-18 13:28 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Andy Gross, Konrad Dybcio, Michael Turquette, Stephen Boyd,
	linux-arm-msm, linux-clk, linux-kernel, Johan Hovold

Make sure to decrement the runtime PM usage count before returning in
case RCG dynamic frequency switch initialisation fails.

Fixes: 2a541abd9837 ("clk: qcom: gcc-sc8280xp: Add runtime PM")
Cc: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
---
 drivers/clk/qcom/gcc-sc8280xp.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/clk/qcom/gcc-sc8280xp.c b/drivers/clk/qcom/gcc-sc8280xp.c
index 1fb6ffac730c..ac6f8c0c1ccb 100644
--- a/drivers/clk/qcom/gcc-sc8280xp.c
+++ b/drivers/clk/qcom/gcc-sc8280xp.c
@@ -7539,8 +7539,8 @@ static int gcc_sc8280xp_probe(struct platform_device *pdev)
 
 	regmap = qcom_cc_map(pdev, &gcc_sc8280xp_desc);
 	if (IS_ERR(regmap)) {
-		pm_runtime_put(&pdev->dev);
-		return PTR_ERR(regmap);
+		ret = PTR_ERR(regmap);
+		goto err_put_rpm;
 	}
 
 	/*
@@ -7561,11 +7561,19 @@ static int gcc_sc8280xp_probe(struct platform_device *pdev)
 
 	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, ARRAY_SIZE(gcc_dfs_clocks));
 	if (ret)
-		return ret;
+		goto err_put_rpm;
 
 	ret = qcom_cc_really_probe(pdev, &gcc_sc8280xp_desc, regmap);
+	if (ret)
+		goto err_put_rpm;
+
 	pm_runtime_put(&pdev->dev);
 
+	return 0;
+
+err_put_rpm:
+	pm_runtime_put_sync(&pdev->dev);
+
 	return ret;
 }
 
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 5/8] clk: qcom: lpasscc-sc7280: fix missing resume during probe
  2023-07-18 13:28 [PATCH 0/8] clk: qcom: fix runtime PM bugs Johan Hovold
                   ` (3 preceding siblings ...)
  2023-07-18 13:28 ` [PATCH 4/8] clk: qcom: gcc-sc8280xp: " Johan Hovold
@ 2023-07-18 13:28 ` Johan Hovold
  2023-07-18 14:58   ` Bjorn Andersson
  2023-07-18 13:29 ` [PATCH 6/8] clk: qcom: q6sstop-qcs404: " Johan Hovold
                   ` (4 subsequent siblings)
  9 siblings, 1 reply; 15+ messages in thread
From: Johan Hovold @ 2023-07-18 13:28 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Andy Gross, Konrad Dybcio, Michael Turquette, Stephen Boyd,
	linux-arm-msm, linux-clk, linux-kernel, Johan Hovold, stable,
	Taniya Das

Drivers that enable runtime PM must make sure that the controller is
runtime resumed before accessing its registers to prevent the power
domain from being disabled.

Fixes: 4ab43d171181 ("clk: qcom: Add lpass clock controller driver for SC7280")
Cc: stable@vger.kernel.org      # 5.16
Cc: Taniya Das <quic_tdas@quicinc.com>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
---
 drivers/clk/qcom/lpasscc-sc7280.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/clk/qcom/lpasscc-sc7280.c b/drivers/clk/qcom/lpasscc-sc7280.c
index 0df2b29e95e3..e6b815aec46a 100644
--- a/drivers/clk/qcom/lpasscc-sc7280.c
+++ b/drivers/clk/qcom/lpasscc-sc7280.c
@@ -118,9 +118,13 @@ static int lpass_cc_sc7280_probe(struct platform_device *pdev)
 	ret = pm_clk_add(&pdev->dev, "iface");
 	if (ret < 0) {
 		dev_err(&pdev->dev, "failed to acquire iface clock\n");
-		goto destroy_pm_clk;
+		goto err_destroy_pm_clk;
 	}
 
+	ret = pm_runtime_resume_and_get(&pdev->dev);
+	if (ret)
+		goto err_destroy_pm_clk;
+
 	if (!of_property_read_bool(pdev->dev.of_node, "qcom,adsp-pil-mode")) {
 		lpass_regmap_config.name = "qdsp6ss";
 		lpass_regmap_config.max_register = 0x3f;
@@ -128,7 +132,7 @@ static int lpass_cc_sc7280_probe(struct platform_device *pdev)
 
 		ret = qcom_cc_probe_by_index(pdev, 0, desc);
 		if (ret)
-			goto destroy_pm_clk;
+			goto err_put_rpm;
 	}
 
 	lpass_regmap_config.name = "top_cc";
@@ -137,11 +141,15 @@ static int lpass_cc_sc7280_probe(struct platform_device *pdev)
 
 	ret = qcom_cc_probe_by_index(pdev, 1, desc);
 	if (ret)
-		goto destroy_pm_clk;
+		goto err_put_rpm;
+
+	pm_runtime_put(&pdev->dev);
 
 	return 0;
 
-destroy_pm_clk:
+err_put_rpm:
+	pm_runtime_put_sync(&pdev->dev);
+err_destroy_pm_clk:
 	pm_clk_destroy(&pdev->dev);
 
 	return ret;
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 6/8] clk: qcom: q6sstop-qcs404: fix missing resume during probe
  2023-07-18 13:28 [PATCH 0/8] clk: qcom: fix runtime PM bugs Johan Hovold
                   ` (4 preceding siblings ...)
  2023-07-18 13:28 ` [PATCH 5/8] clk: qcom: lpasscc-sc7280: fix missing resume during probe Johan Hovold
@ 2023-07-18 13:29 ` Johan Hovold
  2023-07-18 13:29 ` [PATCH 7/8] clk: qcom: mss-sc7180: " Johan Hovold
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Johan Hovold @ 2023-07-18 13:29 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Andy Gross, Konrad Dybcio, Michael Turquette, Stephen Boyd,
	linux-arm-msm, linux-clk, linux-kernel, Johan Hovold, stable

Drivers that enable runtime PM must make sure that the controller is
runtime resumed before accessing its registers to prevent the power
domain from being disabled.

Fixes: 6cdef2738db0 ("clk: qcom: Add Q6SSTOP clock controller for QCS404")
Cc: stable@vger.kernel.org      # 5.5
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
---
 drivers/clk/qcom/q6sstop-qcs404.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/clk/qcom/q6sstop-qcs404.c b/drivers/clk/qcom/q6sstop-qcs404.c
index 780074e05841..26e2d63614ac 100644
--- a/drivers/clk/qcom/q6sstop-qcs404.c
+++ b/drivers/clk/qcom/q6sstop-qcs404.c
@@ -174,21 +174,32 @@ static int q6sstopcc_qcs404_probe(struct platform_device *pdev)
 		return ret;
 	}
 
+	ret = pm_runtime_resume_and_get(&pdev->dev);
+	if (ret)
+		return ret;
+
 	q6sstop_regmap_config.name = "q6sstop_tcsr";
 	desc = &tcsr_qcs404_desc;
 
 	ret = qcom_cc_probe_by_index(pdev, 1, desc);
 	if (ret)
-		return ret;
+		goto err_put_rpm;
 
 	q6sstop_regmap_config.name = "q6sstop_cc";
 	desc = &q6sstop_qcs404_desc;
 
 	ret = qcom_cc_probe_by_index(pdev, 0, desc);
 	if (ret)
-		return ret;
+		goto err_put_rpm;
+
+	pm_runtime_put(&pdev->dev);
 
 	return 0;
+
+err_put_rpm:
+	pm_runtime_put_sync(&pdev->dev);
+
+	return ret;
 }
 
 static const struct dev_pm_ops q6sstopcc_pm_ops = {
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 7/8] clk: qcom: mss-sc7180: fix missing resume during probe
  2023-07-18 13:28 [PATCH 0/8] clk: qcom: fix runtime PM bugs Johan Hovold
                   ` (5 preceding siblings ...)
  2023-07-18 13:29 ` [PATCH 6/8] clk: qcom: q6sstop-qcs404: " Johan Hovold
@ 2023-07-18 13:29 ` Johan Hovold
  2023-07-18 13:29 ` [PATCH 8/8] clk: qcom: turingcc-qcs404: " Johan Hovold
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Johan Hovold @ 2023-07-18 13:29 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Andy Gross, Konrad Dybcio, Michael Turquette, Stephen Boyd,
	linux-arm-msm, linux-clk, linux-kernel, Johan Hovold, stable,
	Taniya Das

Drivers that enable runtime PM must make sure that the controller is
runtime resumed before accessing its registers to prevent the power
domain from being disabled.

Fixes: 8def929c4097 ("clk: qcom: Add modem clock controller driver for SC7180")
Cc: stable@vger.kernel.org      # 5.7
Cc: Taniya Das <quic_tdas@quicinc.com>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
---
 drivers/clk/qcom/mss-sc7180.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/clk/qcom/mss-sc7180.c b/drivers/clk/qcom/mss-sc7180.c
index 5a1407440662..d106bc65470e 100644
--- a/drivers/clk/qcom/mss-sc7180.c
+++ b/drivers/clk/qcom/mss-sc7180.c
@@ -87,11 +87,22 @@ static int mss_sc7180_probe(struct platform_device *pdev)
 		return ret;
 	}
 
+	ret = pm_runtime_resume_and_get(&pdev->dev);
+	if (ret)
+		return ret;
+
 	ret = qcom_cc_probe(pdev, &mss_sc7180_desc);
 	if (ret < 0)
-		return ret;
+		goto err_put_rpm;
+
+	pm_runtime_put(&pdev->dev);
 
 	return 0;
+
+err_put_rpm:
+	pm_runtime_put_sync(&pdev->dev);
+
+	return ret;
 }
 
 static const struct dev_pm_ops mss_sc7180_pm_ops = {
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 8/8] clk: qcom: turingcc-qcs404: fix missing resume during probe
  2023-07-18 13:28 [PATCH 0/8] clk: qcom: fix runtime PM bugs Johan Hovold
                   ` (6 preceding siblings ...)
  2023-07-18 13:29 ` [PATCH 7/8] clk: qcom: mss-sc7180: " Johan Hovold
@ 2023-07-18 13:29 ` Johan Hovold
  2023-07-18 13:46 ` [PATCH 0/8] clk: qcom: fix runtime PM bugs Konrad Dybcio
  2023-07-18 19:10 ` Bjorn Andersson
  9 siblings, 0 replies; 15+ messages in thread
From: Johan Hovold @ 2023-07-18 13:29 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Andy Gross, Konrad Dybcio, Michael Turquette, Stephen Boyd,
	linux-arm-msm, linux-clk, linux-kernel, Johan Hovold, stable

Drivers that enable runtime PM must make sure that the controller is
runtime resumed before accessing its registers to prevent the power
domain from being disabled.

Fixes: 892df0191b29 ("clk: qcom: Add QCS404 TuringCC")
Cc: stable@vger.kernel.org      # 5.2
Cc: Bjorn Andersson <andersson@kernel.org>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
---
 drivers/clk/qcom/turingcc-qcs404.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/clk/qcom/turingcc-qcs404.c b/drivers/clk/qcom/turingcc-qcs404.c
index 43184459228f..2cd288d6c3e4 100644
--- a/drivers/clk/qcom/turingcc-qcs404.c
+++ b/drivers/clk/qcom/turingcc-qcs404.c
@@ -125,11 +125,22 @@ static int turingcc_probe(struct platform_device *pdev)
 		return ret;
 	}
 
+	ret = pm_runtime_resume_and_get(&pdev->dev);
+	if (ret)
+		return ret;
+
 	ret = qcom_cc_probe(pdev, &turingcc_desc);
 	if (ret < 0)
-		return ret;
+		goto err_put_rpm;
+
+	pm_runtime_put(&pdev->dev);
 
 	return 0;
+
+err_put_rpm:
+	pm_runtime_put_sync(&pdev->dev);
+
+	return ret;
 }
 
 static const struct dev_pm_ops turingcc_pm_ops = {
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH 0/8] clk: qcom: fix runtime PM bugs
  2023-07-18 13:28 [PATCH 0/8] clk: qcom: fix runtime PM bugs Johan Hovold
                   ` (7 preceding siblings ...)
  2023-07-18 13:29 ` [PATCH 8/8] clk: qcom: turingcc-qcs404: " Johan Hovold
@ 2023-07-18 13:46 ` Konrad Dybcio
  2023-07-19  7:23   ` Johan Hovold
  2023-07-18 19:10 ` Bjorn Andersson
  9 siblings, 1 reply; 15+ messages in thread
From: Konrad Dybcio @ 2023-07-18 13:46 UTC (permalink / raw)
  To: Johan Hovold, Bjorn Andersson
  Cc: Andy Gross, Michael Turquette, Stephen Boyd, linux-arm-msm,
	linux-clk, linux-kernel

On 18.07.2023 15:28, Johan Hovold wrote:
> This series fixes a number of runtime PM related bugs found through
> inspection.
> 
> Johan
I was thinking whether we should maybe incorporate RPM enablement
into qcom common functions.. The only issue I see is that some
clocks register pm clocks atop that, but I guess we could introduce
some sort of a pm_clks names array to solve that?

Konrad

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 5/8] clk: qcom: lpasscc-sc7280: fix missing resume during probe
  2023-07-18 13:28 ` [PATCH 5/8] clk: qcom: lpasscc-sc7280: fix missing resume during probe Johan Hovold
@ 2023-07-18 14:58   ` Bjorn Andersson
  2023-07-18 15:39     ` Johan Hovold
  0 siblings, 1 reply; 15+ messages in thread
From: Bjorn Andersson @ 2023-07-18 14:58 UTC (permalink / raw)
  To: Johan Hovold
  Cc: Andy Gross, Konrad Dybcio, Michael Turquette, Stephen Boyd,
	linux-arm-msm, linux-clk, linux-kernel, stable, Taniya Das

On Tue, Jul 18, 2023 at 03:28:59PM +0200, Johan Hovold wrote:
> Drivers that enable runtime PM must make sure that the controller is
> runtime resumed before accessing its registers to prevent the power
> domain from being disabled.
> 

NB: the clock framework will runtime resume the controller surrounding
operations, even so during probe. But this is not done for resets and
gdscs - and in some clock drivers we poke registers directly from
probe...

The one time this really matters is where we associate the ahb clock
with the runtime state, e.g. in qcs404 turingcc. On most other platforms
we just mark these clocks always-on in gcc...

Regards,
Bjorn

> Fixes: 4ab43d171181 ("clk: qcom: Add lpass clock controller driver for SC7280")
> Cc: stable@vger.kernel.org      # 5.16
> Cc: Taniya Das <quic_tdas@quicinc.com>
> Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
> ---
>  drivers/clk/qcom/lpasscc-sc7280.c | 16 ++++++++++++----
>  1 file changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/clk/qcom/lpasscc-sc7280.c b/drivers/clk/qcom/lpasscc-sc7280.c
> index 0df2b29e95e3..e6b815aec46a 100644
> --- a/drivers/clk/qcom/lpasscc-sc7280.c
> +++ b/drivers/clk/qcom/lpasscc-sc7280.c
> @@ -118,9 +118,13 @@ static int lpass_cc_sc7280_probe(struct platform_device *pdev)
>  	ret = pm_clk_add(&pdev->dev, "iface");
>  	if (ret < 0) {
>  		dev_err(&pdev->dev, "failed to acquire iface clock\n");
> -		goto destroy_pm_clk;
> +		goto err_destroy_pm_clk;
>  	}
>  
> +	ret = pm_runtime_resume_and_get(&pdev->dev);
> +	if (ret)
> +		goto err_destroy_pm_clk;
> +
>  	if (!of_property_read_bool(pdev->dev.of_node, "qcom,adsp-pil-mode")) {
>  		lpass_regmap_config.name = "qdsp6ss";
>  		lpass_regmap_config.max_register = 0x3f;
> @@ -128,7 +132,7 @@ static int lpass_cc_sc7280_probe(struct platform_device *pdev)
>  
>  		ret = qcom_cc_probe_by_index(pdev, 0, desc);
>  		if (ret)
> -			goto destroy_pm_clk;
> +			goto err_put_rpm;
>  	}
>  
>  	lpass_regmap_config.name = "top_cc";
> @@ -137,11 +141,15 @@ static int lpass_cc_sc7280_probe(struct platform_device *pdev)
>  
>  	ret = qcom_cc_probe_by_index(pdev, 1, desc);
>  	if (ret)
> -		goto destroy_pm_clk;
> +		goto err_put_rpm;
> +
> +	pm_runtime_put(&pdev->dev);
>  
>  	return 0;
>  
> -destroy_pm_clk:
> +err_put_rpm:
> +	pm_runtime_put_sync(&pdev->dev);
> +err_destroy_pm_clk:
>  	pm_clk_destroy(&pdev->dev);
>  
>  	return ret;
> -- 
> 2.41.0
> 

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 5/8] clk: qcom: lpasscc-sc7280: fix missing resume during probe
  2023-07-18 14:58   ` Bjorn Andersson
@ 2023-07-18 15:39     ` Johan Hovold
  0 siblings, 0 replies; 15+ messages in thread
From: Johan Hovold @ 2023-07-18 15:39 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Johan Hovold, Andy Gross, Konrad Dybcio, Michael Turquette,
	Stephen Boyd, linux-arm-msm, linux-clk, linux-kernel, stable,
	Taniya Das

On Tue, Jul 18, 2023 at 07:58:41AM -0700, Bjorn Andersson wrote:
> On Tue, Jul 18, 2023 at 03:28:59PM +0200, Johan Hovold wrote:
> > Drivers that enable runtime PM must make sure that the controller is
> > runtime resumed before accessing its registers to prevent the power
> > domain from being disabled.
> > 
> 
> NB: the clock framework will runtime resume the controller surrounding
> operations, even so during probe. But this is not done for resets and
> gdscs - and in some clock drivers we poke registers directly from
> probe...
> 
> The one time this really matters is where we associate the ahb clock
> with the runtime state, e.g. in qcs404 turingcc. On most other platforms
> we just mark these clocks always-on in gcc...

Right, I started looking at this with respect to the PM domain, but
my initial commit message only mentioned the need to make sure the
controller is resumed, which would have covered such interface clocks as
well. 

And while ending up with a concurrent request to disable the PM domain
is not that likely, there is currently nothing preventing it so it still
needs to be fixed.

Johan

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 0/8] clk: qcom: fix runtime PM bugs
  2023-07-18 13:28 [PATCH 0/8] clk: qcom: fix runtime PM bugs Johan Hovold
                   ` (8 preceding siblings ...)
  2023-07-18 13:46 ` [PATCH 0/8] clk: qcom: fix runtime PM bugs Konrad Dybcio
@ 2023-07-18 19:10 ` Bjorn Andersson
  9 siblings, 0 replies; 15+ messages in thread
From: Bjorn Andersson @ 2023-07-18 19:10 UTC (permalink / raw)
  To: Johan Hovold
  Cc: Andy Gross, Konrad Dybcio, Michael Turquette, Stephen Boyd,
	linux-arm-msm, linux-clk, linux-kernel


On Tue, 18 Jul 2023 15:28:54 +0200, Johan Hovold wrote:
> This series fixes a number of runtime PM related bugs found through
> inspection.
> 
> Johan
> 
> 
> Johan Hovold (8):
>   clk: qcom: camcc-sc7180: fix async resume during probe
>   clk: qcom: dispcc-sm8450: fix runtime PM imbalance on probe errors
>   clk: qcom: dispcc-sm8550: fix runtime PM imbalance on probe errors
>   clk: qcom: gcc-sc8280xp: fix runtime PM imbalance on probe errors
>   clk: qcom: lpasscc-sc7280: fix missing resume during probe
>   clk: qcom: q6sstop-qcs404: fix missing resume during probe
>   clk: qcom: mss-sc7180: fix missing resume during probe
>   clk: qcom: turingcc-qcs404: fix missing resume during probe
> 
> [...]

Applied, thanks!

[1/8] clk: qcom: camcc-sc7180: fix async resume during probe
      commit: c948ff727e25297f3a703eb5349dd66aabf004e4
[2/8] clk: qcom: dispcc-sm8450: fix runtime PM imbalance on probe errors
      commit: b0f3d01bda6c3f6f811e70f76d2040ae81f64565
[3/8] clk: qcom: dispcc-sm8550: fix runtime PM imbalance on probe errors
      commit: acaf1b3296a504d4a61b685f78baae771421608d
[4/8] clk: qcom: gcc-sc8280xp: fix runtime PM imbalance on probe errors
      commit: 10192ab375c39c58d39cba028d9685cefe1ca3c2
[5/8] clk: qcom: lpasscc-sc7280: fix missing resume during probe
      commit: 66af5339d4f8e20c6d89a490570bd94d40f1a7f6
[6/8] clk: qcom: q6sstop-qcs404: fix missing resume during probe
      commit: 97112c83f4671a4a722f99a53be4e91fac4091bc
[7/8] clk: qcom: mss-sc7180: fix missing resume during probe
      commit: e2349da0fa7ca822cda72f427345b95795358fe7
[8/8] clk: qcom: turingcc-qcs404: fix missing resume during probe
      commit: a9f71a033587c9074059132d34c74eabbe95ef26

Best regards,
-- 
Bjorn Andersson <andersson@kernel.org>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 4/8] clk: qcom: gcc-sc8280xp: fix runtime PM imbalance on probe errors
  2023-07-18 13:28 ` [PATCH 4/8] clk: qcom: gcc-sc8280xp: " Johan Hovold
@ 2023-07-19  7:09   ` Johan Hovold
  0 siblings, 0 replies; 15+ messages in thread
From: Johan Hovold @ 2023-07-19  7:09 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Andy Gross, Konrad Dybcio, Michael Turquette, Stephen Boyd,
	linux-arm-msm, linux-clk, linux-kernel

On Tue, Jul 18, 2023 at 03:28:58PM +0200, Johan Hovold wrote:
> Make sure to decrement the runtime PM usage count before returning in
> case RCG dynamic frequency switch initialisation fails.
> 
> Fixes: 2a541abd9837 ("clk: qcom: gcc-sc8280xp: Add runtime PM")

I noticed you merged these for 6.6 instead of 6.5 as I had expected.

Note that I left out the stable tag here as the offending patch was
merged as a fix for 6.5 and I specifically assumed this fixup would go
in as a fix for 6.5 as well.

> Cc: Konrad Dybcio <konrad.dybcio@linaro.org>
> Signed-off-by: Johan Hovold <johan+linaro@kernel.org>

Johan

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 0/8] clk: qcom: fix runtime PM bugs
  2023-07-18 13:46 ` [PATCH 0/8] clk: qcom: fix runtime PM bugs Konrad Dybcio
@ 2023-07-19  7:23   ` Johan Hovold
  0 siblings, 0 replies; 15+ messages in thread
From: Johan Hovold @ 2023-07-19  7:23 UTC (permalink / raw)
  To: Konrad Dybcio
  Cc: Johan Hovold, Bjorn Andersson, Andy Gross, Michael Turquette,
	Stephen Boyd, linux-arm-msm, linux-clk, linux-kernel

On Tue, Jul 18, 2023 at 03:46:03PM +0200, Konrad Dybcio wrote:
> On 18.07.2023 15:28, Johan Hovold wrote:
> > This series fixes a number of runtime PM related bugs found through
> > inspection.

> I was thinking whether we should maybe incorporate RPM enablement
> into qcom common functions.. The only issue I see is that some
> clocks register pm clocks atop that, but I guess we could introduce
> some sort of a pm_clks names array to solve that?

Possibly, but you currently also have the hardcoded clock enables and
some other variations.

Johan

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2023-07-19  7:23 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-18 13:28 [PATCH 0/8] clk: qcom: fix runtime PM bugs Johan Hovold
2023-07-18 13:28 ` [PATCH 1/8] clk: qcom: camcc-sc7180: fix async resume during probe Johan Hovold
2023-07-18 13:28 ` [PATCH 2/8] clk: qcom: dispcc-sm8450: fix runtime PM imbalance on probe errors Johan Hovold
2023-07-18 13:28 ` [PATCH 3/8] clk: qcom: dispcc-sm8550: " Johan Hovold
2023-07-18 13:28 ` [PATCH 4/8] clk: qcom: gcc-sc8280xp: " Johan Hovold
2023-07-19  7:09   ` Johan Hovold
2023-07-18 13:28 ` [PATCH 5/8] clk: qcom: lpasscc-sc7280: fix missing resume during probe Johan Hovold
2023-07-18 14:58   ` Bjorn Andersson
2023-07-18 15:39     ` Johan Hovold
2023-07-18 13:29 ` [PATCH 6/8] clk: qcom: q6sstop-qcs404: " Johan Hovold
2023-07-18 13:29 ` [PATCH 7/8] clk: qcom: mss-sc7180: " Johan Hovold
2023-07-18 13:29 ` [PATCH 8/8] clk: qcom: turingcc-qcs404: " Johan Hovold
2023-07-18 13:46 ` [PATCH 0/8] clk: qcom: fix runtime PM bugs Konrad Dybcio
2023-07-19  7:23   ` Johan Hovold
2023-07-18 19:10 ` Bjorn Andersson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).