All of lore.kernel.org
 help / color / mirror / Atom feed
From: Etienne Carriere <etienne.carriere@linaro.org>
To: u-boot@lists.denx.de
Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>,
	Patrice Chotard <patrice.chotard@foss.st.com>,
	Etienne Carriere <etienne.carriere@linaro.org>,
	Lukasz Majewski <lukma@denx.de>,
	Sean Anderson <seanga2@gmail.com>
Subject: [PATCH 10/14] clk: scmi: support SCMI multi-channel
Date: Fri, 13 May 2022 08:26:18 +0200	[thread overview]
Message-ID: <20220513062622.155433-11-etienne.carriere@linaro.org> (raw)
In-Reply-To: <20220513062622.155433-1-etienne.carriere@linaro.org>

Update SCMI clock driver to get its assigned SCMI channel during
initialization. This change allows SCMI clock protocol to use a
dedicated channel when defined in the DT. The reference is saved
in SCMI clock driver private data.

Cc: Lukasz Majewski <lukma@denx.de>
Cc: Sean Anderson <seanga2@gmail.com>
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
---
 drivers/clk/clk_scmi.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/drivers/clk/clk_scmi.c b/drivers/clk/clk_scmi.c
index 0d0bb72eaf7..5cf7bd73df5 100644
--- a/drivers/clk/clk_scmi.c
+++ b/drivers/clk/clk_scmi.c
@@ -15,6 +15,7 @@
 
 static int scmi_clk_get_num_clock(struct udevice *dev, size_t *num_clocks)
 {
+	struct scmi_channel **scmi_channel_ref = dev_get_priv(dev);
 	struct scmi_clk_protocol_attr_out out;
 	struct scmi_msg msg = {
 		.protocol_id = SCMI_PROTOCOL_ID_CLOCK,
@@ -24,7 +25,7 @@ static int scmi_clk_get_num_clock(struct udevice *dev, size_t *num_clocks)
 	};
 	int ret;
 
-	ret = devm_scmi_process_msg(dev, NULL, &msg);
+	ret = devm_scmi_process_msg(dev, *scmi_channel_ref, &msg);
 	if (ret)
 		return ret;
 
@@ -35,6 +36,7 @@ static int scmi_clk_get_num_clock(struct udevice *dev, size_t *num_clocks)
 
 static int scmi_clk_get_attibute(struct udevice *dev, int clkid, char **name)
 {
+	struct scmi_channel **scmi_channel_ref = dev_get_priv(dev);
 	struct scmi_clk_attribute_in in = {
 		.clock_id = clkid,
 	};
@@ -49,7 +51,7 @@ static int scmi_clk_get_attibute(struct udevice *dev, int clkid, char **name)
 	};
 	int ret;
 
-	ret = devm_scmi_process_msg(dev, NULL, &msg);
+	ret = devm_scmi_process_msg(dev, *scmi_channel_ref, &msg);
 	if (ret)
 		return ret;
 
@@ -60,6 +62,7 @@ static int scmi_clk_get_attibute(struct udevice *dev, int clkid, char **name)
 
 static int scmi_clk_gate(struct clk *clk, int enable)
 {
+	struct scmi_channel **scmi_channel_ref = dev_get_priv(clk->dev);
 	struct scmi_clk_state_in in = {
 		.clock_id = clk->id,
 		.attributes = enable,
@@ -70,7 +73,7 @@ static int scmi_clk_gate(struct clk *clk, int enable)
 					  in, out);
 	int ret;
 
-	ret = devm_scmi_process_msg(clk->dev, NULL, &msg);
+	ret = devm_scmi_process_msg(clk->dev, *scmi_channel_ref, &msg);
 	if (ret)
 		return ret;
 
@@ -89,6 +92,7 @@ static int scmi_clk_disable(struct clk *clk)
 
 static ulong scmi_clk_get_rate(struct clk *clk)
 {
+	struct scmi_channel **scmi_channel_ref = dev_get_priv(clk->dev);
 	struct scmi_clk_rate_get_in in = {
 		.clock_id = clk->id,
 	};
@@ -98,7 +102,7 @@ static ulong scmi_clk_get_rate(struct clk *clk)
 					  in, out);
 	int ret;
 
-	ret = devm_scmi_process_msg(clk->dev, NULL, &msg);
+	ret = devm_scmi_process_msg(clk->dev, *scmi_channel_ref, &msg);
 	if (ret < 0)
 		return ret;
 
@@ -111,6 +115,7 @@ static ulong scmi_clk_get_rate(struct clk *clk)
 
 static ulong scmi_clk_set_rate(struct clk *clk, ulong rate)
 {
+	struct scmi_channel **scmi_channel_ref = dev_get_priv(clk->dev);
 	struct scmi_clk_rate_set_in in = {
 		.clock_id = clk->id,
 		.flags = SCMI_CLK_RATE_ROUND_CLOSEST,
@@ -123,7 +128,7 @@ static ulong scmi_clk_set_rate(struct clk *clk, ulong rate)
 					  in, out);
 	int ret;
 
-	ret = devm_scmi_process_msg(clk->dev, NULL, &msg);
+	ret = devm_scmi_process_msg(clk->dev, *scmi_channel_ref, &msg);
 	if (ret < 0)
 		return ret;
 
@@ -136,10 +141,15 @@ static ulong scmi_clk_set_rate(struct clk *clk, ulong rate)
 
 static int scmi_clk_probe(struct udevice *dev)
 {
+	struct scmi_channel **scmi_channel_ref = dev_get_priv(dev);
 	struct clk *clk;
 	size_t num_clocks, i;
 	int ret;
 
+	ret = devm_scmi_of_get_channel(dev, scmi_channel_ref);
+	if (ret)
+		return ret;
+
 	if (!CONFIG_IS_ENABLED(CLK_CCF))
 		return 0;
 
@@ -186,5 +196,6 @@ U_BOOT_DRIVER(scmi_clock) = {
 	.name = "scmi_clk",
 	.id = UCLASS_CLK,
 	.ops = &scmi_clk_ops,
-	.probe = &scmi_clk_probe,
+	.probe = scmi_clk_probe,
+	.priv_auto = sizeof(struct scmi_channel *),
 };
-- 
2.25.1


  parent reply	other threads:[~2022-05-13  6:30 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-13  6:26 [PATCH 00/14] SCMI multi-channel and optee shm Etienne Carriere
2022-05-13  6:26 ` [PATCH 01/14] firmware: scmi: optee: use TEE shared memory for SCMI messages Etienne Carriere
2022-05-13  6:26 ` [PATCH 02/14] firmware: scmi: optee: fix inline description of PTA_SCMI_CMD_GET_CHANNEL Etienne Carriere
2022-05-13  6:26 ` [PATCH 03/14] firmware: scmi: prepare scmi uclass API to multi-channel Etienne Carriere
2022-05-13  6:26 ` [PATCH 04/14] firmware: scmi: prepare uclass to pass channel reference Etienne Carriere
2022-05-13  6:26 ` [PATCH 05/14] firmware: scmi: factorize scmi transport look up Etienne Carriere
2022-05-13  6:26 ` [PATCH 06/14] firmware: scmi: add multi-channel support Etienne Carriere
2022-05-13  6:26 ` [PATCH 07/14] firmware: scmi: mailbox transport: implement multi-channel Etienne Carriere
2022-05-13  6:26 ` [PATCH 08/14] firmware: scmi: smccc " Etienne Carriere
2022-05-13  6:26 ` [PATCH 09/14] firmware: scmi: optee " Etienne Carriere
2022-05-13  6:26 ` Etienne Carriere [this message]
2022-05-27  4:14   ` [PATCH 10/14] clk: scmi: support SCMI multi-channel Sean Anderson
2022-05-13  6:26 ` [PATCH 11/14] reset: " Etienne Carriere
2022-05-13  6:26 ` [PATCH 12/14] power: regulator: " Etienne Carriere
2022-05-16 23:45   ` Jaehoon Chung
2022-05-13  6:26 ` [PATCH 13/14] power: regulator: scmi: simplify scmi_voltd_set_enable() Etienne Carriere
2022-05-16 23:45   ` Jaehoon Chung
2022-05-13  6:26 ` [PATCH 14/14] firmware: scmi: use multi channel in mailbox, optee and smccc agents Etienne Carriere

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=20220513062622.155433-11-etienne.carriere@linaro.org \
    --to=etienne.carriere@linaro.org \
    --cc=lukma@denx.de \
    --cc=patrice.chotard@foss.st.com \
    --cc=patrick.delaunay@foss.st.com \
    --cc=seanga2@gmail.com \
    --cc=u-boot@lists.denx.de \
    /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.