]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
firmware: scmi: factorize scmi transport look up
authorEtienne Carriere <etienne.carriere@linaro.org>
Tue, 31 May 2022 16:09:20 +0000 (18:09 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 23 Jun 2022 17:12:55 +0000 (13:12 -0400)
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>
drivers/firmware/scmi/scmi_agent-uclass.c

index c9c9c00384a4698d6722441a86688176699ea361..f7fa5df214cb662d906d9239ba5f8277a316ad8e 100644 (file)
@@ -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);