Re: [PATCH v13 3/4] gpio: rpmsg: add generic rpmsg GPIO driver
From: Arnaud POULIQUEN
Date: Thu Apr 30 2026 - 03:39:04 EST
Hello,
On 4/29/26 21:20, Mathieu Poirier wrote:
On Wed, 29 Apr 2026 at 12:07, Padhi, Beleswar <b-padhi@xxxxxx> wrote:
Hi Mathieu,
On 4/29/2026 11:03 PM, Mathieu Poirier wrote:
On Wed, 29 Apr 2026 at 10:53, Shenwei Wang <shenwei.wang@xxxxxxx> wrote:
An endpoint is created with every namespace request. There should be
-----Original Message-----You still need a way to let the remote side know which port the endpoint maps to, either
From: Mathieu Poirier <mathieu.poirier@xxxxxxxxxx>
Sent: Wednesday, April 29, 2026 10:42 AM
To: Shenwei Wang <shenwei.wang@xxxxxxx>
Cc: Andrew Lunn <andrew@xxxxxxx>; Padhi, Beleswar <b-padhi@xxxxxx>; Linus
Walleij <linusw@xxxxxxxxxx>; Bartosz Golaszewski <brgl@xxxxxxxxxx>; Jonathan
Corbet <corbet@xxxxxxx>; Rob Herring <robh@xxxxxxxxxx>; Krzysztof Kozlowski
<krzk+dt@xxxxxxxxxx>; Conor Dooley <conor+dt@xxxxxxxxxx>; Bjorn Andersson
<andersson@xxxxxxxxxx>; Frank Li <frank.li@xxxxxxx>; Sascha Hauer
<s.hauer@xxxxxxxxxxxxxx>; Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx>; linux-
gpio@xxxxxxxxxxxxxxx; linux-doc@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx;
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>; Fabio Estevam
<festevam@xxxxxxxxx>; Peng Fan <peng.fan@xxxxxxx>;
devicetree@xxxxxxxxxxxxxxx; linux-remoteproc@xxxxxxxxxxxxxxx;
imx@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; dl-linux-imx <linux-
imx@xxxxxxx>; Bartosz Golaszewski <brgl@xxxxxxxx>
Subject: [EXT] Re: [PATCH v13 3/4] gpio: rpmsg: add generic rpmsg GPIO driver
On Tue, Apr 28, 2026 at 03:24:59PM +0000, Shenwei Wang wrote:
replies, and a second one for events.
-----Original Message-----Some changes to the message format are necessary.
From: Andrew Lunn <andrew@xxxxxxx>
Sent: Monday, April 27, 2026 3:49 PM
To: Shenwei Wang <shenwei.wang@xxxxxxx>
Cc: Padhi, Beleswar <b-padhi@xxxxxx>; Linus Walleij
<linusw@xxxxxxxxxx>; Bartosz Golaszewski <brgl@xxxxxxxxxx>; Jonathan
Corbet <corbet@xxxxxxx>; Rob Herring <robh@xxxxxxxxxx>; Krzysztof
Kozlowski <krzk+dt@xxxxxxxxxx>; Conor Dooley <conor+dt@xxxxxxxxxx>;
Bjorn Andersson <andersson@xxxxxxxxxx>; Mathieu Poirier
<mathieu.poirier@xxxxxxxxxx>; Frank Li <frank.li@xxxxxxx>; Sascha
Hauer <s.hauer@xxxxxxxxxxxxxx>; Shuah Khan
<skhan@xxxxxxxxxxxxxxxxxxx>; linux-gpio@xxxxxxxxxxxxxxx; linux-
doc@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Pengutronix
Kernel Team <kernel@xxxxxxxxxxxxxx>; Fabio Estevam
<festevam@xxxxxxxxx>; Peng Fan <peng.fan@xxxxxxx>;
devicetree@xxxxxxxxxxxxxxx; linux- remoteproc@xxxxxxxxxxxxxxx;
imx@xxxxxxxxxxxxxxx; linux-arm- kernel@xxxxxxxxxxxxxxxxxxx;
dl-linux-imx <linux-imx@xxxxxxx>; Bartosz Golaszewski
<brgl@xxxxxxxx>
Subject: [EXT] Re: [PATCH v13 3/4] gpio: rpmsg: add generic rpmsg
GPIO driver
(GET_DIRECTION) below:struct virtio_gpio_response {It is the same message format. Please see the message definition
__u8 status;
__u8 value;
};
+ +-----+-----+-----+-----+-----+----+Sorry, but i don't see how two u8 vs six u8 are the same message format.
+ |0x00 |0x01 |0x02 |0x03 |0x04 |0x05|
+ | 1 | 2 |port |line | err | dir|
+ +-----+-----+-----+-----+-----+----+
Virtio uses two communication channels (virtqueues): one for requests and
In contrast, rpmsg provides only a single communication channel, so aline is introduced to handle both cases.
type field is required to distinguish between different kinds of messages.
Since rpmsg replies and events share the same message format, an additional
Finally, rpmsg supports multiple GPIO controllers, so a port field is added touniquely identify the target controller.
I have commented on this before - RPMSG is already providing multiplexing
capability by way of endpoints. There is no need for a port field. One endpoint,
one GPIO controller.
by embedding the port information in the message (the current way), or by sending it
separately.
one namespace request for every GPIO controller, which yields a unique
endpoint for each controller and eliminates the need for an extra
field to identify them.
Right, but this can still be done by just having one namespace request.
We can create new endpoints bound to an existing namespace/channel by
invoking rpmsg_create_ept(). This is what I suggested here too:
https://lore.kernel.org/all/29485742-6e49-482e-b73d-228295daaeec@xxxxxx/
I will look at your suggestion (i.e link above) later this week or next week.
My mental model looks like this for the complete picture:
1. namespace/channel#1 = rpmsg-io
a. ept1 -> gpio-controller@1
b. ept2 -> gpio-controller@2
I've asked for one endpoint per GPIO controller since the very
beginning. I don't yet have a strong opinion on whether to use one
namespace request per GPIO controller or a single request that spins
off multiple endpoints. I'll have to look at your link and reflect on
that. Regardless of how we proceed on that front, multiplexing needs
to happen at the endpoint level rather than the packet level. This is
the only way this work can move forward.
I would be more in favor of Mathieu’s proposal: “An endpoint is created with every namespace request.”
If the endpoint is created only on the Linux side, how do we match the Linux endpoint address with the local port field on the remote side?
With a multi-namespace approach, the namespace could be rpmsg-io-[addr], where [addr] corresponds to the GPIO controller address in the DT. This would:
- match the RPMsg probe with the DT,
- provide a simple mapping between the port and the endpoint on both sides,
- allow multiple endpoints on the remote side,
- provide a simple discovery mechanism for remote capabilities.
Regards,
Arnaud
2. namespace/channel#2 = rpmsg-i2c
a. ept1 -> i2c@1
b. ept2 -> i2c@2
c. ept3 -> i2c@3
etc...
This way device groups are isolated with each channel/namespace, and
instances within each device groups are also respected with specific
endpoints.
Thanks,
Beleswar