> -----Original Message----- > From: Beleswar Prasad Padhi <[email protected]> > Sent: Tuesday, April 28, 2026 2:25 AM > To: Shenwei Wang <[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]>; Bjorn Andersson > <[email protected]>; Mathieu Poirier <[email protected]>; Frank Li > <[email protected]>; Sascha Hauer <[email protected]> > Cc: Shuah Khan <[email protected]>; [email protected]; linux- > [email protected]; [email protected]; Pengutronix Kernel Team > <[email protected]>; Fabio Estevam <[email protected]>; Peng Fan > <[email protected]>; [email protected]; linux- > [email protected]; [email protected]; linux-arm- > [email protected]; dl-linux-imx <[email protected]>; Bartosz > Golaszewski <[email protected]>; Andrew Lunn <[email protected]> > Subject: [EXT] Re: [PATCH v13 3/4] gpio: rpmsg: add generic rpmsg GPIO driver > On 28/04/26 00:53, Shenwei Wang wrote: > [...] > > > > >>> + void *channel_devices[MAX_PORT_PER_CHANNEL]; > >> > >> So this is technically a rpmsg endpoint (struct rpmsg_endpoint) > >> without naming it "endpoint". Every rpmsg endpoint has a reference to > >> its parent rpmsg channel (struct rpmsg_device) which represents the > >> same information here. So we should use the framework standard here. > >> > > Yes, agree to use "endpoint_devices". > > > I did not mean to say to just change the variable name from "channel_devices" > to > "endpoint_devices". Infact you would not need to have this field & struct > anymore. > > Pseudo-code: > 1. Add a 'struct rpmsg_endpoint *ept' field to struct rpmsg_gpio_port > to maintain the ept to port idx map. > > 2. Call port->ept = rpmsg_create_ept(rpdev, > > rpmsg_gpio_channel_callback, > port, > {rpdev.id.name, > RPMSG_ADDR_ANY, > RPMSG_ADDR_ANY}) > from rpmsg_gpiochip_register(). >
On the Linux side, we invoke rpmsg_create_ept. What is expected from the remote system in this case? If the remote side does not need any extra support, this would be an excellent solution. Thanks, Shenwei > 3. Send msgs from local ept in rpmsg_gpio_send_message() by: > rpmsg_send(port->ept, msg, sizeof(*msg)); > > 4. Get the port info in rpmsg_gpio_channel_callback() by: > struct rpmsg_gpio_port *port = priv; > > Which also eliminates the need for struct rpdev_drvdata as you can just do > rpmsg_get_rproc_node_name(rpdev) from rpmsg_gpiochip_register(). >

