Hi Arnaud, On Wed, Dec 22, 2021 at 09:23:48AM +0100, Arnaud Pouliquen wrote: > 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)) { Can you expand on the reason to use PTR_ERR_OR_ZERO() rather than IS_ERR()? Looking at the documentation for platform_device_register_data(), it should not return 0... > + 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 >