lkml.org 
[lkml]   [2017]   [Nov]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 13/16] remoteproc: look-up memory-device for virtio device allocation
    Date
    This patch parse existing carveout list to find a memory area
    matching on "vdev<vdev_id>buffer" name.
    If found, memory device will be used as parent for vdev creation, else
    rproc platform device will be used as today.

    Signed-off-by: Loic Pallardy <loic.pallardy@st.com>
    ---
    drivers/remoteproc/remoteproc_core.c | 13 +++++++++++++
    drivers/remoteproc/remoteproc_virtio.c | 2 +-
    include/linux/remoteproc.h | 1 +
    3 files changed, 15 insertions(+), 1 deletion(-)

    diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
    index 6b5e2b2..9c12319 100644
    --- a/drivers/remoteproc/remoteproc_core.c
    +++ b/drivers/remoteproc/remoteproc_core.c
    @@ -583,8 +583,11 @@ static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc,
    {
    struct device *dev = &rproc->dev;
    struct rproc_vdev *rvdev;
    + struct device *memdev = dev->parent;
    + struct rproc_mem_entry *carveout;
    int i, ret;
    static int index;
    + char name[16];

    /* make sure resource isn't truncated */
    if (sizeof(*rsc) + rsc->num_of_vrings * sizeof(struct fw_rsc_vdev_vring)
    @@ -637,6 +640,16 @@ static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc,

    list_add_tail(&rvdev->node, &rproc->rvdevs);

    + /* Find associated registered carveout. */
    + /* Try dedicated vdev buffer pool. */
    + snprintf(name, sizeof(name), "vdev%dbuffer", rvdev->index);
    + carveout = rproc_find_carveout_by_name(rproc, name);
    +
    + if (carveout && carveout->memdev)
    + memdev = &carveout->memdev->dev;
    +
    + rvdev->dev = memdev;
    +
    rproc_add_subdev(rproc, &rvdev->subdev,
    rproc_vdev_do_probe, rproc_vdev_do_remove);

    diff --git a/drivers/remoteproc/remoteproc_virtio.c b/drivers/remoteproc/remoteproc_virtio.c
    index 2946348..1f7a444 100644
    --- a/drivers/remoteproc/remoteproc_virtio.c
    +++ b/drivers/remoteproc/remoteproc_virtio.c
    @@ -303,7 +303,7 @@ static void rproc_virtio_dev_release(struct device *dev)
    int rproc_add_virtio_dev(struct rproc_vdev *rvdev, int id)
    {
    struct rproc *rproc = rvdev->rproc;
    - struct device *dev = &rproc->dev;
    + struct device *dev = rvdev->dev;
    struct virtio_device *vdev = &rvdev->vdev;
    int ret;

    diff --git a/include/linux/remoteproc.h b/include/linux/remoteproc.h
    index fb293d3..b3d6656 100644
    --- a/include/linux/remoteproc.h
    +++ b/include/linux/remoteproc.h
    @@ -506,6 +506,7 @@ struct rproc_vdev {
    struct kref refcount;

    struct rproc_subdev subdev;
    + struct device *dev;

    unsigned int id;
    unsigned int index;
    --
    1.9.1
    \
     
     \ /
      Last update: 2017-11-30 17:49    [W:3.930 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site