summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEtienne Carriere <etienne.carriere@linaro.org>2022-05-31 18:09:20 +0200
committerTom Rini <trini@konsulko.com>2022-06-23 13:12:55 -0400
commit5a11df381a53097a7e813d81221ff735cc20782c (patch)
tree8887f0a6d2a9eb27b7d0332017aa93ded1196235
parent85dc582892384600709acff796bbce10153255bf (diff)
downloadu-boot-5a11df381a53097a7e813d81221ff735cc20782c.tar.gz
firmware: scmi: factorize scmi transport look up
Defines local helper function find_scmi_transport_device() with the instructions to find the SCMI transport device from a SCMI protocol device. Cc: Patrick Delaunay <patrick.delaunay@foss.st.com> Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
-rw-r--r--drivers/firmware/scmi/scmi_agent-uclass.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/drivers/firmware/scmi/scmi_agent-uclass.c b/drivers/firmware/scmi/scmi_agent-uclass.c
index c9c9c00384..f7fa5df214 100644
--- a/drivers/firmware/scmi/scmi_agent-uclass.c
+++ b/drivers/firmware/scmi/scmi_agent-uclass.c
@@ -109,6 +109,20 @@ static int scmi_bind_protocols(struct udevice *dev)
return ret;
}
+static struct udevice *find_scmi_transport_device(struct udevice *dev)
+{
+ struct udevice *parent = dev;
+
+ 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 parent;
+}
+
static const struct scmi_agent_ops *transport_dev_ops(struct udevice *dev)
{
return (const struct scmi_agent_ops *)dev->driver->ops;
@@ -118,17 +132,11 @@ int devm_scmi_process_msg(struct udevice *dev, struct scmi_channel *channel,
struct scmi_msg *msg)
{
const struct scmi_agent_ops *ops;
- struct udevice *parent = dev;
+ struct udevice *parent;
- /* 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");
+ parent = find_scmi_transport_device(dev);
+ if (!parent)
return -ENODEV;
- }
ops = transport_dev_ops(parent);