mirror of
https://github.com/torvalds/linux.git
synced 2024-12-31 23:31:29 +00:00
remoteproc: Modify recovery path to use rproc_{start,stop}()
Replace rproc_shutdown() by rproc_stop() and rproc_boot() by rproc_start() in the recovery path, in order to avoid remoteproc resources re-allocation overhead and to assist with extracting the coredumps after stopping the remote processor. Signed-off-by: Sarangdhar Joshi <spjoshi@codeaurora.org> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
parent
1efa30d089
commit
7e83cab824
@ -1051,23 +1051,40 @@ static int rproc_stop(struct rproc *rproc)
|
||||
*/
|
||||
int rproc_trigger_recovery(struct rproc *rproc)
|
||||
{
|
||||
dev_err(&rproc->dev, "recovering %s\n", rproc->name);
|
||||
const struct firmware *firmware_p;
|
||||
struct device *dev = &rproc->dev;
|
||||
int ret;
|
||||
|
||||
dev_err(dev, "recovering %s\n", rproc->name);
|
||||
|
||||
init_completion(&rproc->crash_comp);
|
||||
|
||||
/* shut down the remote */
|
||||
/* TODO: make sure this works with rproc->power > 1 */
|
||||
rproc_shutdown(rproc);
|
||||
ret = mutex_lock_interruptible(&rproc->lock);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = rproc_stop(rproc);
|
||||
if (ret)
|
||||
goto unlock_mutex;
|
||||
|
||||
/* wait until there is no more rproc users */
|
||||
wait_for_completion(&rproc->crash_comp);
|
||||
|
||||
/*
|
||||
* boot the remote processor up again
|
||||
*/
|
||||
rproc_boot(rproc);
|
||||
/* load firmware */
|
||||
ret = request_firmware(&firmware_p, rproc->firmware, dev);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "request_firmware failed: %d\n", ret);
|
||||
goto unlock_mutex;
|
||||
}
|
||||
|
||||
return 0;
|
||||
/* boot the remote processor up again */
|
||||
ret = rproc_start(rproc, firmware_p);
|
||||
|
||||
release_firmware(firmware_p);
|
||||
|
||||
unlock_mutex:
|
||||
mutex_unlock(&rproc->lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user