mirror of
https://github.com/torvalds/linux.git
synced 2026-10-07 22:37:45 -04: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 <[email protected]> Signed-off-by: Bjorn Andersson <[email protected]>
This commit is contained in:
1 parent
1efa30d089
commit
7e83cab824
1 file changed
+26
-9
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user