| From d4f780d2a2e8f3f10f818a32ada0164fe8f3b650 Mon Sep 17 00:00:00 2001 |
| From: Suman Anna <s-anna@ti.com> |
| Date: Mon, 20 Apr 2020 11:06:00 -0500 |
| Subject: [PATCH] remoteproc: Fix and restore the parenting hierarchy for vdev |
| |
| commit c774ad010873bb89dcc0cdcb1e96aef6664d8caf upstream. |
| |
| The commit 086d08725d34 ("remoteproc: create vdev subdevice with specific |
| dma memory pool") has introduced a new vdev subdevice for each vdev |
| declared in the firmware resource table and made it as the parent for the |
| created virtio rpmsg devices instead of the previous remoteproc device. |
| This changed the overall parenting hierarchy for the rpmsg devices, which |
| were children of virtio devices, and does not allow the corresponding |
| rpmsg drivers to retrieve the parent rproc device through the |
| rproc_get_by_child() API. |
| |
| Fix this by restoring the remoteproc device as the parent. The new vdev |
| subdevice can continue to inherit the DMA attributes from the remoteproc's |
| parent device (actual platform device). |
| |
| Cc: stable@vger.kernel.org |
| Fixes: 086d08725d34 ("remoteproc: create vdev subdevice with specific dma memory pool") |
| Signed-off-by: Suman Anna <s-anna@ti.com> |
| Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org> |
| Acked-by: Arnaud Pouliquen <arnaud.pouliquen@st.com> |
| Link: https://lore.kernel.org/r/20200420160600.10467-3-s-anna@ti.com |
| Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c |
| index 6b9f80b67bb9..e0f71cd0a6ec 100644 |
| --- a/drivers/remoteproc/remoteproc_core.c |
| +++ b/drivers/remoteproc/remoteproc_core.c |
| @@ -511,7 +511,7 @@ static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc, |
| |
| /* Initialise vdev subdevice */ |
| snprintf(name, sizeof(name), "vdev%dbuffer", rvdev->index); |
| - rvdev->dev.parent = rproc->dev.parent; |
| + rvdev->dev.parent = &rproc->dev; |
| rvdev->dev.dma_pfn_offset = rproc->dev.parent->dma_pfn_offset; |
| rvdev->dev.release = rproc_rvdev_release; |
| dev_set_name(&rvdev->dev, "%s#%s", dev_name(rvdev->dev.parent), name); |
| -- |
| 2.27.0 |
| |