Commit 7e83cab8 authored by Sarangdhar Joshi's avatar Sarangdhar Joshi Committed by Bjorn Andersson

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: default avatarSarangdhar Joshi <spjoshi@codeaurora.org>
Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
parent 1efa30d0
......@@ -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;
}
/**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment