clk: scmi: add the command CLOCK_PARENT_SET
This patch adds the command CLOCK_PARENT_SET that can be used to set the parent of a clock. ARM SCMI Version 3.2 supports to change the parent of a clock device. Signed-off-by: Peng Fan <peng.fan@nxp.com> Signed-off-by: Alice Guo <alice.guo@nxp.com> Reviewed-by: Ye Li <ye.li@nxp.com> Reviewed-by: Marek Vasut <marex@denx.de>
This commit is contained in:
@@ -179,11 +179,31 @@ static int scmi_clk_probe(struct udevice *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int scmi_clk_set_parent(struct clk *clk, struct clk *parent)
|
||||
{
|
||||
struct scmi_clk_parent_set_in in = {
|
||||
.clock_id = clk->id,
|
||||
.parent_clk = parent->id,
|
||||
};
|
||||
struct scmi_clk_parent_set_out out;
|
||||
struct scmi_msg msg = SCMI_MSG_IN(SCMI_PROTOCOL_ID_CLOCK,
|
||||
SCMI_CLOCK_PARENT_SET,
|
||||
in, out);
|
||||
int ret;
|
||||
|
||||
ret = devm_scmi_process_msg(clk->dev, &msg);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return scmi_to_linux_errno(out.status);
|
||||
}
|
||||
|
||||
static const struct clk_ops scmi_clk_ops = {
|
||||
.enable = scmi_clk_enable,
|
||||
.disable = scmi_clk_disable,
|
||||
.get_rate = scmi_clk_get_rate,
|
||||
.set_rate = scmi_clk_set_rate,
|
||||
.set_parent = scmi_clk_set_parent,
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(scmi_clock) = {
|
||||
|
@@ -737,6 +737,7 @@ enum scmi_clock_message_id {
|
||||
SCMI_CLOCK_RATE_SET = 0x5,
|
||||
SCMI_CLOCK_RATE_GET = 0x6,
|
||||
SCMI_CLOCK_CONFIG_SET = 0x7,
|
||||
SCMI_CLOCK_PARENT_SET = 0xD,
|
||||
};
|
||||
|
||||
#define SCMI_CLK_PROTO_ATTR_COUNT_MASK GENMASK(15, 0)
|
||||
@@ -839,6 +840,24 @@ struct scmi_clk_rate_set_out {
|
||||
s32 status;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct scmi_clk_parent_state_in - Message payload for CLOCK_PARENT_SET command
|
||||
* @clock_id: SCMI clock ID
|
||||
* @parent_clk: SCMI clock ID
|
||||
*/
|
||||
struct scmi_clk_parent_set_in {
|
||||
u32 clock_id;
|
||||
u32 parent_clk;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct scmi_clk_parent_set_out - Response payload for CLOCK_PARENT_SET command
|
||||
* @status: SCMI command status
|
||||
*/
|
||||
struct scmi_clk_parent_set_out {
|
||||
s32 status;
|
||||
};
|
||||
|
||||
/*
|
||||
* SCMI Reset Domain Protocol
|
||||
*/
|
||||
|
Reference in New Issue
Block a user