All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Anderson <seanga2@gmail.com>
To: Etienne Carriere <etienne.carriere@linaro.org>, u-boot@lists.denx.de
Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>,
	Patrice Chotard <patrice.chotard@foss.st.com>,
	Lukasz Majewski <lukma@denx.de>
Subject: Re: [PATCH v2 10/14] clk: scmi: support SCMI multi-channel
Date: Wed, 28 Sep 2022 13:29:13 -0400	[thread overview]
Message-ID: <7907e87f-b4c8-d40d-ee5a-5874e3d0f861@gmail.com> (raw)
In-Reply-To: <20220531160929.931150-11-etienne.carriere@linaro.org>

On 5/31/22 12:09, Etienne Carriere wrote:
> 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>
> ---
> Changes since v1:
> - Define a private struct to hold channel reference rather than using
>    device private data reference as opaque channel reference.
> 
> ---
>   drivers/clk/clk_scmi.c | 33 ++++++++++++++++++++++++++-------
>   1 file changed, 26 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/clk/clk_scmi.c b/drivers/clk/clk_scmi.c
> index 0d0bb72eaf7..d172fed24c9 100644
> --- a/drivers/clk/clk_scmi.c
> +++ b/drivers/clk/clk_scmi.c
> @@ -1,6 +1,6 @@
>   // SPDX-License-Identifier: GPL-2.0+
>   /*
> - * Copyright (C) 2019-2020 Linaro Limited
> + * Copyright (C) 2019-2022 Linaro Limited
>    */
>   
>   #define LOG_CATEGORY UCLASS_CLK
> @@ -13,8 +13,17 @@
>   #include <asm/types.h>
>   #include <linux/clk-provider.h>
>   
> +/**
> + * struct scmi_clk_priv - Private data for SCMI clocks
> + * @channel: Reference to the SCMI channel to use
> + */
> +struct scmi_clk_priv {
> +	struct scmi_channel *channel;
> +};
> +
>   static int scmi_clk_get_num_clock(struct udevice *dev, size_t *num_clocks)
>   {
> +	struct scmi_clk_priv *priv = dev_get_priv(dev);
>   	struct scmi_clk_protocol_attr_out out;
>   	struct scmi_msg msg = {
>   		.protocol_id = SCMI_PROTOCOL_ID_CLOCK,
> @@ -24,7 +33,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, priv->channel, &msg);
>   	if (ret)
>   		return ret;
>   
> @@ -35,6 +44,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_clk_priv *priv = dev_get_priv(dev);
>   	struct scmi_clk_attribute_in in = {
>   		.clock_id = clkid,
>   	};
> @@ -49,7 +59,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, priv->channel, &msg);
>   	if (ret)
>   		return ret;
>   
> @@ -60,6 +70,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_clk_priv *priv = dev_get_priv(clk->dev);
>   	struct scmi_clk_state_in in = {
>   		.clock_id = clk->id,
>   		.attributes = enable,
> @@ -70,7 +81,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, priv->channel, &msg);
>   	if (ret)
>   		return ret;
>   
> @@ -89,6 +100,7 @@ static int scmi_clk_disable(struct clk *clk)
>   
>   static ulong scmi_clk_get_rate(struct clk *clk)
>   {
> +	struct scmi_clk_priv *priv = dev_get_priv(clk->dev);
>   	struct scmi_clk_rate_get_in in = {
>   		.clock_id = clk->id,
>   	};
> @@ -98,7 +110,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, priv->channel, &msg);
>   	if (ret < 0)
>   		return ret;
>   
> @@ -111,6 +123,7 @@ static ulong scmi_clk_get_rate(struct clk *clk)
>   
>   static ulong scmi_clk_set_rate(struct clk *clk, ulong rate)
>   {
> +	struct scmi_clk_priv *priv = dev_get_priv(clk->dev);
>   	struct scmi_clk_rate_set_in in = {
>   		.clock_id = clk->id,
>   		.flags = SCMI_CLK_RATE_ROUND_CLOSEST,
> @@ -123,7 +136,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, priv->channel, &msg);
>   	if (ret < 0)
>   		return ret;
>   
> @@ -136,10 +149,15 @@ static ulong scmi_clk_set_rate(struct clk *clk, ulong rate)
>   
>   static int scmi_clk_probe(struct udevice *dev)
>   {
> +	struct scmi_clk_priv *priv = dev_get_priv(dev);
>   	struct clk *clk;
>   	size_t num_clocks, i;
>   	int ret;
>   
> +	ret = devm_scmi_of_get_channel(dev, &priv->channel);
> +	if (ret)
> +		return ret;
> +
>   	if (!CONFIG_IS_ENABLED(CLK_CCF))
>   		return 0;
>   
> @@ -186,5 +204,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_clk_priv *),
>   };

Reviewed-by: Sean Anderson <seanga2@gmail.com>

  reply	other threads:[~2022-09-28 17:29 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-31 16:09 [PATCH v2 00/14] SCMI multi-channel and optee shm Etienne Carriere
2022-05-31 16:09 ` [PATCH v2 01/14] firmware: scmi: optee: use TEE shared memory for SCMI messages Etienne Carriere
2022-06-23 18:32   ` Tom Rini
2022-05-31 16:09 ` [PATCH v2 02/14] firmware: scmi: optee: fix inline description of PTA_SCMI_CMD_GET_CHANNEL Etienne Carriere
2022-05-31 16:09 ` [PATCH v2 03/14] firmware: scmi: prepare scmi uclass API to multi-channel Etienne Carriere
2022-05-31 16:09 ` [PATCH v2 04/14] firmware: scmi: prepare uclass to pass channel reference Etienne Carriere
2022-05-31 16:09 ` [PATCH v2 05/14] firmware: scmi: factorize scmi transport look up Etienne Carriere
2022-05-31 16:09 ` [PATCH v2 06/14] firmware: scmi: add multi-channel support Etienne Carriere
2022-05-31 16:09 ` [PATCH v2 07/14] firmware: scmi: mailbox transport: implement multi-channel Etienne Carriere
2022-05-31 16:09 ` [PATCH v2 08/14] firmware: scmi: smccc " Etienne Carriere
2022-05-31 16:09 ` [PATCH v2 09/14] firmware: scmi: optee " Etienne Carriere
2022-05-31 16:09 ` [PATCH v2 10/14] clk: scmi: support SCMI multi-channel Etienne Carriere
2022-09-28 17:29   ` Sean Anderson [this message]
2022-05-31 16:09 ` [PATCH v2 11/14] reset: " Etienne Carriere
2022-05-31 16:09 ` [PATCH v2 12/14] power: regulator: " Etienne Carriere
2022-06-14  2:13   ` Jaehoon Chung
2022-05-31 16:09 ` [PATCH v2 13/14] power: regulator: scmi: simplify scmi_voltd_set_enable() Etienne Carriere
2022-06-14  2:13   ` Jaehoon Chung
2022-05-31 16:09 ` [PATCH v2 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=7907e87f-b4c8-d40d-ee5a-5874e3d0f861@gmail.com \
    --to=seanga2@gmail.com \
    --cc=etienne.carriere@linaro.org \
    --cc=lukma@denx.de \
    --cc=patrice.chotard@foss.st.com \
    --cc=patrick.delaunay@foss.st.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.