All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Dybcio <konrad.dybcio@linaro.org>
To: Andy Gross <agross@kernel.org>,
	Bjorn Andersson <andersson@kernel.org>,
	Michael Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@kernel.org>,
	Georgi Djakov <djakov@kernel.org>, Leo Yan <leo.yan@linaro.org>,
	Evan Green <evgreen@chromium.org>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Conor Dooley <conor+dt@kernel.org>
Cc: Marijn Suijten <marijn.suijten@somainline.org>,
	linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-clk@vger.kernel.org, linux-pm@vger.kernel.org,
	devicetree@vger.kernel.org,
	Konrad Dybcio <konrad.dybcio@linaro.org>,
	Stephan Gerhold <stephan@gerhold.net>
Subject: [PATCH v3 05/23] soc: qcom: smd-rpm: Move icc_smd_rpm registration to clk-smd-rpm
Date: Mon, 12 Jun 2023 20:24:22 +0200	[thread overview]
Message-ID: <20230526-topic-smd_icc-v3-5-5fb7d39b874f@linaro.org> (raw)
In-Reply-To: <20230526-topic-smd_icc-v3-0-5fb7d39b874f@linaro.org>

From: Stephan Gerhold <stephan@gerhold.net>

icc_smd_rpm will do bus clock votes itself rather than taking the
unnecessary detour through the clock subsystem. However, it can only
do that after the clocks have been handed off and scaling has been
enabled in the RPM in clk-smd-rpm.

Move the icc_smd_rpm registration from smd-rpm.c to clk-smd-rpm.c
to avoid any possible races. icc_smd_rpm gets the driver data from
the smd-rpm device, so still register the platform device on the
smd-rpm parent device.

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
[Konrad: remove unrelated cleanups]
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/clk/qcom/clk-smd-rpm.c | 21 +++++++++++++++++++++
 drivers/soc/qcom/smd-rpm.c     | 17 +----------------
 2 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/drivers/clk/qcom/clk-smd-rpm.c b/drivers/clk/qcom/clk-smd-rpm.c
index 937cb1515968..6e7f0438e8b8 100644
--- a/drivers/clk/qcom/clk-smd-rpm.c
+++ b/drivers/clk/qcom/clk-smd-rpm.c
@@ -1289,12 +1289,20 @@ static struct clk_hw *qcom_smdrpm_clk_hw_get(struct of_phandle_args *clkspec,
 	return desc->clks[idx] ? &desc->clks[idx]->hw : ERR_PTR(-ENOENT);
 }
 
