Add capability to create platform device for the rproc virtio. This is a step to move forward the management of the rproc virtio as an independent device. Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@xxxxxxxxxxx> --- drivers/remoteproc/remoteproc_internal.h | 3 ++ drivers/remoteproc/remoteproc_virtio.c | 36 ++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/drivers/remoteproc/remoteproc_internal.h b/drivers/remoteproc/remoteproc_internal.h index 6f511c50a15d..3007d29a26e1 100644 --- a/drivers/remoteproc/remoteproc_internal.h +++ b/drivers/remoteproc/remoteproc_internal.h @@ -37,6 +37,9 @@ int rproc_of_parse_firmware(struct device *dev, int index, /* from remoteproc_virtio.c */ int rproc_rvdev_add_device(struct rproc_vdev *rvdev); +struct platform_device * +rproc_virtio_register_device(struct rproc *rproc, struct rproc_vdev_pdata *vdev_data); +void rproc_virtio_unregister_device(struct rproc_vdev *rvdev); irqreturn_t rproc_vq_interrupt(struct rproc *rproc, int vq_id); void rproc_vdev_release(struct kref *ref); diff --git a/drivers/remoteproc/remoteproc_virtio.c b/drivers/remoteproc/remoteproc_virtio.c index 5f8005caeb6e..5eef679cc520 100644 --- a/drivers/remoteproc/remoteproc_virtio.c +++ b/drivers/remoteproc/remoteproc_virtio.c @@ -578,6 +578,42 @@ void rproc_vdev_release(struct kref *ref) rproc_rvdev_remove_device(rvdev); } +/** + * rproc_virtio_register_device() - register a remoteproc virtio device + * @rproc: rproc handle to add the remoteproc virtio device to + * @vdev_data: platform device data + * + * Return: 0 on success, and an appropriate error value otherwise + */ +struct platform_device * +rproc_virtio_register_device(struct rproc *rproc, struct rproc_vdev_pdata *vdev_data) +{ + struct device *dev = &rproc->dev; + struct platform_device *pdev; + + pdev = platform_device_register_data(dev, "rproc-virtio", vdev_data->index, vdev_data, + sizeof(*vdev_data)); + if (PTR_ERR_OR_ZERO(pdev)) { + dev_err(rproc->dev.parent, + "failed to create rproc-virtio device\n"); + } + + return pdev; +} +EXPORT_SYMBOL(rproc_virtio_register_device); + +/** + * rproc_virtio_unregister_device() - unregister a remoteproc virtio device + * @rvdev: remote proc virtio handle to unregister + * + */ +void rproc_virtio_unregister_device(struct rproc_vdev *rvdev) +{ + if (rvdev->pdev) + platform_device_unregister(rvdev->pdev); +} +EXPORT_SYMBOL(rproc_virtio_unregister_device); + static int rproc_virtio_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; -- 2.17.1