Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+26 −9
Original line number Diff line number Diff line
@@ -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;
}

/**