From: Andrew Lunn <andrew@lunn.ch>
To: Shenwei Wang <shenwei.wang@nxp.com>
Cc: Bjorn Andersson <andersson@kernel.org>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Shawn Guo <shawnguo@kernel.org>,
Sascha Hauer <s.hauer@pengutronix.de>,
Jonathan Corbet <corbet@lwn.net>,
Linus Walleij <linus.walleij@linaro.org>,
Bartosz Golaszewski <brgl@bgdev.pl>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>, Peng Fan <peng.fan@nxp.com>,
linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org,
imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
linux-imx@nxp.com
Subject: Re: [PATCH v5 3/5] docs: staging: gpio-rpmsg: gpio over rpmsg bus
Date: Thu, 6 Nov 2025 20:05:50 +0100 [thread overview]
Message-ID: <9fd8ccd9-560a-43b4-a48d-f7a3eaa07eb1@lunn.ch> (raw)
In-Reply-To: <20251104203315.85706-4-shenwei.wang@nxp.com>
On Tue, Nov 04, 2025 at 02:33:13PM -0600, Shenwei Wang wrote:
> Describes the gpio rpmsg transport protocol over the rpmsg bus between
> the cores.
>
> Signed-off-by: Shenwei Wang <shenwei.wang@nxp.com>
> ---
> Documentation/staging/gpio-rpmsg.rst | 202 +++++++++++++++++++++++++++
> Documentation/staging/index.rst | 1 +
> 2 files changed, 203 insertions(+)
> create mode 100644 Documentation/staging/gpio-rpmsg.rst
>
> diff --git a/Documentation/staging/gpio-rpmsg.rst b/Documentation/staging/gpio-rpmsg.rst
> new file mode 100644
> index 000000000000..ad6207a3093f
> --- /dev/null
> +++ b/Documentation/staging/gpio-rpmsg.rst
> @@ -0,0 +1,202 @@
> +.. SPDX-License-Identifier: GPL-2.0-or-later
> +
> +GPIO RPMSG Protocol
> +===================
> +
> +The GPIO RPMSG transport protocol is used for communication and interaction
> +with GPIO controllers located on remote cores on the RPMSG bus.
> +
> +Message Format
> +--------------
> +
> +The RPMSG message consists of a 14-byte packet with the following layout:
> +
> +.. code-block:: none
> +
> + +-----+------+------+-----+-----+------------+-----+-----+-----+----+
> + |0x00 |0x01 |0x02 |0x03 |0x04 |0x05..0x09 |0x0A |0x0B |0x0C |0x0D|
> + |cate |major |minor |type |cmd |reserved[5] |line |port | data |
> + +-----+------+------+-----+-----+------------+-----+-----+-----+----+
> +
> +- **Cate (Category field)**: Indicates the category of the message, such as GPIO, I2C, PMIC, AUDIO, etc.
We know it is a GPIO message, this document is titled "GPIO RPMSG
Protocol". So i don't see the need for cate. I can however understand
that your device does support multiple functions, but to make this
generic, it would be better if each function had its own channel.
> +
> + Defined categories:
> +
> + - 1: RPMSG_LIFECYCLE
> + - 2: RPMSG_PMIC
> + - 3: RPMSG_AUDIO
> + - 4: RPMSG_KEY
> + - 5: RPMSG_GPIO
> + - 6: RPMSG_RTC
> + - 7: RPMSG_SENSOR
> + - 8: RPMSG_AUTO
> + - 9: RPMSG_CATEGORY
> + - A: RPMSG_PWM
> + - B: RPMSG_UART
> +
> +- **Major**: Major version number.
> +
> +- **Minor**: Minor version number.
What is the purpose of Major and Minor? What values are valid. What
should happen if an invalid value is passed?
What you should think about is, if you gave this specification to
somebody else, could they implement it?
> +
> +- **Type (Message Type)**: For the GPIO category, can be one of:
> +
> + - 0: GPIO_RPMSG_SETUP
> + - 1: GPIO_RPMSG_REPLY
> + - 2: GPIO_RPMSG_NOTIFY
Is _SETUP always from Linux to the firmware? Is a setup always
followed by a _REPLY? Do you need to wait for the _REPLY before
sending the next _SETUP? If there is no _REPLY within X seconds, should
Linux retry? Can an _NOTIFY arrive between a _SETUP and a _REPLY?
> +
> +- **Cmd**: Command code, used for GPIO_RPMSG_SETUP messages.
> +
> +- **reserved[5]**: Reserved bytes.
Why are these in the middle. It is more normal to have reserved bytes
at the end.
You should also specify these bytes should be set to 0. If you don't
it will be hard to use them in the future, because they will contain
42, or some other random values.
Is there a relationship between major:minor and reserved?
> +
> +- **line**: The GPIO line index.
> +
> +- **port**: The GPIO controller index.
data?
> +GPIO Commands
> +-------------
This is a GPIO specification, so i would only expect GPIO commands...
> +
> +Commands are specified in the **Cmd** field for **GPIO_RPMSG_SETUP** (Type=0) messages.
> +
> +GPIO_RPMSG_INPUT_INIT (Cmd=0)
> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> +
> +**Request:**
> +
> +.. code-block:: none
> +
> + +-----+-----+-----+-----+-----+-----------+-----+-----+-----+----+
> + |0x00 |0x01 |0x02 |0x03 |0x04 |0x05..0x09 |0x0A |0x0B |0x0C |0x0D|
> + | 5 | 1 | 0 | 0 | 0 | 0 |line |port | val | wk |
> + +-----+-----+-----+-----+-----+-----------+-----+-----+-----+----+
> +
> +- **val**: Interrupt trigger type.
> +
> + - 0: Interrupt disabled
> + - 1: Rising edge trigger
> + - 2: Falling edge trigger
> + - 3: Both edge trigger
> + - 4: Low level trigger
> + - 5: High level trigger
> +
> +- **wk**: Wakeup enable.
> +
> + - 0: Disable wakeup from GPIO
> + - 1: Enable wakeup from GPIO
What do you mean by wakeup?
> +
> +**Reply:**
> +
> +.. code-block:: none
> +
> + +-----+-----+-----+-----+-----+-----------+-----+-----+-----+----+
> + |0x00 |0x01 |0x02 |0x03 |0x04 |0x05..0x09 |0x0A |0x0B |0x0C |0x0D|
> + | 5 | 1 | 0 | 1 | 1 | 0 |line |port | err | 0 |
> + +-----+-----+-----+-----+-----+-----------+-----+-----+-----+----+
> +
> +- **err**: Error code from the remote core.
> +
> + - 0: Success
> + - 1: General error (early remote software only returns this unclassified error)
> + - 2: Not supported
> + - 3: Resource not available
> + - 4: Resource busy
> + - 5: Parameter error
It would be good to give some examples of when these should be used.
Say the hardware does not support both edges. Is that 2? Why would a
resource be busy? How is busy different to not available?
> +
> +GPIO_RPMSG_OUTPUT_INIT (Cmd=1)
> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> +
> +**Request:**
> +
> +.. code-block:: none
> +
> + +-----+-----+-----+-----+-----+-----------+-----+-----+-----+----+
> + |0x00 |0x01 |0x02 |0x03 |0x04 |0x05..0x09 |0x0A |0x0B |0x0C |0x0D|
> + | 5 | 1 | 0 | 0 | 1 | 0 |line |port | val | 0 |
> + +-----+-----+-----+-----+-----+-----------+-----+-----+-----+----+
> +
> +- **val**: Output level.
> +
> + - 0: Low
> + - 1: High
Maybe make a comment about the order. Some GPIO controllers suffer from
glitches when you swap them from input to output. While it is an
input, you first need to set the output value, and then configure the
pin for output.
> +Notification Message
> +--------------------
> +
> +Notifications are sent with **Type=2 (GPIO_RPMSG_NOTIFY)**:
> +
> +.. code-block:: none
> +
> + +-----+-----+-----+-----+-----+-----------+-----+-----+-----+----+
> + |0x00 |0x01 |0x02 |0x03 |0x04 |0x05..0x09 |0x0A |0x0B |0x0C |0x0D|
> + | 5 | 1 | 0 | 2 | 0 | 0 |line |port | 0 | 0 |
> + +-----+-----+-----+-----+-----+-----------+-----+-----+-----+----+
> +
> +- **line**: The GPIO line index.
> +- **port**: The GPIO controller index.
There is no need to acknowledge the notification? How do level
interrupts work?
Andrew
next prev parent reply other threads:[~2025-11-06 19:05 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-04 20:33 [PATCH v5 0/5] Enable Remote GPIO over RPMSG on i.MX Platform Shenwei Wang
2025-11-04 20:33 ` [PATCH v5 1/5] dt-bindings: remoteproc: imx_rproc: Add "rpmsg" subnode support Shenwei Wang
2025-11-06 18:18 ` Andrew Lunn
2025-11-12 12:53 ` Rob Herring
2025-11-12 15:36 ` Shenwei Wang
2025-11-04 20:33 ` [PATCH v5 2/5] remoteproc: imx_rproc: Populate devices under "rpmsg" subnode Shenwei Wang
2025-11-06 7:56 ` Peng Fan
2025-11-06 18:23 ` Andrew Lunn
2025-11-04 20:33 ` [PATCH v5 3/5] docs: staging: gpio-rpmsg: gpio over rpmsg bus Shenwei Wang
2025-11-06 19:05 ` Andrew Lunn [this message]
2025-11-06 20:40 ` Shenwei Wang
2025-11-06 21:32 ` Andrew Lunn
2025-11-06 23:13 ` Shenwei Wang
2025-11-07 0:31 ` Andrew Lunn
2025-11-07 21:24 ` Shenwei Wang
2025-11-08 17:45 ` Andrew Lunn
2025-11-10 15:24 ` Shenwei Wang
2025-11-10 15:59 ` Andrew Lunn
2025-11-10 16:30 ` Shenwei Wang
2025-11-10 17:58 ` Andrew Lunn
2025-11-11 10:35 ` Linus Walleij
2025-11-11 16:45 ` Shenwei Wang
2025-11-12 13:41 ` Andrew Lunn
2025-11-12 16:31 ` Shenwei Wang
2025-11-14 17:39 ` Andrew Lunn
2025-11-12 12:57 ` Rob Herring
2025-11-12 13:35 ` Daniel Baluta
2025-11-12 21:18 ` Randy Dunlap
2025-11-13 22:23 ` Shenwei Wang
2025-11-13 22:34 ` Randy Dunlap
2025-11-04 20:33 ` [PATCH v5 4/5] gpio: imx-rpmsg: add imx-rpmsg GPIO driver Shenwei Wang
2025-11-06 8:12 ` Peng Fan
2025-11-06 12:31 ` Zhongqiu Han
2025-11-06 17:00 ` Shenwei Wang
2025-11-04 20:33 ` [PATCH v5 5/5] arm64: dts: imx8ulp: Add rpmsg node under imx_rproc Shenwei Wang
2025-11-05 1:12 ` [PATCH v5 0/5] Enable Remote GPIO over RPMSG on i.MX Platform Peng Fan
2025-11-05 10:25 ` Arnaud POULIQUEN
2025-11-05 14:12 ` Shenwei Wang
2025-11-06 10:17 ` Arnaud POULIQUEN
2025-11-06 16:26 ` Shenwei Wang
2025-11-07 17:17 ` Arnaud POULIQUEN
2025-11-07 17:27 ` Andrew Lunn
2025-11-07 22:40 ` Shenwei Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9fd8ccd9-560a-43b4-a48d-f7a3eaa07eb1@lunn.ch \
--to=andrew@lunn.ch \
--cc=andersson@kernel.org \
--cc=brgl@bgdev.pl \
--cc=conor+dt@kernel.org \
--cc=corbet@lwn.net \
--cc=devicetree@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=imx@lists.linux.dev \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=mathieu.poirier@linaro.org \
--cc=peng.fan@nxp.com \
--cc=robh@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@kernel.org \
--cc=shenwei.wang@nxp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).