remoteproc: Allow for individual remoteproc initialization
authorLokesh Vutla <lokeshvutla@ti.com>
Mon, 27 Aug 2018 10:27:50 +0000 (15:57 +0530)
committerTom Rini <trini@konsulko.com>
Tue, 11 Sep 2018 12:32:55 +0000 (08:32 -0400)
Existing rproc_init() api tries to initialize all available
remoteproc devices. This will fail when there is dependency
among available remoteprocs. So introduce a separate api
that allows to initialize remoteprocs individually based
on id.

Reviewed-by: Tom Rini <trini@konsulko.com>
Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
drivers/remoteproc/rproc-uclass.c
include/remoteproc.h

index 1fc3d424b3e24fcb30e334a648de2a0aa0af3e85..c8a41a63327bca0710c73adbcfc4e8d8d00e8f05 100644 (file)
@@ -272,6 +272,25 @@ int rproc_init(void)
        return ret;
 }
 
+int rproc_dev_init(int id)
+{
+       struct udevice *dev = NULL;
+       int ret;
+
+       ret = uclass_get_device_by_seq(UCLASS_REMOTEPROC, id, &dev);
+       if (ret) {
+               debug("Unknown remote processor id '%d' requested(%d)\n",
+                     id, ret);
+               return ret;
+       }
+
+       ret = device_probe(dev);
+       if (ret)
+               debug("%s: Failed to initialize - %d\n", dev->name, ret);
+
+       return ret;
+}
+
 int rproc_load(int id, ulong addr, ulong size)
 {
        struct udevice *dev = NULL;
index c3c3f46a1a62c9c5a7d6e9ffe0b8a9fb081237e0..a59dba84810fba8b7919a6692f3340fc3d803179 100644 (file)
@@ -85,6 +85,14 @@ struct dm_rproc_ops {
  */
 int rproc_init(void);
 
+/**
+ * rproc_dev_init() - Initialize a remote proc device based on id
+ * @id:                id of the remote processor
+ *
+ * Return: 0 if all ok, else appropriate error value.
+ */
+int rproc_dev_init(int id);
+
 /**
  * rproc_is_initialized() - check to see if remoteproc devices are initialized
  *
@@ -150,6 +158,7 @@ int rproc_ping(int id);
 int rproc_is_running(int id);
 #else
 static inline int rproc_init(void) { return -ENOSYS; }
+static inline int rproc_dev_init(int id) { return -ENOSYS; }
 static inline bool rproc_is_initialized(void) { return false; }
 static inline int rproc_load(int id, ulong addr, ulong size) { return -ENOSYS; }
 static inline int rproc_start(int id) { return -ENOSYS; }