mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-19 10:44:14 +08:00
remoteproc: Introducing function rproc_actuate()
Introduce function rproc_actuate() that provides the same functionatlity as rproc_fw_boot(), but without the steps that involve interaction with the firmware image. That way we can deal with scenarios where the remoteproc core is attaching to a remote processor that has already been started by another entity. Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> Reviewed-by: Arnaud Pouliquen <arnaud.pouliquen@st.com> Tested-by: Arnaud Pouliquen <arnaud.pouliquen@st.com> Link: https://lore.kernel.org/r/20200714195035.1426873-5-mathieu.poirier@linaro.org Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
parent
d848a4819d
commit
fdf0e00ed6
@ -1372,7 +1372,7 @@ reset_table_ptr:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __maybe_unused rproc_attach(struct rproc *rproc)
|
static int rproc_attach(struct rproc *rproc)
|
||||||
{
|
{
|
||||||
struct device *dev = &rproc->dev;
|
struct device *dev = &rproc->dev;
|
||||||
int ret;
|
int ret;
|
||||||
@ -1493,6 +1493,63 @@ disable_iommu:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Attach to remote processor - similar to rproc_fw_boot() but without
|
||||||
|
* the steps that deal with the firmware image.
|
||||||
|
*/
|
||||||
|
static int __maybe_unused rproc_actuate(struct rproc *rproc)
|
||||||
|
{
|
||||||
|
struct device *dev = &rproc->dev;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* if enabling an IOMMU isn't relevant for this rproc, this is
|
||||||
|
* just a nop
|
||||||
|
*/
|
||||||
|
ret = rproc_enable_iommu(rproc);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(dev, "can't enable iommu: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* reset max_notifyid */
|
||||||
|
rproc->max_notifyid = -1;
|
||||||
|
|
||||||
|
/* reset handled vdev */
|
||||||
|
rproc->nb_vdev = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle firmware resources required to attach to a remote processor.
|
||||||
|
* Because we are attaching rather than booting the remote processor,
|
||||||
|
* we expect the platform driver to properly set rproc->table_ptr.
|
||||||
|
*/
|
||||||
|
ret = rproc_handle_resources(rproc, rproc_loading_handlers);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(dev, "Failed to process resources: %d\n", ret);
|
||||||
|
goto disable_iommu;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate carveout resources associated to rproc */
|
||||||
|
ret = rproc_alloc_registered_carveouts(rproc);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(dev, "Failed to allocate associated carveouts: %d\n",
|
||||||
|
ret);
|
||||||
|
goto clean_up_resources;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = rproc_attach(rproc);
|
||||||
|
if (ret)
|
||||||
|
goto clean_up_resources;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
clean_up_resources:
|
||||||
|
rproc_resource_cleanup(rproc);
|
||||||
|
disable_iommu:
|
||||||
|
rproc_disable_iommu(rproc);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* take a firmware and boot it up.
|
* take a firmware and boot it up.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user