firmware: scmi: prepare scmi uclass API to multi-channel
Changes SCMI driver API function devm_scmi_process_msg() to add an SCMI channel reference argument for when SCMI agent supports SCMI protocol specific channels. First argument of devm_scmi_process_msg() is also change to point to the caller SCMI protocol device rather than its parent device (the SCMI agent device). The argument is a pointer to opaque struct scmi_channel known from the SCMI transport drivers. It is currently unused and caller a pass NULL value. A later change will enable such support once SCMI protocol drivers have means to get the channel reference during initialization. Cc: Lukasz Majewski <lukma@denx.de> Cc: Sean Anderson <seanga2@gmail.com> Cc: Jaehoon Chung <jh80.chung@samsung.com> Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
This commit is contained in:
parent
5d8eb4ce33
commit
8bcb1b4898
@ -24,7 +24,7 @@ static int scmi_clk_get_num_clock(struct udevice *dev, size_t *num_clocks)
|
|||||||
};
|
};
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = devm_scmi_process_msg(dev, &msg);
|
ret = devm_scmi_process_msg(dev, NULL, &msg);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ static int scmi_clk_get_attibute(struct udevice *dev, int clkid, char **name)
|
|||||||
};
|
};
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = devm_scmi_process_msg(dev, &msg);
|
ret = devm_scmi_process_msg(dev, NULL, &msg);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ static int scmi_clk_gate(struct clk *clk, int enable)
|
|||||||
in, out);
|
in, out);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = devm_scmi_process_msg(clk->dev, &msg);
|
ret = devm_scmi_process_msg(clk->dev, NULL, &msg);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ static ulong scmi_clk_get_rate(struct clk *clk)
|
|||||||
in, out);
|
in, out);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = devm_scmi_process_msg(clk->dev, &msg);
|
ret = devm_scmi_process_msg(clk->dev, NULL, &msg);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ static ulong scmi_clk_set_rate(struct clk *clk, ulong rate)
|
|||||||
in, out);
|
in, out);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = devm_scmi_process_msg(clk->dev, &msg);
|
ret = devm_scmi_process_msg(clk->dev, NULL, &msg);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -114,7 +114,8 @@ static const struct scmi_agent_ops *transport_dev_ops(struct udevice *dev)
|
|||||||
return (const struct scmi_agent_ops *)dev->driver->ops;
|
return (const struct scmi_agent_ops *)dev->driver->ops;
|
||||||
}
|
}
|
||||||
|
|
||||||
int devm_scmi_process_msg(struct udevice *dev, struct scmi_msg *msg)
|
int devm_scmi_process_msg(struct udevice *dev, struct scmi_channel *channel,
|
||||||
|
struct scmi_msg *msg)
|
||||||
{
|
{
|
||||||
const struct scmi_agent_ops *ops;
|
const struct scmi_agent_ops *ops;
|
||||||
struct udevice *parent = dev;
|
struct udevice *parent = dev;
|
||||||
|
@ -38,7 +38,7 @@ static int scmi_voltd_set_enable(struct udevice *dev, bool enable)
|
|||||||
in, out);
|
in, out);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = devm_scmi_process_msg(dev, &msg);
|
ret = devm_scmi_process_msg(dev, NULL, &msg);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ static int scmi_voltd_get_enable(struct udevice *dev)
|
|||||||
in, out);
|
in, out);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = devm_scmi_process_msg(dev, &msg);
|
ret = devm_scmi_process_msg(dev, NULL, &msg);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ static int scmi_voltd_set_voltage_level(struct udevice *dev, int uV)
|
|||||||
in, out);
|
in, out);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = devm_scmi_process_msg(dev, &msg);
|
ret = devm_scmi_process_msg(dev, NULL, &msg);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ static int scmi_voltd_get_voltage_level(struct udevice *dev)
|
|||||||
in, out);
|
in, out);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = devm_scmi_process_msg(dev, &msg);
|
ret = devm_scmi_process_msg(dev, NULL, &msg);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ static int scmi_regulator_probe(struct udevice *dev)
|
|||||||
/* Check voltage domain is known from SCMI server */
|
/* Check voltage domain is known from SCMI server */
|
||||||
in.domain_id = pdata->domain_id;
|
in.domain_id = pdata->domain_id;
|
||||||
|
|
||||||
ret = devm_scmi_process_msg(dev, &scmi_msg);
|
ret = devm_scmi_process_msg(dev, NULL, &scmi_msg);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "Failed to query voltage domain %u: %d\n",
|
dev_err(dev, "Failed to query voltage domain %u: %d\n",
|
||||||
pdata->domain_id, ret);
|
pdata->domain_id, ret);
|
||||||
|
@ -26,7 +26,7 @@ static int scmi_reset_set_level(struct reset_ctl *rst, bool assert_not_deassert)
|
|||||||
in, out);
|
in, out);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = devm_scmi_process_msg(rst->dev, &msg);
|
ret = devm_scmi_process_msg(rst->dev, NULL, &msg);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ static int scmi_reset_request(struct reset_ctl *rst)
|
|||||||
* We don't really care about the attribute, just check
|
* We don't really care about the attribute, just check
|
||||||
* the reset domain exists.
|
* the reset domain exists.
|
||||||
*/
|
*/
|
||||||
ret = devm_scmi_process_msg(rst->dev, &msg);
|
ret = devm_scmi_process_msg(rst->dev, NULL, &msg);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ struct scmi_agent_ops {
|
|||||||
/*
|
/*
|
||||||
* process_msg - Request transport to get the SCMI message processed
|
* process_msg - Request transport to get the SCMI message processed
|
||||||
*
|
*
|
||||||
* @agent: Agent using the transport
|
* @dev: SCMI protocol device using the transport
|
||||||
* @msg: SCMI message to be transmitted
|
* @msg: SCMI message to be transmitted
|
||||||
*/
|
*/
|
||||||
int (*process_msg)(struct udevice *dev, struct scmi_msg *msg);
|
int (*process_msg)(struct udevice *dev, struct scmi_msg *msg);
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
|
|
||||||
struct udevice;
|
struct udevice;
|
||||||
|
struct scmi_channel;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* struct scmi_msg - Context of a SCMI message sent and the response received
|
* struct scmi_msg - Context of a SCMI message sent and the response received
|
||||||
@ -52,10 +53,12 @@ struct scmi_msg {
|
|||||||
* On return, scmi_msg::out_msg_sz stores the response payload size.
|
* On return, scmi_msg::out_msg_sz stores the response payload size.
|
||||||
*
|
*
|
||||||
* @dev: SCMI device
|
* @dev: SCMI device
|
||||||
|
* @channel: Communication channel for the device
|
||||||
* @msg: Message structure reference
|
* @msg: Message structure reference
|
||||||
* Return: 0 on success and a negative errno on failure
|
* Return: 0 on success and a negative errno on failure
|
||||||
*/
|
*/
|
||||||
int devm_scmi_process_msg(struct udevice *dev, struct scmi_msg *msg);
|
int devm_scmi_process_msg(struct udevice *dev, struct scmi_channel *channel,
|
||||||
|
struct scmi_msg *msg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* scmi_to_linux_errno() - Convert an SCMI error code into a Linux errno code
|
* scmi_to_linux_errno() - Convert an SCMI error code into a Linux errno code
|
||||||
|
Loading…
Reference in New Issue
Block a user