mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03:00
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: 0619cb3203 ("firmware: scmi: Add clock v3.2 CONFIG_SET support")
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
This commit is contained in:
committed by
Peng Fan
parent
9a23c1e5f2
commit
0e9055b148
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user