+static void rpm_smd_unregister_icc(void *data)
+{
+	struct platform_device *icc_pdev = data;
+
+	platform_device_unregister(icc_pdev);
+}
+
 static int rpm_smd_clk_probe(struct platform_device *pdev)
 {
 	int ret;
 	size_t num_clks, i;
 	struct clk_smd_rpm **rpm_smd_clks;
 	const struct rpm_smd_clk_desc *desc;
+	struct platform_device *icc_pdev;
 
 	rpmcc_smd_rpm = dev_get_drvdata(pdev->dev.parent);
 	if (!rpmcc_smd_rpm) {
@@ -1344,6 +1352,19 @@ static int rpm_smd_clk_probe(struct platform_device *pdev)
 	if (ret)
 		goto err;
 
+	icc_pdev = platform_device_register_data(pdev->dev.parent,
+						 "icc_smd_rpm", -1, NULL, 0);
+	if (IS_ERR(icc_pdev)) {
+		dev_err(&pdev->dev, "Failed to register icc_smd_rpm device: %pE\n",
+			icc_pdev);
+		/* No need to unregister clocks because of this */
+	} else {
+		ret = devm_add_action_or_reset(&pdev->dev, rpm_smd_unregister_icc,
+					       icc_pdev);
+		if (ret)
+			goto err;
+	}
+
 	return 0;
 err:
 	dev_err(&pdev->dev, "Error registering SMD clock driver (%d)\n", ret);
diff --git a/drivers/soc/qcom/smd-rpm.c b/drivers/soc/qcom/smd-rpm.c
index 0c1aa809cc4e..577f1f25ab10 100644
--- a/drivers/soc/qcom/smd-rpm.c
+++ b/drivers/soc/qcom/smd-rpm.c
@@ -19,7 +19,6 @@
 /**
  * struct qcom_smd_rpm - state of the rpm device driver
  * @rpm_channel:	reference to the smd channel
- * @icc:		interconnect proxy device
  * @dev:		rpm device
  * @ack:		completion for acks
  * @lock:		mutual exclusion around the send/complete pair
@@ -27,7 +26,6 @@
  */
 struct qcom_smd_rpm {
 	struct rpmsg_endpoint *rpm_channel;
-	struct platform_device *icc;
 	struct device *dev;
 
 	struct completion ack;
@@ -197,7 +195,6 @@ static int qcom_smd_rpm_callback(struct rpmsg_device *rpdev,
 static int qcom_smd_rpm_probe(struct rpmsg_device *rpdev)
 {
 	struct qcom_smd_rpm *rpm;
-	int ret;
 
 	rpm = devm_kzalloc(&rpdev->dev, sizeof(*rpm), GFP_KERNEL);
 	if (!rpm)
@@ -210,23 +207,11 @@ static int qcom_smd_rpm_probe(struct rpmsg_device *rpdev)
 	rpm->rpm_channel = rpdev->ept;
 	dev_set_drvdata(&rpdev->dev, rpm);
 
-	rpm->icc = platform_device_register_data(&rpdev->dev, "icc_smd_rpm", -1,
-						 NULL, 0);
-	if (IS_ERR(rpm->icc))
-		return PTR_ERR(rpm->icc);
-
-	ret = of_platform_populate(rpdev->dev.of_node, NULL, NULL, &rpdev->dev);
-	if (ret)
-		platform_device_unregister(rpm->icc);
-
-	return ret;
+	return of_platform_populate(rpdev->dev.of_node, NULL, NULL, &rpdev->dev);
 }
 
 static void qcom_smd_rpm_remove(struct rpmsg_device *rpdev)
 {
-	struct qcom_smd_rpm *rpm = dev_get_drvdata(&rpdev->dev);
-
-	platform_device_unregister(rpm->icc);
 	of_platform_depopulate(&rpdev->dev);
 }
 

-- 
2.41.0


  parent reply	other threads:[~2023-06-12 18:31 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-12 18:24 [PATCH v3 00/23] Restructure RPM SMD ICC Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 01/23] dt-bindings: interconnect: Add Qcom RPM ICC bindings Konrad Dybcio
2023-06-13 11:11   ` Stephan Gerhold
2023-06-13 11:20     ` Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 02/23] soc: qcom: smd-rpm: Add QCOM_SMD_RPM_STATE_NUM Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 03/23] soc: qcom: smd-rpm: Use tabs for defines Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 04/23] clk: qcom: smd-rpm: Move some RPM resources to the common header Konrad Dybcio
2023-06-12 19:36   ` Stephen Boyd
2023-06-12 18:24 ` Konrad Dybcio [this message]
2023-06-12 19:41   ` [PATCH v3 05/23] soc: qcom: smd-rpm: Move icc_smd_rpm registration to clk-smd-rpm Stephen Boyd
2023-06-12 18:24 ` [PATCH v3 06/23] interconnect: qcom: icc-rpm: Introduce keep_alive Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 07/23] interconnect: qcom: icc-rpm: Allow negative QoS offset Konrad Dybcio
2023-06-12 20:27   ` Stephan Gerhold
2023-06-13 12:12     ` Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 08/23] interconnect: qcom: Fold smd-rpm.h into icc-rpm.h Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 09/23] interconnect: qcom: smd-rpm: Add rpmcc handling skeleton code Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 10/23] interconnect: qcom: Add missing headers in icc-rpm.h Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 11/23] interconnect: qcom: Define RPM bus clocks Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 12/23] interconnect: qcom: sdm660: Hook up RPM bus clk definitions Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 13/23] interconnect: qcom: msm8996: " Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 14/23] interconnect: qcom: qcs404: " Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 15/23] interconnect: qcom: msm8939: " Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 16/23] interconnect: qcom: msm8916: " Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 17/23] interconnect: qcom: qcm2290: " Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 18/23] interconnect: qcom: icc-rpm: Control bus rpmcc from icc Konrad Dybcio
2023-06-12 20:54   ` Stephan Gerhold
2023-06-13 11:22     ` Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 19/23] clk: qcom: smd-rpm: Separate out interconnect bus clocks Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 20/23] interconnect: qcom: icc-rpm: Fix bucket number Konrad Dybcio
2023-06-12 20:57   ` Stephan Gerhold
2023-06-13  9:06     ` Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 21/23] interconnect: qcom: icc-rpm: Set bandwidth on both contexts Konrad Dybcio
2023-06-12 21:00   ` Stephan Gerhold
2023-06-12 18:24 ` [PATCH v3 22/23] interconnect: qcom: icc-rpm: Set correct bandwidth through RPM bw req Konrad Dybcio
2023-06-12 18:24 ` [PATCH v3 23/23] interconnect: qcom: icc-rpm: Fix bandwidth calculations Konrad Dybcio

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230526-topic-smd_icc-v3-5-5fb7d39b874f@linaro.org \
    --to=konrad.dybcio@linaro.org \
    --cc=agross@kernel.org \
    --cc=andersson@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=djakov@kernel.org \
    --cc=evgreen@chromium.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=leo.yan@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=marijn.suijten@somainline.org \
    --cc=mturquette@baylibre.com \
    --cc=robh+dt@kernel.org \
    --cc=sboyd@kernel.org \
    --cc=stephan@gerhold.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.