[PATCH v2 08/13] clk: scmi: manage properly the clk identifier with CCF
Patrice CHOTARD
patrice.chotard at foss.st.com
Wed Jun 4 07:59:47 CEST 2025
On 5/27/25 15:27, Patrice Chotard wrote:
> From: Patrick Delaunay <patrick.delaunay at foss.st.com>
>
> Each clock identifier needs to be unique when CCF is activated,
> and it is not respected today by SCMI clock driver.
>
> This patch supports a unique clk id by using the uclass API
> clk_get_id() / dev_clk_dm() and by activating by default
> CONFIG_CLK_AUTO_ID with CCF which adds an offset to the SCMI
> clock identifiers.
>
> After this patch, the SCMI clock driver can coexist with other
> clock provider without conflict, they can share internal identifier
> [0..N] defined in their binding and the clock ID = 0
> (reserved for dummy clock) is no more used.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at foss.st.com>
> Signed-off-by: Patrice Chotard <patrice.chotard at foss.st.com>
> Cc: Lukasz Majewski <lukma at denx.de>
> Cc: Sean Anderson <seanga2 at gmail.com>
> ---
>
> (no changes since v1)
>
> drivers/clk/Kconfig | 1 +
> drivers/clk/clk_scmi.c | 8 ++++----
> 2 files changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
> index b2e53fe325e..c848b4984f8 100644
> --- a/drivers/clk/Kconfig
> +++ b/drivers/clk/Kconfig
> @@ -192,6 +192,7 @@ config CLK_SCMI
> bool "Enable SCMI clock driver"
> depends on CLK
> depends on SCMI_FIRMWARE
> + select CLK_AUTO_ID if CLK_CCF
> help
> Enable this option if you want to support clock devices exposed
> by a SCMI agent based on SCMI clock protocol communication
> diff --git a/drivers/clk/clk_scmi.c b/drivers/clk/clk_scmi.c
> index e323a948780..cfb372e6190 100644
> --- a/drivers/clk/clk_scmi.c
> +++ b/drivers/clk/clk_scmi.c
> @@ -132,7 +132,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_state_in in = {
> - .clock_id = clk->id,
> + .clock_id = clk_get_id(clk),
> .attributes = enable,
> };
> struct scmi_clk_state_out out;
> @@ -197,7 +197,7 @@ static int scmi_clk_disable(struct clk *clk)
> static ulong scmi_clk_get_rate(struct clk *clk)
> {
> struct scmi_clk_rate_get_in in = {
> - .clock_id = clk->id,
> + .clock_id = clk_get_id(clk),
> };
> struct scmi_clk_rate_get_out out;
> struct scmi_msg msg = SCMI_MSG_IN(SCMI_PROTOCOL_ID_CLOCK,
> @@ -219,7 +219,7 @@ static ulong scmi_clk_get_rate(struct clk *clk)
> static ulong __scmi_clk_set_rate(struct clk *clk, ulong rate)
> {
> struct scmi_clk_rate_set_in in = {
> - .clock_id = clk->id,
> + .clock_id = clk_get_id(clk),
> .flags = SCMI_CLK_RATE_ROUND_CLOSEST,
> .rate_lsb = (u32)rate,
> .rate_msb = (u32)((u64)rate >> 32),
> @@ -313,7 +313,7 @@ static int scmi_clk_probe(struct udevice *dev)
> return ret;
> }
>
> - clk_dm(i, &clk_scmi->clk);
> + dev_clk_dm(dev, i, &clk_scmi->clk);
>
> if (CLK_HAS_RESTRICTIONS(attributes)) {
> u32 perm;
Reviewed-by: Patrice Chotard <patrice.chotard at foss.st.com>
Thanks
Patrice
More information about the U-Boot
mailing list