From: Wendy Liang <[email protected]>

Kick the remote in virtio reset.
In order to be backward compatible, only set the vdev
status to NEEDS_RESET and kick the remote if the remote is
RUNNING_INDEPENDENT, that is only if the remote is already
running.

Signed-off-by: Wendy Liang <[email protected]>
Signed-off-by: Michal Simek <[email protected]>
---
 drivers/remoteproc/remoteproc_virtio.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/remoteproc/remoteproc_virtio.c 
b/drivers/remoteproc/remoteproc_virtio.c
index d43e15b..bf3be6f1 100644
--- a/drivers/remoteproc/remoteproc_virtio.c
+++ b/drivers/remoteproc/remoteproc_virtio.c
@@ -231,8 +231,19 @@ static void rproc_virtio_reset(struct virtio_device *vdev)
 
        rsc = (void *)rvdev->rproc->table_ptr + rvdev->rsc_offset;
 
-       rsc->status = 0;
        dev_dbg(&vdev->dev, "reset !\n");
+       if (rvdev->rproc->state == RPROC_RUNNING_INDEPENDENT) {
+               rsc->status = VIRTIO_CONFIG_S_NEEDS_RESET;
+               virtio_mb(false);
+               rproc_virtio_notify(rvdev);
+               while (rsc->status) {
+                       if (!wait_for_completion_timeout(
+                               &rvdev->config_wait_complete, HZ))
+                               break;
+               }
+       } else {
+               rsc->status = 0;
+       }
 }
 
 /* provide the vdev features as retrieved from the firmware */
-- 
1.9.1

Reply via email to