summaryrefslogtreecommitdiff
path: root/drivers/firmware/scmi/scmi_agent-uclass.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2022-03-03 14:16:14 -0500
committerTom Rini <trini@konsulko.com>2022-03-03 14:16:14 -0500
commit09cb77d22e8b87f02718a2e8f8ec7952f7673622 (patch)
treeb4a584688949e49d22e1daac341666c93b720d87 /drivers/firmware/scmi/scmi_agent-uclass.c
parent2dfdba4a5a48de33a3cedc908c183b86b6ff7bd5 (diff)
parent7c33f78983c344c46d46d857fd1d5e2b5b95ad40 (diff)
Merge branch '2022-03-02-scmi-updates' into next
- A small set of scmi updates
Diffstat (limited to 'drivers/firmware/scmi/scmi_agent-uclass.c')
-rw-r--r--drivers/firmware/scmi/scmi_agent-uclass.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/firmware/scmi/scmi_agent-uclass.c b/drivers/firmware/scmi/scmi_agent-uclass.c
index 4f5870b4838..3819f2fa993 100644
--- a/drivers/firmware/scmi/scmi_agent-uclass.c
+++ b/drivers/firmware/scmi/scmi_agent-uclass.c
@@ -116,10 +116,23 @@ static const struct scmi_agent_ops *transport_dev_ops(struct udevice *dev)
int devm_scmi_process_msg(struct udevice *dev, struct scmi_msg *msg)
{
- const struct scmi_agent_ops *ops = transport_dev_ops(dev);
+ const struct scmi_agent_ops *ops;
+ struct udevice *parent = dev;
+
+ /* Find related SCMI agent device */
+ do {
+ parent = dev_get_parent(parent);
+ } while (parent && device_get_uclass_id(parent) != UCLASS_SCMI_AGENT);
+
+ if (!parent) {
+ dev_err(dev, "Invalid SCMI device, agent not found\n");
+ return -ENODEV;
+ }
+
+ ops = transport_dev_ops(parent);
if (ops->process_msg)
- return ops->process_msg(dev, msg);
+ return ops->process_msg(parent, msg);
return -EPROTONOSUPPORT;
}