> -----Original Message-----
> From: Bjorn Andersson <[email protected]>
> Sent: Wednesday, February 25, 2026 1:44 PM
> To: Shenwei Wang <[email protected]>
> Cc: Andrew Lunn <[email protected]>; Mathieu Poirier
> <[email protected]>; Arnaud POULIQUEN
> <[email protected]>; Linus Walleij <[email protected]>; Bartosz
> Golaszewski <[email protected]>; Jonathan Corbet <[email protected]>; Rob Herring
> <[email protected]>; Krzysztof Kozlowski <[email protected]>; Conor Dooley
> <[email protected]>; Frank Li <[email protected]>; Sascha Hauer
> <[email protected]>; Shuah Khan <[email protected]>; linux-
> [email protected]; [email protected]; [email protected];
> Pengutronix Kernel Team <[email protected]>; Fabio Estevam
> <[email protected]>; Peng Fan <[email protected]>;
> [email protected]; [email protected];
> [email protected]; [email protected]; dl-linux-imx 
> <linux-
> [email protected]>; Bartosz Golaszewski <[email protected]>
> Subject: [EXT] Re: [PATCH v8 3/4] gpio: rpmsg: add generic rpmsg GPIO driver
> 
> Caution: This is an external email. Please take care when clicking links or 
> opening
> attachments. When in doubt, report the message using the 'Report this email'
> button
> 
> 
> On Wed, Feb 25, 2026 at 05:54:00PM +0000, Shenwei Wang wrote:
> >
> >
> > > -----Original Message-----
> > > From: Bjorn Andersson <[email protected]>
> > > Sent: Wednesday, February 25, 2026 9:53 AM
> > > To: Shenwei Wang <[email protected]>
> > > Cc: Andrew Lunn <[email protected]>; Mathieu Poirier
> > > <[email protected]>; Arnaud POULIQUEN
> > > <[email protected]>; Linus Walleij <[email protected]>;
> > > Bartosz Golaszewski <[email protected]>; Jonathan Corbet
> > > <[email protected]>; Rob Herring <[email protected]>; Krzysztof Kozlowski
> > > <[email protected]>; Conor Dooley <[email protected]>; Frank Li
> > > <[email protected]>; Sascha Hauer <[email protected]>; Shuah
> > > Khan <[email protected]>; linux- [email protected];
> > > [email protected]; [email protected]; Pengutronix
> > > Kernel Team <[email protected]>; Fabio Estevam
> > > <[email protected]>; Peng Fan <[email protected]>;
> > > [email protected]; [email protected];
> > > [email protected]; [email protected];
> > > dl-linux-imx <linux- [email protected]>; Bartosz Golaszewski
> > > <[email protected]>
> > > Subject: [EXT] Re: [PATCH v8 3/4] gpio: rpmsg: add generic rpmsg
> > > GPIO driver On Tue, Feb 24, 2026 at 10:43:06PM +0000, Shenwei Wang
> wrote:
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: Andrew Lunn <[email protected]>
> > > > > Sent: Tuesday, February 24, 2026 4:15 PM
> > > > > To: Shenwei Wang <[email protected]>
> > > > > Cc: Mathieu Poirier <[email protected]>; Bjorn
> > > > > Andersson <[email protected]>; Arnaud POULIQUEN
> > > > > <[email protected]>; Linus Walleij
> > > > > <[email protected]>; Bartosz Golaszewski <[email protected]>;
> > > > > Jonathan Corbet <[email protected]>; Rob Herring <[email protected]>;
> > > > > Krzysztof Kozlowski <[email protected]>; Conor Dooley
> > > > > <[email protected]>; Frank Li <[email protected]>; Sascha Hauer
> > > > > <[email protected]>; Shuah Khan
> > > > > <[email protected]>; linux- [email protected];
> > > > > [email protected]; [email protected];
> > > > > Pengutronix Kernel Team <[email protected]>; Fabio Estevam
> > > > > <[email protected]>; Peng Fan <[email protected]>;
> > > > > [email protected]; [email protected];
> > > > > [email protected]; [email protected];
> > > > > dl-linux-imx <linux- [email protected]>; Bartosz Golaszewski
> > > > > <[email protected]>
> > > > > Subject: [EXT] Re: [PATCH v8 3/4] gpio: rpmsg: add generic rpmsg
> > > > > GPIO driver
> > > > > > Please explain how you would design your generic rpmsg-gpio
> > > > > > driver which is derived From gpio-virtio?
> > > > >
> > > > > We have already seen the virtio commands are pretty much
> > > > > identical to what i suggested.
> > > > >
> > > > > You could just replace virtqueue_add_sgs() with rpmsg_sendto()
> > > > > and reimplement
> > > > > virtio_gpio_request_vq() to be the callback registered with
> > > rpmsg_create_ept().
> > > > > The rest of basic GPIO handling should not need any changes at all.
> > > > >
> > > >
> > > > Creating endpoints and calling rpmsg_sendto() is only a small part
> > > > of the picture. You also need to manage the service announcement
> > > > from the remote side and handle asynchronous notification
> > > > messages. That entire flow is already implemented in the existing
> virtio_rpmsg_bus driver.
> > > > Re‑implementing those pieces just to mimic gpio‑virtio over RPMSG
> > > > would
> > > essentially mean reinventing the wheel without any real benefit.
> > > >
> > >
> > > I can absolutely see a benefit to this, there are multiple different
> > > rpmsg backends supported in Linux, so a gpio-rpmsg driver could be used by
> any one of them.
> > >
> > > I don't see this to be a case of "reinventing the wheel". Instead we
> > > copy what looks to be a very functional wheel and make it fit rpmsg.
> > > This will result in some "duplication", but rpmsg already provide
> > > the life cycle management and has a clean send/callback interface,
> > > so there shouldn't be any inventing...
> > >
> >
> > Interesting — could you walk me through how you’d structure the driver
> > with the new proposal? I’d like to see how you would layer it conceptually.
> >
> > The current RPMSG solution:
> >
> >      On Remoteprc                      On Linux
> > GPIOs -> RPMSG -> VIRTIO == VIRTIO -> RPMSG -> GPIO-RPMSG drivers
> >
> > The VIRTIO solution:
> >
> >      On Remoteprc                     On Linux
> >           GPIO -> VIRTIO == VIRTIO -> GPIO-VIRTIO driver
> >
> > Your proposal:
> >
> >      On Remoteprc                     On Linux
> > GPIOs -> RPMSG -> VIRTIO == VIRTIO -> ???
> 
> What I'm suggesting is the following:
> 
> GPIOs -> RPMSG -> VIRTIO == VIRTIO -> RPMSG -> GPIO-RPMSG
>        ^                                    ^
>        \-----+------------------------------/
>              |
>              |
> With this interface on being directly derived from the existing protocol (and 
> likely
> the implementation as well) using gpio-virtio.
> 
> You can have multiple "GPIOs" (presumably a "bank" each) instances and that
> will be reflected in having multiple "GPIO-RPMSG" instances.
> 
> I haven't made any attempts at implementing this, but it looks very similar to
> gpio-virtio in concept and it looks very similar to the exiting RPMSG tty in 
> the
> sense of being a generic implementation.
> 
> To reach something functional on the Linux side it seems to be a matter of 
> taking
> the gpio-virtio driver, register a rpmsg_driver instead, change 
> _virtio_gpio_req()
> to use rpmsg_send(), and perform the actions of virtio_gpio_event_vq() in the
> rpmsg_driver callback function.
> 

Thanks for the explanation. If I’m understanding correctly, what you’re 
suggesting is 
essentially a driver that merges the roles of a virtio_driver and an 
rpmsg_driver into a 
single source file. There may be opportunities for a few function reuse, but 
overall it 
would still result in a fairly distinct codebase.

Thanks,
Shenwei

> Regards,
> Bjorn
> 
> >
> > Thanks,
> > Shenwei
> >
> > > Similarly, I'm guessing that there's a firmware-side implementation
> > > of virtio-gpio in Zephyr, it should be straightforward to transplant this 
> > > to the
> rpmsg interface.
> > >
> > > Regards,
> > > Bjorn
> > >
> > > > Thanks,
> > > > Shenwei
> > > >
> > > > > Interrupt support does however need some changes. The
> > > > > virtio_gpio_request_vq() replacement would need to see if the
> > > > > received message indicates an interrupt and call the equivalent
> > > > > of virtio_gpio_event_vq(), since rpmsg does not have a separate
> > > > > mechanism to
> > > deliver interrupts, unlike rpmsg.
> > > > >
> > > > > At a guess, 90% of the code would stay the same?
> > > > >
> > > > >    Andrew

Reply via email to