diff options
author | Lokesh Vutla <lokeshvutla@ti.com> | 2018-08-27 15:57:50 +0530 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2018-09-11 08:32:55 -0400 |
commit | 81ae6e6d0098c9ad7d6746b4f2952a046130999c (patch) | |
tree | c6e1d7b2dc58d8aa40b3238cdee4bf36ca9afc0f | |
parent | 880274192cfdcec83b32b15ae47e7cbfc2edc1df (diff) |
remoteproc: Allow for individual remoteproc initialization
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>
-rw-r--r-- | drivers/remoteproc/rproc-uclass.c | 19 | ||||
-rw-r--r-- | include/remoteproc.h | 9 |
2 files changed, 28 insertions, 0 deletions
diff --git a/drivers/remoteproc/rproc-uclass.c b/drivers/remoteproc/rproc-uclass.c index 1fc3d424b3..c8a41a6332 100644 --- a/drivers/remoteproc/rproc-uclass.c +++ b/drivers/remoteproc/rproc-uclass.c @@ -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; diff --git a/include/remoteproc.h b/include/remoteproc.h index c3c3f46a1a..a59dba8481 100644 --- a/include/remoteproc.h +++ b/include/remoteproc.h @@ -86,6 +86,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 * * Return: 0 if all devices are initialized, else appropriate error value. @@ -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; } |