summaryrefslogtreecommitdiff
path: root/drivers/firmware/scmi/scmi_agent-uclass.c
diff options
context:
space:
mode:
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;
}