From 9a23c1e5f21ec5d13d9833953b2b608f28273309 Mon Sep 17 00:00:00 2001 From: Patrice Chotard Date: Thu, 18 Dec 2025 18:27:01 +0100 Subject: clk: scmi: Fix typo scmi_clk_get_attibute Fix typo attibute, rename scmi_clk_get_attibute() to scmi_clk_get_attribute(). Reviewed-by: Peng Fan Reviewed-by: Marek Vasut Signed-off-by: Patrice Chotard Signed-off-by: Peng Fan --- drivers/clk/clk_scmi.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/clk/clk_scmi.c b/drivers/clk/clk_scmi.c index 683ac822a01..f6132178205 100644 --- a/drivers/clk/clk_scmi.c +++ b/drivers/clk/clk_scmi.c @@ -87,8 +87,8 @@ static int scmi_clk_get_num_clock(struct udevice *dev, size_t *num_clocks) return 0; } -static int scmi_clk_get_attibute(struct udevice *dev, int clkid, char *name, - u32 *attr) +static int scmi_clk_get_attribute(struct udevice *dev, int clkid, char *name, + u32 *attr) { struct scmi_clock_priv *priv = dev_get_priv(dev); struct scmi_clk_attribute_in in = { @@ -183,8 +183,8 @@ static int scmi_clk_get_ctrl_flags(struct clk *clk, u32 *ctrl_flags) if (!clkscmi->attrs_resolved) { char name[SCMI_CLOCK_NAME_LENGTH_MAX]; - ret = scmi_clk_get_attibute(dev, clk->id & CLK_ID_MSK, - name, &attributes); + ret = scmi_clk_get_attribute(dev, clk->id & CLK_ID_MSK, + name, &attributes); if (ret) return ret; -- cgit v1.2.3 From 0e9055b1488fe3c7d4c5143bc7bb7669af7f9cd1 Mon Sep 17 00:00:00 2001 From: Patrice Chotard Date: Thu, 18 Dec 2025 18:27:02 +0100 Subject: clk: scmi: Fix priv initialization in scmi_clk_gate() In scmi_clk_probe(), in case of CLK_CCF is not enabled, parent private data is not set, so in scmi_clk_gate(), an uninitialized priv struct is retrieved. SCMI request is performed either using scmi_clk_state_in_v1 or scmi_clk_state_in_v2 struct depending of the unpredictable value of priv->version which leads to error during SCMI clock enable. Issue detected on STM32MP157C-DK2 board using the SCMI device tree stm32mp157c-dk2-scmi.dts. Fixes: 0619cb32030b ("firmware: scmi: Add clock v3.2 CONFIG_SET support") Reviewed-by: Peng Fan Reviewed-by: Marek Vasut Signed-off-by: Patrice Chotard Signed-off-by: Peng Fan --- drivers/clk/clk_scmi.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/clk/clk_scmi.c b/drivers/clk/clk_scmi.c index f6132178205..a4fc4f8da89 100644 --- a/drivers/clk/clk_scmi.c +++ b/drivers/clk/clk_scmi.c @@ -137,7 +137,7 @@ static int scmi_clk_get_attribute(struct udevice *dev, int clkid, char *name, static int scmi_clk_gate(struct clk *clk, int enable) { - struct scmi_clock_priv *priv = dev_get_parent_priv(clk->dev); + struct scmi_clock_priv *priv; struct scmi_clk_state_in_v1 in_v1 = { .clock_id = clk_get_id(clk), .attributes = enable, @@ -156,6 +156,16 @@ static int scmi_clk_gate(struct clk *clk, int enable) in_v2, out); int ret; + /* + * In scmi_clk_probe(), in case of CLK_CCF is set, SCMI clock + * version is set in dev's parent priv struct. Otherwise + * SCMI clock version is set in dev priv struct. + */ + if (CONFIG_IS_ENABLED(CLK_CCF)) + priv = dev_get_parent_priv(clk->dev); + else + priv = dev_get_priv(clk->dev); + ret = devm_scmi_process_msg(clk->dev, (priv->version < CLOCK_PROTOCOL_VERSION_2_1) ? &msg_v1 : &msg_v2); -- cgit v1.2.3 From 4c3aa5356dd141c07e764580807c33eaae990038 Mon Sep 17 00:00:00 2001 From: Patrice Chotard Date: Thu, 18 Dec 2025 18:27:03 +0100 Subject: clk: scmi: Remove duplicated scmi_generic_protocol_version() request scmi_generic_protocol_version() request is done twice in scmi_clk_probe(). Remove first call which is useless. Fixes: ae7e0330ce22 ("clk: scmi: add compatibility with clock protocol 2.0") Reviewed-by: Peng Fan Reviewed-by: Marek Vasut Signed-off-by: Patrice Chotard Signed-off-by: Peng Fan --- drivers/clk/clk_scmi.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/clk/clk_scmi.c b/drivers/clk/clk_scmi.c index a4fc4f8da89..ee237ed6337 100644 --- a/drivers/clk/clk_scmi.c +++ b/drivers/clk/clk_scmi.c @@ -344,9 +344,6 @@ static int scmi_clk_probe(struct udevice *dev) if (!CONFIG_IS_ENABLED(CLK_CCF)) return 0; - ret = scmi_generic_protocol_version(dev, SCMI_PROTOCOL_ID_CLOCK, - &priv->version); - /* register CCF children: CLK UCLASS, no probed again */ if (device_get_uclass_id(dev->parent) == UCLASS_CLK) return 0; -- cgit v1.2.3