@@ -2018,6 +2018,26 @@ static int rproc_alloc_ops(struct rproc *rproc, const struct rproc_ops *ops)
return 0;
}
+static int rproc_alloc_internals(struct rproc *rproc, const char *name,
+ const struct rproc_ops *boot_ops,
+ const char *firmware, int len)
+{
+ int ret;
+
+ /* We have a boot_ops so allocate firmware name and operations */
+ if (boot_ops) {
+ ret = rproc_alloc_firmware(rproc, name, firmware);
+ if (ret)
+ return ret;
+
+ ret = rproc_alloc_ops(rproc, boot_ops);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
/**
* rproc_alloc() - allocate a remote processor handle
* @dev: the underlying device
@@ -2064,10 +2084,8 @@ struct rproc *rproc_alloc(struct device *dev, const char *name,
rproc->dev.class = &rproc_class;
rproc->dev.driver_data = rproc;
- if (rproc_alloc_firmware(rproc, name, firmware))
- goto out;
-
- if (rproc_alloc_ops(rproc, ops))
+ if (rproc_alloc_internals(rproc, name, ops,
+ firmware, len))
goto out;
/* Assign a unique device index and name */
In preparation to allocate the synchronisation operation and state machine, spin off a new function in order to keep rproc_alloc() as clean as possible. Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> --- drivers/remoteproc/remoteproc_core.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-)