From nobody Sun Jun 28 01:51:27 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011025.outbound.protection.outlook.com [52.101.65.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBE4D32BF44; Thu, 25 Jun 2026 15:54:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782402898; cv=fail; b=kEZ7Tnzt2s2699owEtCqu65O0Q6x45Ln3/YSktCXeydqeIL3Bh9pw8yF3tw9mAzqdEEAjSmSWuwbUmuzYkwBTXDkV7tNdmr6KZUw45j0f0DWb1Bpg2FAr1kR7uBzLGCZGzIxo0rrNfa6nPidIO/uKqurspg/unLNZwMNNKVnJgA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782402898; c=relaxed/simple; bh=e9ZGF6IRzFD8d3pFGnMDoyPvQARRs5JcrHW2/JQKWZ0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=T3D70X2Upj3myelzZcRb+QJRJjbBud7uWNYS+LRlmkvvo5HlDpo719V4zesNi5td5e142PvjkpJmbunibo7qf4FPHr8B0FOaVrDwHj/E7C5u1xXeOFQU5q18cW7rKZXtUeMMQbkjqnJlQ1JU+2wY4WFvaHI4r1QwjTx8SPfA2eM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=j3nFkM9G; arc=fail smtp.client-ip=52.101.65.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="j3nFkM9G" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uwjP92ml9x70ytxU48/oiom5ELCTjJQogGuJXodrCOZLsaJaz7u0njasbYvsT8FT4opdPJDsZXF/YWDGYrga/Qgwm39AJT7aEWCbYuGIIr1U+XeJMuxkMuSBNpx+daJeE3Kj/eNOef2gUENlEtpSJOlBqQZhL1SxcajTNvD5bIbuwUaDEUCtc1j+Wg0L8Z0Muybf/X+qUk5pDuxYaH6MMWqbrZcG2zVq5lF1PFUN79n6+lSs10GnuveoQvjT3/IlZmg8F536vBlcmEHo/8ddg/z8tJkhfEo0OILnEENUJfs3Xqh8zwEaqYAzeMPnG6C0nnmT48GQpzHa/NMehSJKAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=e/EflOYNqqfJ9WzJdXDP641oU8Z1Cxge2c0KDWcs8lw=; b=PxLrqmmBRO/ndiFEC8PSZVYXyX8tdnsPPENfOdcS2fDXXQLoHPJks52RjLCpBXu822R5vcvdf6DReffGH7aDcCeIzE0o92NTjnH+x1znNyv2trJsXEZ48JoPBfCsbeeRdVZGtOzIyT8S+oX3tb3zaiS9rwtixGg9OLsPfGD9ZIfylUs+smB9SDM6zQ40Kqh+/xJCo2mw6NdW5d319ChDUdRPPjva44klidGhtoDxjzbOX/WoYNarN8LZY453mR7mClgJF7Lj+U8AFbS75YfLpBMGNlVSUiyrpQvuRhnYXBLjXesKue12+3sGEdT0hURTNQLvD/+sJfQuHiqH1q+rJg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e/EflOYNqqfJ9WzJdXDP641oU8Z1Cxge2c0KDWcs8lw=; b=j3nFkM9GjLzJvTrnMCspI77bmQ6c+dVyI5pIpy2MfnNCyWfc0IFqesqVFfnYLRCnoKynZyuPUiHwGYcJ8D57gn6VLKr/Z2ACe88HT5u3URAUHmWj1oaHVQJk8/CtTHzcf4el4LDYZ7mjW7wJNETFxIl0nJiMTHZ5zGNCylBLs1vOI18piIlEvz4pcortaCQ0DEHWUg1DeXpM7MENGukR4/MALyNHWQh4haBzVtcUQjamCeytFp2L5LCB6O9awSxAb0E39ksid+FAtTcL+h4vdx4E9OJm9xojOdWO0IjM+EhZx/lJwvHjb+BLW+yaImfcOHy6adhuSmG7GLLsaTG0zA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VI1PR04MB7135.eurprd04.prod.outlook.com (2603:10a6:800:12c::22) by VI1PR04MB9812.eurprd04.prod.outlook.com (2603:10a6:800:1d2::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.16; Thu, 25 Jun 2026 15:54:42 +0000 Received: from VI1PR04MB7135.eurprd04.prod.outlook.com ([fe80::322f:adc4:8d65:2ba4]) by VI1PR04MB7135.eurprd04.prod.outlook.com ([fe80::322f:adc4:8d65:2ba4%6]) with mapi id 15.21.0159.015; Thu, 25 Jun 2026 15:54:42 +0000 From: Shenwei Wang To: Linus Walleij , Bartosz Golaszewski , Jonathan Corbet , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Mathieu Poirier , Frank Li , Sascha Hauer Cc: Shuah Khan , linux-gpio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Pengutronix Kernel Team , Fabio Estevam , Shenwei Wang , Peng Fan , devicetree@vger.kernel.org, linux-remoteproc@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, Arnaud POULIQUEN , b-padhi@ti.com, Andrew Lunn Subject: [PATCH v14 1/5] docs: driver-api: gpio: rpmsg gpio driver over rpmsg bus Date: Thu, 25 Jun 2026 10:54:26 -0500 Message-ID: <20260625155432.815185-2-shenwei.wang@oss.nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260625155432.815185-1-shenwei.wang@oss.nxp.com> References: <20260625155432.815185-1-shenwei.wang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SA0PR13CA0029.namprd13.prod.outlook.com (2603:10b6:806:130::34) To VI1PR04MB7135.eurprd04.prod.outlook.com (2603:10a6:800:12c::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR04MB7135:EE_|VI1PR04MB9812:EE_ X-MS-Office365-Filtering-Correlation-Id: f9b0c928-b05f-4665-bcea-08ded2d211eb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|19092799006|366016|1800799024|921020|6133799003|11063799006|56012099006|22082099003|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: xKaCoNZUaih4Kyx+cWJ6ctNFmjAtYzwWqqvO+4vKYosSqQPD7qSLvAdmi+MXsglDbR8oO6XwIjA/TzkLpFZMp8rtYVVMba/r1EdH5Y8iMJ2sB0xxvsK3pTcF4euxtte9spvz7oEP0AuCgxU6HmKQx17qC0AT8iJgWMUQTWM+bMIZDMSisr4ArUd8V6rHXEiVf0IJUQ5cp5VrGCfvPfVDqKw0Ie9KpcTZRNxSEIjP1PERRG4gZ8OA5rJcRjSnC3+tVhteQW8QITTnPy2VJdVNdD5WqarzzAnFTMlT708H38GsfzcA+5AiAdAf3vMSzehtjuIxuVyGs9Dr89zC2szT7SsPUomYWBAwkLV8zSOHAxyV8vvHhOPq1jHmlAVKPBoGBW0iMhhpJCb/dHxJMC/KFfi3ylyRacsjYy1UDmaEcTTv3f9FxTfAairKPwBqfjK14iJ9cEB7o+OPEWqrr0ZLg/M/CvWMCWYb3zgotiWbxC6vaiC2odOwZ0MOhVKGfwnolfTAPDpRBrxKzrFOOkAUGupdQpYB+l9qXRqY+9+Mk97Vs81aIsi9i/mjpmNuTshfbg+4WF8H/CY3ptxfrz3H8CFmQX4y4N+8OsGmrHzpXu3iIpg5kZoDuVCmfVozOiyYLpYrADl+S9XkkRnuDR/MCk3uTko3BEYhh7iv4+yrlJJ+bKZiaMABbR6X2y5sF14V/kacm/SC4C0M8OIrXp0tdw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB7135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(19092799006)(366016)(1800799024)(921020)(6133799003)(11063799006)(56012099006)(22082099003)(18002099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?0NB2lHFM7m663S2AQoWpIr068kxh+xB2KIlmXbiY+Zcq7mp9bawf7gutMt+v?= =?us-ascii?Q?qTLvtHsGMr5sfVkNdlwq63iQrgmrOOzfcYuEfUid5DtGkeEnWSeBapgpWWV5?= =?us-ascii?Q?aCi3HBjCJqDAqE6fQS0e2W8BmM9xCpIhTtHwNFW7laKzR1oqZQmVED8iCgNV?= =?us-ascii?Q?2ViXYAYBI+h2158um253uY/+/adA3mJqqq6sDlprBP3xcWCjM3JRjppSgJLi?= =?us-ascii?Q?G3jqikaYEkWsR6WG902H1KU99Y8fwINsRjgOmYrRhjuVzz2kcgykpADc2ByY?= =?us-ascii?Q?ewnxvgzYeVb5aFXZiX1Z0TeSbx9zmpZUQnMSqWCsbSdld/B/AkWAumu6rZv8?= =?us-ascii?Q?PcbvSRNW4xpmlzNEBvbbcx+cDwvKmFcrlDpL7ePiwO0nucmJPxQzZwYLksC5?= =?us-ascii?Q?JZQhOS8e+3s0ts+Z980FUV6XJH6tCbXNAQ5GD1zLfXEntz/6xkex5rbtxe9h?= =?us-ascii?Q?Q5jzyAo4Y/k4WPYaoBsRIC5shQ6pcOUyxluPZrVWyUI66+JmSds2sBRXVrGe?= =?us-ascii?Q?JfZKiTsIjPtIhcjES3sW8SmOkCgDfg8f5zE9vc0aHdiSciyLQNt8GbeCQjAA?= =?us-ascii?Q?GZInZ/rs4aN5a2CUU8UqH61pWF4YbHSvui+y9VFNIbNghy1pCmOMRPPjTa5+?= =?us-ascii?Q?+n0JN1XAzNroClDCMlXpb4XMmVQ0T3ayPYPYTWS/JxGZtyGH2icUhn/9PFGE?= =?us-ascii?Q?ar8nrspE4rfgS60xJyUOeDje5P+fufl2YtdDgGGi2bXUxbLzIokFTYAJhnKn?= =?us-ascii?Q?DYgRqtSWtR95qS+8/PKZUS3dzQF2Y7GGzd+Dwsbedl4zR6lWYZosz3qRLkrj?= =?us-ascii?Q?mbFsiUHC2wMsOw3PkxOX6T7AuHMwTz3PzS+WM9Y79aoopy/A8W/Za6zCSrQU?= =?us-ascii?Q?vACYiLMpFNnjARv8+kSJ26rqIdUVtYowUUeivKr4SDn/5sgBNr5y0N7ma0j/?= =?us-ascii?Q?Muh5XBPssVhVfDIGRWCdlqaC9ykd/ylr5/e8aZB89xKVVyI/RdUAWNjvN1Oy?= =?us-ascii?Q?6ELrdafUcm5nyQ0vCXWsKWx8ZFbbvRGMI/53gcADvfclI058XknyZ5/+u/82?= =?us-ascii?Q?u0wSNrX6t31rWwnDD7RJ0FxTQrLVTAW0z04E29Ao1d9ovU1f8BiJbCofu/nG?= =?us-ascii?Q?IDaB+H8npRLipj2IqzpqXmdb7mKIHeLH3DrfMEy80tnm42Rn7vMzcmOQeiyH?= =?us-ascii?Q?HmdCu6q28VlYWbje+jXLzvHCh2qrKrcJ/hB/haGCqbKQr9lmKn6pPVFkuvoV?= =?us-ascii?Q?d2ItG1oojeabAQrBqSG5p7mFkUMCI9YPGwSS8qMxChrd3EynmIrfVyUFXG0W?= =?us-ascii?Q?OlgwLD7lRqkZXhYtUxoPYQZPndXyJ3pz4KAuTLr3NTwTpfGp65FP85gZoArW?= =?us-ascii?Q?Jea9IY4iZfdtbbScJWtMeD88LjzTgFId26veWAw7tw71zKdeH5Tvk7wl/mhq?= =?us-ascii?Q?cWpfCfP1mmmEUU9JzLkvkTEKncZXVRMfK8RelQcyVr7KM0DnAwDlSe24Kggf?= =?us-ascii?Q?m1iQChFrfNOI4IWe16zPUuGdV5/aexR/y+OLnl292ISImwphHe/rxYookCu+?= =?us-ascii?Q?5922lNyko+B9fn/8271M8t9wfU8a1xpN/+om+8/Qz94VkcUP7XyYPbfLLjrN?= =?us-ascii?Q?dhb0sb3FKwnzvHqAAhRDV5+vLssDRuqyWHYCDxnWOcxRDoL29hb7r3boYsuM?= =?us-ascii?Q?JVIj5c7ciaIdA3h0Gj5b0OF2ASYmCxs8j4Pd5Lqu9N2KhSecESFsiO8EcBLj?= =?us-ascii?Q?eMq/82btWNOsTok/3T0h02XJgTAfvWfuiD3RQTvbAPSpEazHFk5I?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f9b0c928-b05f-4665-bcea-08ded2d211eb X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB7135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2026 15:54:42.1776 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HFlbkf3BPezo1/2DrDLrBQNAVKdd1BjsctexgpNYhquysDmHJ3iE8BzDmOFXJlkCzMQsY/m+YieQ1uJ0JfsdMErgQN5snEG0sFDrlADJ9xZv/0yT7GA16MFE+1dYsM4q X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB9812 Content-Type: text/plain; charset="utf-8" From: Shenwei Wang Describes the gpio rpmsg transport protocol over the rpmsg bus between the remote system and Linux. Signed-off-by: Shenwei Wang --- Documentation/driver-api/gpio/gpio-rpmsg.rst | 271 +++++++++++++++++++ Documentation/driver-api/gpio/index.rst | 1 + 2 files changed, 272 insertions(+) create mode 100644 Documentation/driver-api/gpio/gpio-rpmsg.rst diff --git a/Documentation/driver-api/gpio/gpio-rpmsg.rst b/Documentation/d= river-api/gpio/gpio-rpmsg.rst new file mode 100644 index 000000000000..7d351ff0adb0 --- /dev/null +++ b/Documentation/driver-api/gpio/gpio-rpmsg.rst @@ -0,0 +1,271 @@ +.. SPDX-License-Identifier: GPL-2.0-or-later + +GPIO RPMSG (Remote Processor Messaging) Protocol +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +The GPIO RPMSG transport protocol is used for communication and interaction +with GPIO controllers on remote processors via the RPMSG bus. + +Message Format +-------------- + +The RPMSG message consists of a 8-byte packet with the following layout: + +.. code-block:: none + + +------+------+------+------+------+------+------+------+ + | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | + | cmd | line | value | + +------+------+------+------+------+------+------+------+ + +- **cmd**: Command code, used for GPIO_RPMSG_SEND messages. + +- **line**: The GPIO line (pin) index of the port. + +- **value**: See details in the command description below. + + +GPIO Commands +------------- + +Commands are specified in the **Cmd** field. + +The SEND message is always sent from Linux to the remote firmware. Each +SEND corresponds to a single REPLY message. The GPIO driver should +serialize messages and determine whether a REPLY message is required. If a +REPLY message is expected but not received within the specified timeout +period (currently 1 second in the Linux driver), the driver should return +-ETIMEOUT. + +GET_DIRECTION (Cmd=3D2) +~~~~~~~~~~~~~~~~~~~~~ + +**Request:** + +.. code-block:: none + + +------+------+------+------+------+------+------+------+ + | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | + | 2 | line | 0 | + +------+------+------+------+------+------+------+------+ + +**Reply:** + +.. code-block:: none + + +------+--------+--------+ + | 0x00 | 0x01 | 0x02 | + | 1 | status | value | + +------+--------+--------+ + +- **status**: + + - 0: Ok + - 1: Error + +- **value**: Direction. + + - 0: None + - 1: Output + - 2: Input + + +SET_DIRECTION (Cmd=3D3) +~~~~~~~~~~~~~~~~~~~~~ + +**Request:** + +.. code-block:: none + + +------+------+------+------+------+------+------+------+ + | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | + | 3 | line | value | + +------+------+------+------+------+------+------+------+ + +- **value**: Direction. + + - 0: None + - 1: Output + - 2: Input + +**Reply:** + +.. code-block:: none + + +------+--------+--------+ + | 0x00 | 0x01 | 0x02 | + | 1 | status | 0 | + +------+--------+--------+ + +- **status**: + + - 0: Ok + - 1: Error + + +GET_VALUE (Cmd=3D4) +~~~~~~~~~~~~~~~~~ + +**Request:** + +.. code-block:: none + + +------+------+------+------+------+------+------+------+ + | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | + | 4 | line | 0 | + +------+------+------+------+------+------+------+------+ + +**Reply:** + +.. code-block:: none + + +------+--------+--------+ + | 0x00 | 0x01 | 0x02 | + | 1 | status | value | + +------+--------+--------+ + +- **status**: + + - 0: Ok + - 1: Error + +- **value**: Level. + + - 0: Low + - 1: High + + +SET_VALUE (Cmd=3D5) +~~~~~~~~~~~~~~~~~ + +**Request:** + +.. code-block:: none + + +------+------+------+------+------+------+------+------+ + | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | + | 5 | line | value | + +------+------+------+------+------+------+------+------+ + +- **value**: Output level. + + - 0: Low + - 1: High + +**Reply:** + +.. code-block:: none + + +------+--------+--------+ + | 0x00 | 0x01 | 0x02 | + | 1 | status | 0 | + +------+--------+--------+ + +- **status**: + + - 0: Ok + - 1: Error + + +SET_IRQ_TYPE (Cmd=3D6) +~~~~~~~~~~~~~~~~~~~~ + +**Request:** + +.. code-block:: none + + +------+------+------+------+------+------+------+------+ + | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | + | 6 | line | value | + +------+------+------+------+------+------+------+------+ + +- **value**: IRQ types. + + - 0: Interrupt disabled + - 1: Rising edge trigger + - 2: Falling edge trigger + - 3: Both edge trigger + - 4: High level trigger + - 8: Low level trigger + +**Reply:** + +.. code-block:: none + + +------+--------+--------+ + | 0x00 | 0x01 | 0x02 | + | 1 | status | 0 | + +------+--------+--------+ + +- **status**: + + - 0: Ok + - 1: Error + +SET_WAKEUP (Cmd=3D16) +~~~~~~~~~~~~~~~~~~~ + +**Request:** + +.. code-block:: none + + +------+------+------+------+------+------+------+------+ + | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | + | 1 | line | value | + +------+------+------+------+------+------+------+------+ + +- **value**: Wakeup enable. + + The remote system should always aim to stay in a power-efficient state by + shutting down or clock-gating the GPIO blocks that aren't in use. Since + the remoteproc driver is responsible for managing the power states of the + remote firmware, the GPIO driver does not require to know the firmware's + running states. + + When the wakeup bit is set, the remote firmware should configure the line + as a wakeup source. The firmware should send the notification message to + Linux after it is woken from the GPIO line. + + - 0: Disable wakeup from GPIO + - 1: Enable wakeup from GPIO + +**Reply:** + +.. code-block:: none + + +------+--------+--------+ + | 0x00 | 0x01 | 0x02 | + | 1 | status | 0 | + +------+--------+--------+ + +- **status**: + + - 0: Ok + - 1: Error + +Notification Message +-------------------- + +Notifications are sent by the remote core and they have +**Type=3D2 (GPIO_RPMSG_NOTIFY)**: + +When a GPIO line asserts an interrupt on the remote processor, the firmware +should immediately mask the corresponding interrupt source and send a +notification message to the Linux. Upon completion of the interrupt +handling on the Linux side, the driver should issue a +command **SET_IRQ_TYPE** to the firmware to unmask the interrupt. + +A Notification message can arrive between a SEND and its REPLY message, +and the driver is expected to handle this scenario. + +.. code-block:: none + + +------+------+--------+ + | 0x00 | 0x01 | 0x02 | + | 2 | line | trigger| + +------+------+--------+ + +- **line**: The GPIO line (pin) index of the port. + +- **trigger**: Optional parameter to indicate the trigger event type. + diff --git a/Documentation/driver-api/gpio/index.rst b/Documentation/driver= -api/gpio/index.rst index bee58f709b9a..e5eb1f82f01f 100644 --- a/Documentation/driver-api/gpio/index.rst +++ b/Documentation/driver-api/gpio/index.rst @@ -16,6 +16,7 @@ Contents: drivers-on-gpio bt8xxgpio pca953x + gpio-rpmsg =20 Core =3D=3D=3D=3D --=20 2.43.0 From nobody Sun Jun 28 01:51:27 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011025.outbound.protection.outlook.com [52.101.65.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A0C1438E129; Thu, 25 Jun 2026 15:54:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782402902; cv=fail; b=VLxgTxNCQfUb6CY8kEWtoDPf0WY1xMegp22icCEN+yjQ6PmMjThlhAxzZlH9eW7GhHH26hwjMpNUt/XvBED/Uuau0cH7hXAPE6XJWZtW35G0ARUMPOZyVPTstyGqM9G+PmvQuLDLJITiILYsQ8QfU4DLp0qixW/FAE4lTZL7vMQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782402902; c=relaxed/simple; bh=uT/s0J6zxtK5T3PBQ3GAKxKRPBgmYupnyKKF+WZTZ5o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=cqRowy/1px/xjj1lRV8Sd0tOyvzWagFiGZABgv7ZcNes77I2GlMyqwlHmVuVOgsa0Bbw3VnlyRXtPCqpQICPjqM1u37KaRDgS2JitItpt0gsnlCC/Y2ddo3n4f/cReWDDjsPmlvFk38NbvxS9febybjzsI9UCRMHls8mtQMWsxk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=sVqA0Y/t; arc=fail smtp.client-ip=52.101.65.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="sVqA0Y/t" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wahh3FuIE2+oqcHbPOaZPhyfUdx0gdxYdDwAdP1HvVqdCidW1Vb+O8H0dqjU5NNCgTTOfTL88wKZ6gMahppK3niHQxBuT+kY4EYZgqlyaO2oh8XrnFaWx1CMcUQcTZnybA8ZPH4S530sWR2YhBaxafCu5DYWasxDhL49gEXfiZMK+EUQrgBOOt0OdzCZbh35As9tynKBGoBUtoGd0tSNDMkMNavMnlUz+N2Dk5olKTmXRdUUxzsJl05zta7pC7+pE6iib+YpSJitOmTaOZxPEJiWsRrUGjaVALYBdslb6iNVadEEsAkRWUoBdO26o7Wia9v/xyZRcUQWcFv316uWQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LFfZMcQFLsgsIMHTx+wphYYI1IOCL3rAXhgVzbtu2Qc=; b=QXPoOPrvw83qUhlEDAfXDOXV3N9MIRCpij6VcL2DFxq8g7U6G++r38w6o5h5IP9ONAnldgQWAaf9fbGbfOt5X/gqV/ofux55m19ji8W3QKEbXOpnyVkPKldmBmvrSSOx6QM8SaV95ih7KXMO/vBvCpEAVntMi/qWTQThiXcAO6dXBVTdhyUN5ntmr1B2b6YqZtT5/6pB+s6IBfTR4cLofspux0kOWee6s0/Say7Zubn/yA0D+5X0D9COlN6Ts2pnp0V+ZZGgh1U9HI2RP34FMnnLK/XCxmQg4wbJ4dK4gehy060Tyo4yZZZEXmMhm8Nu7EjuVUhh4xwvFkMcef3UIQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LFfZMcQFLsgsIMHTx+wphYYI1IOCL3rAXhgVzbtu2Qc=; b=sVqA0Y/tAY9B9JkONIphsySKtxu8PmfQXmCNfpkS0MZ1MfE+fkgh3SxYRmZBlIwdxzsq6BCe22xm6HNaA/tci02HaFO+xSjFL1mx5OMrUEpEbF68R6f7X/qbW8ZgUjBgzACxTloLd86ju4QtucZBrZ/8TetdyaMkWzrpxFQ0wBecVylWVjCUl/UDDkkxTsxIG4kTqalx649p+RW5RDB8aY5Fu3FM9gAjtrAeav71ubqvDdWw6VYlqK/k9fZhbA+x44sK2RxAziuuUEbOmCog3Aw9UC39Pw0hNOkfiaDCsgf0kqdg1/d0zPfYCzU/djhshbseruUVHtFD3w3OUz/JfQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VI1PR04MB7135.eurprd04.prod.outlook.com (2603:10a6:800:12c::22) by VI1PR04MB9812.eurprd04.prod.outlook.com (2603:10a6:800:1d2::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.16; Thu, 25 Jun 2026 15:54:46 +0000 Received: from VI1PR04MB7135.eurprd04.prod.outlook.com ([fe80::322f:adc4:8d65:2ba4]) by VI1PR04MB7135.eurprd04.prod.outlook.com ([fe80::322f:adc4:8d65:2ba4%6]) with mapi id 15.21.0159.015; Thu, 25 Jun 2026 15:54:46 +0000 From: Shenwei Wang To: Linus Walleij , Bartosz Golaszewski , Jonathan Corbet , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Mathieu Poirier , Frank Li , Sascha Hauer Cc: Shuah Khan , linux-gpio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Pengutronix Kernel Team , Fabio Estevam , Shenwei Wang , Peng Fan , devicetree@vger.kernel.org, linux-remoteproc@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, Arnaud POULIQUEN , b-padhi@ti.com, Andrew Lunn Subject: [PATCH v14 2/5] dt-bindings: remoteproc: imx_rproc: Add "rpmsg" subnode support Date: Thu, 25 Jun 2026 10:54:27 -0500 Message-ID: <20260625155432.815185-3-shenwei.wang@oss.nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260625155432.815185-1-shenwei.wang@oss.nxp.com> References: <20260625155432.815185-1-shenwei.wang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SA0PR13CA0005.namprd13.prod.outlook.com (2603:10b6:806:130::10) To VI1PR04MB7135.eurprd04.prod.outlook.com (2603:10a6:800:12c::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR04MB7135:EE_|VI1PR04MB9812:EE_ X-MS-Office365-Filtering-Correlation-Id: fe956fdb-9fbd-4291-01b9-08ded2d2148a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|19092799006|366016|1800799024|921020|6133799003|11063799006|56012099006|22082099003|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: xatGkVvvd75OQ22i5ey/C3iwRlCafkFEG5SpYTZ4QNtB/+v3o9dbHVpGA4E5gTpMDQ4ULXUdDzbP1vobDSNpzPijETN3WCLfyI7z4OAgLGSIeGVYRGZ9jjCNVGbYwBz1AHTfro0YC/7lfTIBN83qfjZIF8S6Qu1ZDl1oarzZRa/VzTnjDPs4el7NxmJdsh79aGey4NoeQeRE0hC5kFFjbqQT/W2cmlmHzXSWY015wQvubU6BEO3ljwwxggpgFtsBO8nQT+5/fjT3QuyUB2epke95ytyphlI8ngCei5gDM700hlEU7BENsaLpQhnrZPmXqjlAqCysSuwx7ZQE3/wVLTRQkyoTv0t2gDJjpYMr7sg1yhVZ8b6yIAzWn4tbQlxU5RchwAgyPnLfC8Rf8SPqIfbfhXNXe3HWDfJzhEqs6WGA3IMM4B4sj40/ubzXAAPfoaUXtttM7Uc8sBzQ4jm/F33QE0/Nrc4VstAD+ZEF/vmstplq+D/u3j1LjDpwEA8fLBnEWjx9djrLQpklfeZQMlr9k2P/67Pj86bXd5UH+mC1ML39pV8kDqbupBKbpCpg863bZEKR3/jp5/NKtHMUwiTqIfjsouUfRaSEJWApL+u9ASfIi/pwaqboKJTd/QNa5LAqEoz7Mt7dp9BbiRaEEw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB7135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(19092799006)(366016)(1800799024)(921020)(6133799003)(11063799006)(56012099006)(22082099003)(18002099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?g7GnGu4BzDQbiNeVOvGFopZg7YksCbL3XircUu39ByiZqkY3aIxd3nbqF147?= =?us-ascii?Q?otqvY4siAMcU585j7V0w22nM19sMWRahKzHGI1wmvCARqw68mYCtQxsDd/rn?= =?us-ascii?Q?FbZlCQkdyJ8xCIpTs09fmTk6C7f+iEGAOivGRbOheLf2HTbun2YQ3lXh0M15?= =?us-ascii?Q?t4/PFNR5WrEwx04+Feqk2PVC/ZIURkeaHh6619X00If0Tc/8Qf8NDNeW2cgY?= =?us-ascii?Q?n7y88ebTuEeCFNpOmp4Z9H0HKt3q4e4OHqS44RIUqIiO61vT0G23oApg1iHg?= =?us-ascii?Q?t5PMWN5HqBp45fwdVGJcwgdKKRWgKNgj+37xEtpUWCKFgmL8JNNNTOvctowy?= =?us-ascii?Q?FtWrKXiDAQmHFQy46P6DC+tlrpWlkcMyHQpyka5f0p4EV+UBKnFPpMa6dFEY?= =?us-ascii?Q?OoA+GD6H4c5QtP+BYKzPIJY6ymFi9Al5JKIro/M0ypjYc0wmXzOFalPo37uM?= =?us-ascii?Q?Njj2vel0rdaG+ZY2GI/XkjY1BuisLc/5hIm+5kMYj72dYKWJ9pNYPTdobqlP?= =?us-ascii?Q?1w9axN/MgXde1mhuemf62JU1ZmaEpVgHdwt9HsN1k9kyW1pXsRMmBe1DjFfm?= =?us-ascii?Q?jeKZPL0ZhNPIicm0m4MWFm3fLVpZNWFajuKLXNG+lrL6tO8a8n0lHVzjy4kM?= =?us-ascii?Q?b6C8EE0PodHiNlU5RcKOuTz+DA97ScVyZgJbLJVkGQjTAe5hqIthI472WWxX?= =?us-ascii?Q?bChG31OnDhHXu1DrjXaq67USpno4Im8boz0PNVTP1ZobMxjqctDsGYJRExEC?= =?us-ascii?Q?cdCi0lOZ098pkj4sIbBq7UwlbeotAoo5nDHEejaaF1Cf6LsdhTVHPvk/kvKp?= =?us-ascii?Q?4Vv/hoxIWs4yFgz0xP24OIB+A4D6vNxyDbiVgLFaui3dTCBxVOz506PCC2TV?= =?us-ascii?Q?5gW55TKwOmqf06SMRVRQOSrMeJehbKY6n+TLzSmsvoUAZn7y4U6QdDz2owjs?= =?us-ascii?Q?V2xe4ELejHqRfCo2jCtN6ckU2WrG3jsUK8F7vB96EYCd4yB3EfBZAgcXnvR/?= =?us-ascii?Q?nEc7CcRYCmvR22tvjSrhBIzu0riKeWB7XtOUxmYROwXaQKVH4df0nkK+96fB?= =?us-ascii?Q?0zgaNDDzwaRXwpafPlo7J2QLV3kEzxb5sUiNqHoH8ov6AVvqvi1WGSxk55Wl?= =?us-ascii?Q?6oxW8ordkj3fEls5ZC3K10QcTIRd21Gs5Wj2hqNcuYWmxyJA1o28kbkuNbcz?= =?us-ascii?Q?i4zJClzzDz7Rf5YuVHZ9NlkkyIyizpMwik46k4u+GoAR1gkxUYlhkiH+X3hT?= =?us-ascii?Q?yg6lExLiMQqOg1amb8CMq80kGSstXMq81tM9CtWVv4qnzI0B1ylKNyKp7CED?= =?us-ascii?Q?j8yIPZ6viC0wPkQfvKzpv2dgu5r6ZusK+AQ0yTfLEl0UVbSkyOQSkGU0Wr1r?= =?us-ascii?Q?mYuTVcEn7tLQUZTph6dBMEXZqzAeMX8NVxxCHu0lDZcSXN5xONczKHeRtXAz?= =?us-ascii?Q?ILzD89dFdPEjBa6rm7T0g6HrY/aeTDUuTanfllc2ZE7KbAW+Vm8zNzoekqnO?= =?us-ascii?Q?YSOVS1u9BiUUoUWezzi51S9MGOgo/iHjmDdltsMiuW1ECKt9497UaoPGu4Bc?= =?us-ascii?Q?I6PZA+tsCTEsKfZ/wJXn1xq2WLnZsEJW9vkDA0ZeVf9dHBtlnQNDQIWOy+qm?= =?us-ascii?Q?yBRIeronj2U3XgFO+2zqLsLc6c8vRmiNR1Rd15XE+YjWZ0TbMD9+TBVsRKAy?= =?us-ascii?Q?EKs7tHt/+mErKEPRazS1Fw+kl5jQJ2+VMOZuSApt+vsRMwMGWGuevvwNTvFi?= =?us-ascii?Q?XMD7nkwQiuiMjJFUdOFVKkQVrHEAyb0iWI1fCL/ZD+SLa3Aq6XJW?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fe956fdb-9fbd-4291-01b9-08ded2d2148a X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB7135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2026 15:54:46.3958 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bczUmiz8e8xUC4dvXt7wRmAFvNo9xDfdISnXahCFmydIsFhZxGMBgza8bJhk02kE7DCNMV7DvnqbSV31/q3Mmgm/Q9PDH92pov1zm5z8mhPaHvqwJGXYUoK/O4uXaqz7 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB9812 Content-Type: text/plain; charset="utf-8" From: Shenwei Wang Remote processors may announce multiple GPIO controllers over an RPMSG channel. These GPIO controllers may require corresponding device tree nodes, especially when acting as providers, to supply phandles for their consumers. Define an RPMSG node to work as a container for a group of RPMSG channels under the imx_rproc node. Each subnode within "rpmsg" represents an individual RPMSG channel. The name of each subnode corresponds to the channel name as defined by the remote processor. All remote devices associated with a given channel are defined as child nodes under the corresponding channel node. Signed-off-by: Shenwei Wang --- .../devicetree/bindings/gpio/gpio-rpmsg.yaml | 55 +++++++++++++++++++ .../bindings/remoteproc/fsl,imx-rproc.yaml | 53 ++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 Documentation/devicetree/bindings/gpio/gpio-rpmsg.yaml diff --git a/Documentation/devicetree/bindings/gpio/gpio-rpmsg.yaml b/Docum= entation/devicetree/bindings/gpio/gpio-rpmsg.yaml new file mode 100644 index 000000000000..6c78b6850321 --- /dev/null +++ b/Documentation/devicetree/bindings/gpio/gpio-rpmsg.yaml @@ -0,0 +1,55 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/gpio/gpio-rpmsg.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Generic RPMSG GPIO Controller + +maintainers: + - Shenwei Wang + +description: + On an AMP platform, some GPIO controllers are exposed by the remote proc= essor + through the RPMSG bus. The RPMSG GPIO transport protocol defines the pac= ket + structure and communication flow between Linux and the remote firmware. = Those + controllers are managed via this transport protocol. For more details of= the + protocol, check the document below. + Documentation/driver-api/gpio/gpio-rpmsg.rst + +properties: + compatible: + oneOf: + - items: + - enum: + - fsl,rpmsg-gpio + - const: rpmsg-gpio + - const: rpmsg-gpio + + reg: + description: + The reg property represents the index of the GPIO controllers. Since + the driver manages controllers on a remote system, this index tells + the remote system which controller to operate. + maxItems: 1 + + "#gpio-cells": + const: 2 + + gpio-controller: true + + interrupt-controller: true + + "#interrupt-cells": + const: 2 + +required: + - compatible + - reg + - "#gpio-cells" + - "#interrupt-cells" + +allOf: + - $ref: /schemas/gpio/gpio.yaml# + +unevaluatedProperties: false diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yam= l b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml index ce8ec0119469..aea33205a881 100644 --- a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml +++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc.yaml @@ -85,6 +85,34 @@ properties: This property is to specify the resource id of the remote processor = in SoC which supports SCFW =20 + rpmsg: + type: object + additionalProperties: false + description: + Represents the RPMSG bus between Linux and the remote system. Contai= ns + a group of RPMSG channel devices running on the bus. + + properties: + rpmsg-io: + type: object + additionalProperties: false + properties: + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + + patternProperties: + "gpio@[0-9a-f]+$": + type: object + $ref: /schemas/gpio/gpio-rpmsg.yaml# + unevaluatedProperties: false + + required: + - '#address-cells' + - '#size-cells' + required: - compatible =20 @@ -147,5 +175,30 @@ examples: &mu 3 1>; memory-region =3D <&vdev0buffer>, <&vdev0vring0>, <&vdev0vring1>, <&= rsc_table>; syscon =3D <&src>; + + rpmsg { + rpmsg-io { + #address-cells =3D <1>; + #size-cells =3D <0>; + + gpio@0 { + compatible =3D "rpmsg-gpio"; + reg =3D <0>; + gpio-controller; + #gpio-cells =3D <2>; + #interrupt-cells =3D <2>; + interrupt-controller; + }; + + gpio@1 { + compatible =3D "rpmsg-gpio"; + reg =3D <1>; + gpio-controller; + #gpio-cells =3D <2>; + #interrupt-cells =3D <2>; + interrupt-controller; + }; + }; + }; }; ... --=20 2.43.0 From nobody Sun Jun 28 01:51:27 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011025.outbound.protection.outlook.com [52.101.65.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2BD2A3A7587; Thu, 25 Jun 2026 15:55:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782402909; cv=fail; b=Bm2M2Tp8oVszDlQLaNmHKRUUTM04diJL9RQhkK8u76uuLrMqf6h8xVXPfz2PdVAL1WdsJ1H3qpXHG5GiLNAe1I/a73cC9k3RJYpSOgqbbXOPqKNRQhFm7UmndeZcxY+ftaE/msNIlJoVe4kryosjH/TkIZCQLckashvajwYuQqg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782402909; c=relaxed/simple; bh=wWOwgajAmZlhTCoajKBeqMJ55CF8tjhU1fbCVxO6zR4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=c4yQTdf6u2fukdtgoIyeEVaF+anRVdy5te5ufCRm9ncACFvxs0yn2/Hw7y9vGiNuQ7dQMXWoHyAQd7EsuW9HmX45GElyjWMfTXQmGGZ5oljkv8iLHIzav22xQ1gu2LCeh+asI3kDHVjn8PIng8Pnp4qErp4EAWA7MxrrMYUcC4M= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=lPjyfR9c; arc=fail smtp.client-ip=52.101.65.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="lPjyfR9c" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DELZlFxqvdJEFQDg2uHQgmWCfxf57ltCFwNRT3a1JKiUvvpY9BqjVa3dxiJPtAPMfZG7jQMJqu10mnNZnruUJ6sEJn68HgRGJdx8+q0kx+0Iri2jAFmSGDsmcP7++pOsTLByVkcpODUxIXWrPUcRUB1TivtWkfeS1Ev3LWJqouotGv3t16xvGeO6AeitObealjjbDh9lDPZBhVSUq7D/Pux8EHzQOB2VGt6TVNxT0Ef4+kuq/IOBxXrlIpFM26GFBn+z/eAhYpr72SSYAJcibEGFnAN+/8mSJTOQ0zVF7tU9LH9zHZKvDs/3ZeeuvbkFVscBt+J66kw0Px3lWzf/1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=E7+0mRJlpvLSO7h2VImKXSnicHE+7r0USCrBx7CDipo=; b=UVkRj11HvmeLs8J8dxNnfwNtuFst+VV0bXeAuDY5Dyh1qLs+/PG56EZ3rkXYsYTSf8d36s2ogxh3Xfx+eNjdIlp1ByyHOWmZU/zW6uq1dcWyirUnWo4z8k4VZGzDxpFiRKkOZEFm8tZKYXc0qsCegMvdUAgFAkFHjOMiczRujwgrpVLzBZPcCHREHyiyCrbA8oeaQBxEn5LfOYROYWLTnRmUlfpCD9+8yweikfCpud+8oCQzN+Xzi2Ea/Ctg5/tpsj4OoG0tYNBH6r6V0ajszbrhFSCvQauxGkz/nFaou+zO9DUQRmTNV0bfND3J4/5Szt8SFkLWfnhxkd5RnZ9JmA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=E7+0mRJlpvLSO7h2VImKXSnicHE+7r0USCrBx7CDipo=; b=lPjyfR9c0Y56dbbvxNPQXbZCUStZ5TH1VQB5gNskYljXN5yfV0x3rXqfl7rHtqIpKurdPo39FZVwExsl6gCxPihpfLxLth/3Go4ox729kMT+QT3jh2i2h9AbDSPA2U8OhJZiFymSSqFK2yPVG/5u+hJI1TFQdVgdRoAcXCpiN1vnqbgIhrrVNhxqVk4vBgF4w6GXZ5gQFoTyAJsiY/AlcCgWsb19nx6AWcj0t/f4JoWd42dpXkre5J/eAbdfC8uDV43MtDph+LCHl3K4yiSfP/rdpqMTOcGykyaCb50e1ZNJcbv9Ktn74+kOw/8fqih+DevdGpHiwpOCU4hPwGYFUA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VI1PR04MB7135.eurprd04.prod.outlook.com (2603:10a6:800:12c::22) by VI1PR04MB9812.eurprd04.prod.outlook.com (2603:10a6:800:1d2::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.16; Thu, 25 Jun 2026 15:54:50 +0000 Received: from VI1PR04MB7135.eurprd04.prod.outlook.com ([fe80::322f:adc4:8d65:2ba4]) by VI1PR04MB7135.eurprd04.prod.outlook.com ([fe80::322f:adc4:8d65:2ba4%6]) with mapi id 15.21.0159.015; Thu, 25 Jun 2026 15:54:50 +0000 From: Shenwei Wang To: Linus Walleij , Bartosz Golaszewski , Jonathan Corbet , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Mathieu Poirier , Frank Li , Sascha Hauer Cc: Shuah Khan , linux-gpio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Pengutronix Kernel Team , Fabio Estevam , Shenwei Wang , Peng Fan , devicetree@vger.kernel.org, linux-remoteproc@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, Arnaud POULIQUEN , b-padhi@ti.com, Andrew Lunn Subject: [PATCH v14 3/5] rpmsg: core: match rpmsg device IDs by prefix Date: Thu, 25 Jun 2026 10:54:28 -0500 Message-ID: <20260625155432.815185-4-shenwei.wang@oss.nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260625155432.815185-1-shenwei.wang@oss.nxp.com> References: <20260625155432.815185-1-shenwei.wang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SA1P222CA0181.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:3c4::28) To VI1PR04MB7135.eurprd04.prod.outlook.com (2603:10a6:800:12c::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR04MB7135:EE_|VI1PR04MB9812:EE_ X-MS-Office365-Filtering-Correlation-Id: 2448b260-13f9-400d-a064-08ded2d216df X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|19092799006|366016|1800799024|921020|11063799006|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: BMwZgGxBqATHqk6UoGidQvyqzewBuE3TqMR77yNxAnjYU0wlale3LlXtcZhEc+AvfOju941CNfwWNz96+N+MPE7+q9CpTFMC/fNpwzp35vIjxnUBa3mppUF/wTXD3o3lVQK3ysul4BE9kdFzrEhAoqkPozLWxgcUVUWkRe5mYt/I7GDRFJ8qPIob5gjdpFUt1anBLO66p3yD6czhPjleDJ1G3kVk9LPm0s/hOLr3yNmEt3ttVf8IKoHoo73K1JscAgh2Oo9t8r6LyWrzQ1ci1M/6N8aWZ1lkpzG1YvcTHgvRMEEdR7rG3Zk8ksDnMK+BJvDrOeKxQ/+mKCFun0LP8DLUaTfSi2CtE18vzCHIBIA4N8365TGErxUU3vJD2drLCC3UYMJ2FJiH8voCzEADFMF5kErHzIG7d2gi/yBnp6t4f/V8Ri+6wVkhQj4fZzG0Qi7yQROq18KLAQWL78PEDpnOkOXCFx9eTsXs/RpX4dBFX6H7DR8F2DkNS7OPQZuItUvFsrPw8OF3F6QNLSSEtmSKv2fowsLVZIVx775Kl5FXqFQ+CA+mq387863hMolypF6GAhSWqN/HkV3fcXw8skj9Wpqho80fPtnWcjfZ2Ds2VBK7h8r9o6VIwShcrg3g3AfcAqb72VXGPiZxZDCsjC4tqduCB2sTuP4BCCsvfvLjHUqmNYxZwp2jPWcsAgfAHLQI8QhqmsTr25FqX9drFg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB7135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(19092799006)(366016)(1800799024)(921020)(11063799006)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ILi4Ih94hI3xhnEDMkBp4dfmBIvq5TPCaG7ZwUBOaZirGoDG/7s00e7NyFq/?= =?us-ascii?Q?7knNFg+2kWFpjX8gzbp7Kz7Wjl7GQq9U5yZCGO5gAvRMp0GwuJsQvhlQIKcl?= =?us-ascii?Q?hJrPJCbEjmb9s3gaQCGZbVkQ0yC8XTAIovV85P6FeszCdDs1NeR8FlkJ3omx?= =?us-ascii?Q?MaHTSYiR0WSoVGNmmzafw8htQ6j1Nzo+JosBfJoac7vYnUZ9xVJXSo6jRKOm?= =?us-ascii?Q?KM3NeBavav6drUfL3DL0Bv9abWdfH2rwjHfNoemjNSfKu0i5f8FeQF9kRcpl?= =?us-ascii?Q?X18+7xg3YlKdbrHLGXkeWCT4815IVC2CIEcXUmKFr8xx0Q0bOpZ4QfPUbtds?= =?us-ascii?Q?EIT4xCPYh/QSm76n45fVb0r5qgxbxPSZesuP+3LI/Urn7fjTn/pLth866N9n?= =?us-ascii?Q?lEaYi9h5wWl2xMqRNoA14xnptLd2uWgj5iRaRlVe2up/qQDd83WKEqeQ7iIh?= =?us-ascii?Q?TFozdtcJ5VVWb63XW2+jOWOquP9W74O40KtW6w3+go2Msmym0rGYVLYVaWno?= =?us-ascii?Q?I3H4u8rDJE6zRgqFwNhdrg+Ej3M14r2HhPl3S+LX+MTFFVeSaARBCXNLCMXG?= =?us-ascii?Q?+fz2oZEdg5JCp3PSH/QmOfXOmraJNikTCdYV+s8O9imO30MMXJlKttBquUdp?= =?us-ascii?Q?92OgJCIzWY9p1VLLVCCxxJv0c79cgpGXJowffTHg++vP1HPvaEZwFYLamgHd?= =?us-ascii?Q?zlJYUtVlzRQ5/8DGVkM9RVkGrlFFGnjmuKH7/ydCsrTrwjsnojdV2w0Qg/TW?= =?us-ascii?Q?featFOWQR2FspjNLQMV5WVnFid4XKW6lclkMA2DvCfiUssSBHhA6htfA0hzJ?= =?us-ascii?Q?j8QZUdV+P+5Ggs7aCuvNnhPYNMqclZzAF4r5WPVwe7zZletB0JXVLZUPG0PQ?= =?us-ascii?Q?FB+eOQbPRej6asCXQ9W5r26f27DKPbL+b1gNRpOK8KBhL7J/xTM1HadVMhhG?= =?us-ascii?Q?AJ5Nqp7upnMG9QIdTNy6xOVTMt3ax+tc1RD8xM9tkMgoZZZr6jAoc2EoGWXs?= =?us-ascii?Q?HQvGbM+PSUqAYKbDAHFp7b1Ft6AjUX2u810/GUI1y3caeE/Kj83BMOC84Us8?= =?us-ascii?Q?geA/PqQTPOLhWaBbC/QxmzBKONHxMQewfE0lwzJ9oijJxVGBejmf04KNCkrJ?= =?us-ascii?Q?448GxeuomA7x7ECDNYHPd3IKvDHqcl57J1Z7uPOhYDRn+OlPDb8bQtrVv+Uo?= =?us-ascii?Q?UO3W2jpAcKyd61h01YsmycHzJnAcox2TRC0USwxMe/xX0t8V7MAYLZ2Ve5Td?= =?us-ascii?Q?kHHZkhu34FcXGJOuu0cehCeujNAZO+QU6purBYHcmWDc7H3Q8poApWT/hOK6?= =?us-ascii?Q?Xz6GyFV9pev0Ne7jpC8GOIjlfQDqzf+jRL1uD3dCrHaazsB0ILYLqco4M656?= =?us-ascii?Q?iSGAhRCRKMt6UKWnQJIgg8xvMYEuVXcd9kFqjIqR/FoahMFSoGT4rLc3JWop?= =?us-ascii?Q?ijXzixnzC0nb8XQTgn85c+FnTCRQc2FA/l1wFwnj3s/JHWqpGIMGmXAYZ4NH?= =?us-ascii?Q?iSdgPs5o8hZrI94StbkExMGZJwenjQq3CtYYkFwb7pNwppeSlsQt8RJ0sW40?= =?us-ascii?Q?PeJu54J9EzG9r38vcntnvsN3pqTEr3XbuGXyhT1AR51+9OD0EjvZqTtQ05In?= =?us-ascii?Q?cy+RD2M+bVs2CrIu716SlKFr/kZMgqLKxJKjaI1aox5R2V69gTHcL1KdGbuR?= =?us-ascii?Q?WmcljOHfxnWNTkbPgnKmjgDWw9yc96x62CSFRWTFwKdxBPIY8yRq75fY114z?= =?us-ascii?Q?kZ7yxPczhvIXoB5lNdVDwXqGrdJnQMZk5xgDTnueudHoRmP9iaOS?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2448b260-13f9-400d-a064-08ded2d216df X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB7135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2026 15:54:50.4570 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4G20Qhns9lRr76fxO35bmxbykEmuWlvLuze+sUExVizRfh0307hBTybzYPfsYmLIGvb1D4RZDpvBR+Mn+1ZBw+75EtNegs6OrLs+bbJQMhHwCDWQ/roxyXuPzKIOf6iX X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB9812 Content-Type: text/plain; charset="utf-8" From: Shenwei Wang The current rpmsg_id_match() implementation requires an exact string match between the driver id_table entry and the rpmsg device name using strncmp() with RPMSG_NAME_SIZE. This makes it impossible for a driver to match a group of rpmsg devices sharing a common prefix (e.g. dynamically suffixed channel names). Update the matching logic to compare only the length of the id->name string, allowing id_table entries to act as prefixes. This enables drivers to bind to devices whose names start with the specified id->name. The implementation is copied from a reply by Mathieu. Signed-off-by: Shenwei Wang --- drivers/rpmsg/rpmsg_core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c index e7f7831d37f8..f95bfc9965d4 100644 --- a/drivers/rpmsg/rpmsg_core.c +++ b/drivers/rpmsg/rpmsg_core.c @@ -414,7 +414,9 @@ ATTRIBUTE_GROUPS(rpmsg_dev); static inline int rpmsg_id_match(const struct rpmsg_device *rpdev, const struct rpmsg_device_id *id) { - return strncmp(id->name, rpdev->id.name, RPMSG_NAME_SIZE) =3D=3D 0; + size_t len =3D strnlen(id->name, RPMSG_NAME_SIZE); + + return strncmp(id->name, rpdev->id.name, len) =3D=3D 0; } =20 /* match rpmsg channel and rpmsg driver */ --=20 2.43.0 From nobody Sun Jun 28 01:51:27 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011025.outbound.protection.outlook.com [52.101.65.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 691C73AC0F5; Thu, 25 Jun 2026 15:55:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782402917; cv=fail; b=thPmVAvnVefxd7D/jatCvXu7SgSyiw/Ou1jAd4KbUda+CK6ELgfaeq6EaKSWFmlSLiWwkDZjC0g2cWKYrO6AdzPWRY9kIQ1hXht7KqgG55NBSdNOqikEd97Y2LCbkX2kMPNmhq9AuMEkGMQDxGDHewT4qGb8xjBYsJJtpFpuEHA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782402917; c=relaxed/simple; bh=vTNrdpbNiN4seGydM48GH35mKWrR/cvxAF92t8Yxjdg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=EB+FG6bMmN2WzBNr/hOvnkCrkK2L1GkFms7tbGtPUDJ2CYFGIbHUPxc+t5+gmn3D2pR2C6D53TfTnNsLIHE+/xO0ZnQrHRzrFK/xvUAc+NqJ4V25V4V9k4cT4JzWscy7PxfHLVzDDQ5WmE9I28wj86Lj+SVAmvofVzDB7x8Bcxc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=jlkTRg6T; arc=fail smtp.client-ip=52.101.65.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="jlkTRg6T" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=s/0uZCLAvTJmZA8AWWezDuR6fzJ03LObrhLRKfFwPjuprayjNL7jcuRDdQ4qHpSZjIDUSsXe8wPJ7KgGRDVtw2QUVnEWT2GYwVtuzAjF307HALhy8kStvDuSIPgf9x/1NF/nDA89mKa9ROApYR6xK9MuKePHKxiOtgixEj5n2OX0NN+DYJXUhQrLSCgqBLhU1ejknEMZLZAwpgBwOk2rFcOo55pd6TvaIg/97G0EeIrSb97bK1V+22Df0DRkw2uqj/w+emn1T0RxfSSSArFhTiG0EDDzwhElSnxdjp0d3dbv+T3YW6bMP+IFe5yTMS/LUZwLV7hbAAZ++YiUkDz3zA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wMf2c9sojrLqDjbz4i0r+AVVCu5krY6nmmowztdEUAA=; b=rzjv9v0MN3/sIbEzGPWJRsSuuw6PEtMYtzcoXrp66mypyXY0tlEznV54xsY3ofQI1v2dPBOu0E6CxH7NUfgTnXxdpi5XFDdpvIG2XdWrJ2vx8oKthNsHneBpO0KsgokDl7MMValZmtwqGMNGsmAcQ8RLW0w0Sly/bthvbRr6r0uwNUWjmeaA4acms0svpqBO+Asb5vYwLj3GjEI7aeZoAIsQYcsgQOKdeZvbTe3wq+ILL0uKmnDihGC19F67iNLX7T+9IdWr8fc1JLWo5zTyGU9RQyHddrGwLc7pujv+YUisYcg3FvYMnHO55Lkxv5aXelmR9ARZTPCqeX6Wnulw/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wMf2c9sojrLqDjbz4i0r+AVVCu5krY6nmmowztdEUAA=; b=jlkTRg6T8PqxTuvaVXE3TZgua+kjirwCCtiFr1K2X+jq7HKmfIiqNhuAFxeD22ETHRjgWKhwNsi2bx9yQaxJb/NezU6i+gEUXQzvQBFj07N8SzpHzyDs+nwmrte1nRVSZpnPwGR7RIKkCYs24HAu6Idle5wJY1zY8+7Aq7N/dSYJ4niETF8lG0uvjFZRpD80lQztWVHeozSvNv1xP+dacIIXz3elRWQzOi/j0fWeQKngz8J04p51MEaqo/z1szMwKe5hGf1MiyJZ7OmC1IL6cWSuCO5ctfGBSjHIKiAOQo/BFrTaLCGtqYzA0AD1zR39gvrwlq6zIOyZqFKcWry2Yg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VI1PR04MB7135.eurprd04.prod.outlook.com (2603:10a6:800:12c::22) by VI1PR04MB9812.eurprd04.prod.outlook.com (2603:10a6:800:1d2::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.16; Thu, 25 Jun 2026 15:54:54 +0000 Received: from VI1PR04MB7135.eurprd04.prod.outlook.com ([fe80::322f:adc4:8d65:2ba4]) by VI1PR04MB7135.eurprd04.prod.outlook.com ([fe80::322f:adc4:8d65:2ba4%6]) with mapi id 15.21.0159.015; Thu, 25 Jun 2026 15:54:54 +0000 From: Shenwei Wang To: Linus Walleij , Bartosz Golaszewski , Jonathan Corbet , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Mathieu Poirier , Frank Li , Sascha Hauer Cc: Shuah Khan , linux-gpio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Pengutronix Kernel Team , Fabio Estevam , Shenwei Wang , Peng Fan , devicetree@vger.kernel.org, linux-remoteproc@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, Arnaud POULIQUEN , b-padhi@ti.com, Andrew Lunn , Bartosz Golaszewski Subject: [PATCH v14 4/5] gpio: rpmsg: add generic rpmsg GPIO driver Date: Thu, 25 Jun 2026 10:54:29 -0500 Message-ID: <20260625155432.815185-5-shenwei.wang@oss.nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260625155432.815185-1-shenwei.wang@oss.nxp.com> References: <20260625155432.815185-1-shenwei.wang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SA1PR02CA0004.namprd02.prod.outlook.com (2603:10b6:806:2cf::8) To VI1PR04MB7135.eurprd04.prod.outlook.com (2603:10a6:800:12c::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR04MB7135:EE_|VI1PR04MB9812:EE_ X-MS-Office365-Filtering-Correlation-Id: 7f87e521-ae52-4df5-1827-08ded2d21979 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|19092799006|366016|1800799024|921020|6133799003|11063799006|5023799004|56012099006|22082099003|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: LNZoTMmtzOWoeP96Zrr95UO9qbox2xajcARBSfC+TXFfrq3IzVowW8gdv2MD+EXG0uIFLpp8ZOcz0WlJwxLWd0aOpOu9vHC28oX7JdPpM2OdWYLMFLUFXjZKEKek0xQQMZYykphCx0lm4tQ9HUmfAaSd1wTphEA0UGyPzvBiK0RHPjXrEtaM1jxOGl1l6CGtz1irZJxE+7ksiRNekPTBMRWv1w2aHsAP7hMUbr4du6D4DOUMtH8gi4Zs8TscrvgimuqfRhqduKGdMBGilh2Oj+BjIlSUpLLD6Isev3P7EzTcE/5DkxqdYClXzbDYV/K6RIJyJ8PSAC6OPGlpBWOLJ0ThKsV1G+Yrl8ZsikI7MY60s1Vl3r4HtQKOQ6tkE3htE3n/rkf3mzpuF8BuuN9tv3EjeSoGNOfCGrOH2NoH+dxFAJPbxM5F54l1fPLBUxE63C0gVtgxrkYezQycUSoSWFS8mdyxyXg1J9PtY7kuOpHjaoaS7VBwcaOAu2OcidywecdT29UeFxoKKzWwRbuOuNmdwGzEDrsKuLgBRvXdnflGdORgp1x4/bLKzIIHxdBxo9qMHQUhTuvHU6vqZI870ev4FZ19ehWEJy0e2mlTPmquCwrApdega+bnEqn5hKl8u3WBrENHzL4EGvZwtGQdG8aS77qOv1rPg2NCkAatE2Qch/E15r3HySkBmzxrL4//WZy+cagFsT8VPSBfuQTmrA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB7135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(19092799006)(366016)(1800799024)(921020)(6133799003)(11063799006)(5023799004)(56012099006)(22082099003)(18002099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?hfzbyw8Mo0Q/n61Sx3LwqVNCjajgTSTSy4YPR309BisMFvhRWwJM3V46CmcY?= =?us-ascii?Q?13c6QILd2/iQxjrcVR4TOuenWEjcDK5aoA5Sd28kmwINNRjdmi+YIGl6iJjO?= =?us-ascii?Q?WEQd9scGM1cPrtjNw+1njDxhyqk9YRPyQPHRVE7FU6xT86dENGmeBfyFG3HW?= =?us-ascii?Q?IU1FCXmwWuHnhEWCWUBPQbxeVPeOlvLoOgDvFw6wrojsKwZ9dckFeN4s3rk6?= =?us-ascii?Q?x1NTAWNkedVP4i+OLyjRS2OPd4Zk+tnrvcS0FMzOkmWicSG1KmlXedB1ZUZJ?= =?us-ascii?Q?lrvZPucCLOTSpKJ6dlDo5bv95uRzR+4x/1Q4+3EgvUnU6gTeoJA/Ryjav9Cy?= =?us-ascii?Q?pry9R7V5xEGvhdRv9ucOHcZWTyuJ8UsQhG1iPfBIIcJDQ5C/kGWj1CFy/9+g?= =?us-ascii?Q?1/mybxz7XNEfukpiMQ7pbj9P4bB0NjyqnLoqKemr6n/HS2LMFTsf/RgJirNc?= =?us-ascii?Q?rjQWTxtCDd5Vm122Jl8koqY6ZoIaiN+VnCqvtBiscn1k9JmugpgkqLlWxsSW?= =?us-ascii?Q?6r6ajmaInOG3YPT2/A6rQ8M5K2Id6B5eS+/8p78/rasr55C2aKLn/G6nlBgs?= =?us-ascii?Q?NHbVQCQgEmP6sK+GdO88TCXrg9RFoYjaK16gpeRSntJEayNG5qH+Jam8m9e8?= =?us-ascii?Q?flgqN536ODRtxbFfpTaL46QKSg7RYCA8be1vQRlcM8EXwZLAfNM8WdpkHYE2?= =?us-ascii?Q?wLWiqdwDwTohWJbEFKuNqCeOzKMn3SZWirh6K+TfnHg7k9kBnl8elPQIxnO3?= =?us-ascii?Q?fcr6VxsUyxwf4qojmm0T8jYJLfFb0wIFfiDLUpRGs5VZN+7M8N474W6VdAFL?= =?us-ascii?Q?WuJyDAcEG4YivP8Qe6VCHmRTJD2OYknXwWkMAUOA6JWyYf79QFZTAYDaAAQy?= =?us-ascii?Q?1UUttfY9n3abif+4ZF4RdW+07cZGfPTT2dykXDM0xONVBxxsokwF8Dp1omnS?= =?us-ascii?Q?jXB7GucoaSaHey+VIthhTe5u7OtPLLNdrX42xoUieu3VzUw4mnSXYndw1f8O?= =?us-ascii?Q?aLu+AyK2jsscM4dx7RuJGzPojAErIifvULYUBD4b6uy9Zdz6acLibBNX9Q4P?= =?us-ascii?Q?XypFHsk0CJ2xaVuCFwOzId4bYUld14QOk/mMXA6Q1ckHN4+sOhY5kxqO3dLy?= =?us-ascii?Q?Mr8wFkBpgiy1w4tBtRt8f7M4LWoXSQPqCxN7DGmKPBDgNXFBX2rOimdP/doW?= =?us-ascii?Q?ImOrC86b4bhZ+BkBcY2sOjdobdHLTrc96WkzlUNNdwEFS5hTG580BABst+1S?= =?us-ascii?Q?ohtcAFJp0hXx2q4x6FH76Fn6nOmXNHDb1IA1sORAv4s8tz/SOcNa0AlnWFOl?= =?us-ascii?Q?caIrlokmN5Ny6stPf6fKMbZQFFg7+vxU+eP3dwNBCcHAQgdr2/a/amkqy7d9?= =?us-ascii?Q?czbhVwEERIZ3GCl5vmQkL24aPlhRpKwBIyxCMPg6qWnK+OEeK1OdBVzRGmAh?= =?us-ascii?Q?9ywvTi9+3mOV4XPZ/v+NBDQgWHmXo6u9nEQu81OWenzwM94JlBK24ang0nbU?= =?us-ascii?Q?e/QtoD/6ULOSS5eY5EhBOfSsbhfcSbolTaguNUGy7Xp7qxf9BH5GjJ9/GHRs?= =?us-ascii?Q?OdWT3qVs2ZMd3peWakdZ3NpYaHKHI73mFgOrr4LgebmPcmTftix1Y1MgFYOL?= =?us-ascii?Q?Et1KJPcWa3DvHToaDeWD3DuN5U2rc8UIOlslMs4ZnfIkndQZHxdtVRfP3Azf?= =?us-ascii?Q?1RNXo8SQyQCA793sW8x6Y1dFBnkaededzu6RxEzTAfABszCwg9f+XMdifXCQ?= =?us-ascii?Q?gBngn/uqXdj7yBi4n6jfNyEICZULRGBc5OmRTxLQxu0iG12OmKJA?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7f87e521-ae52-4df5-1827-08ded2d21979 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB7135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2026 15:54:54.6825 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WI37TGTRSJkfPWHMmNpS2Lk7xspLmLzS93JAnf6zlvKJ4y59DSQW9Gpraklu3I9oWkc/sHgrFUhiSpZG8Y2g559AfdJuoyIb5oe9fuIUCQxxBPZYGfoedM3KYz8seGjx X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB9812 Content-Type: text/plain; charset="utf-8" From: Shenwei Wang On an AMP platform, the system may include multiple processors: - MCUs running an RTOS - An MPU running Linux These processors communicate via the RPMSG protocol. The driver implements the standard GPIO interface, allowing the Linux side to control GPIO controllers which reside in the remote processor via RPMSG protocol. Cc: Bartosz Golaszewski Cc: Andrew Lunn Signed-off-by: Shenwei Wang --- drivers/gpio/Kconfig | 17 ++ drivers/gpio/Makefile | 1 + drivers/gpio/gpio-rpmsg.c | 568 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 586 insertions(+) create mode 100644 drivers/gpio/gpio-rpmsg.c diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index 020e51e30317..4ad299fe3c6f 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -1917,6 +1917,23 @@ config GPIO_SODAVILLE =20 endmenu =20 +menu "RPMSG GPIO drivers" + depends on RPMSG + +config GPIO_RPMSG + tristate "Generic RPMSG GPIO support" + depends on OF && REMOTEPROC + select GPIOLIB_IRQCHIP + default REMOTEPROC + help + Say yes here to support the generic GPIO functions over the RPMSG + bus. Currently supported devices: i.MX7ULP, i.MX8ULP, i.MX8x, and + i.MX9x. + + If unsure, say N. + +endmenu + menu "SPI GPIO expanders" depends on SPI_MASTER =20 diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index b267598b517d..ee75c0e65b8b 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -157,6 +157,7 @@ obj-$(CONFIG_GPIO_RDC321X) +=3D gpio-rdc321x.o obj-$(CONFIG_GPIO_REALTEK_OTTO) +=3D gpio-realtek-otto.o obj-$(CONFIG_GPIO_REG) +=3D gpio-reg.o obj-$(CONFIG_GPIO_ROCKCHIP) +=3D gpio-rockchip.o +obj-$(CONFIG_GPIO_RPMSG) +=3D gpio-rpmsg.o obj-$(CONFIG_GPIO_RTD) +=3D gpio-rtd.o obj-$(CONFIG_ARCH_SA1100) +=3D gpio-sa1100.o obj-$(CONFIG_GPIO_SAMA5D2_PIOBU) +=3D gpio-sama5d2-piobu.o diff --git a/drivers/gpio/gpio-rpmsg.c b/drivers/gpio/gpio-rpmsg.c new file mode 100644 index 000000000000..332e2925a830 --- /dev/null +++ b/drivers/gpio/gpio-rpmsg.c @@ -0,0 +1,568 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright 2026 NXP + * + * The driver exports a standard gpiochip interface to control + * the GPIO controllers via RPMSG on a remote processor. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define GPIOS_PER_PORT_DEFAULT 32 +#define RPMSG_TIMEOUT 1000 + +/* Additional commands beyond virtio-gpio */ +#define VIRTIO_GPIO_MSG_SET_WAKEUP 0x0010 + +/* GPIO Receive MSG Type */ +#define GPIO_RPMSG_REPLY 1 +#define GPIO_RPMSG_NOTIFY 2 + +#define CHAN_NAME_PREFIX "rpmsg-io-" +#define GPIO_COMPAT_STR "rpmsg-gpio" + +struct rpmsg_gpio_response { + __u8 type; + union { + /* command reply */ + struct { + __u8 status; + __u8 value; + }; + + /* interrupt notification */ + struct { + __u8 line; + __u8 trigger; /* rising/falling/high/low */ + }; + }; +}; + +struct rpmsg_gpio_line { + u8 irq_shutdown; + u8 irq_unmask; + u8 irq_mask; + u32 irq_wake_enable; + u32 irq_type; +}; + +struct rpmsg_gpio_port { + struct gpio_chip gc; + struct rpmsg_device *rpdev; + struct virtio_gpio_request *send_msg; + struct rpmsg_gpio_response *recv_msg; + struct completion cmd_complete; + struct mutex lock; + u32 ngpios; + u32 idx; + struct rpmsg_gpio_line lines[GPIOS_PER_PORT_DEFAULT]; +}; + +static int rpmsg_gpio_send_message(struct rpmsg_gpio_port *port) +{ + int ret; + + reinit_completion(&port->cmd_complete); + + ret =3D rpmsg_send(port->rpdev->ept, port->send_msg, sizeof(*port->send_m= sg)); + if (ret) { + dev_err(&port->rpdev->dev, "rpmsg_send failed: cmd=3D%d ret=3D%d\n", + port->send_msg->type, ret); + return ret; + } + + ret =3D wait_for_completion_timeout(&port->cmd_complete, + msecs_to_jiffies(RPMSG_TIMEOUT)); + if (ret =3D=3D 0) { + dev_err(&port->rpdev->dev, "rpmsg_send timeout! cmd=3D%d\n", + port->send_msg->type); + return -ETIMEDOUT; + } + + if (unlikely(port->recv_msg->status !=3D VIRTIO_GPIO_STATUS_OK)) { + dev_err(&port->rpdev->dev, "remote core replies an error: cmd=3D%d!\n", + port->send_msg->type); + return -EINVAL; + } + + return 0; +} + +static struct virtio_gpio_request * +rpmsg_gpio_msg_prepare(struct rpmsg_gpio_port *port, u16 line, u16 cmd, u3= 2 val) +{ + struct virtio_gpio_request *msg =3D port->send_msg; + + msg->type =3D cmd; + msg->gpio =3D line; + msg->value =3D val; + + return msg; +} + +static int rpmsg_gpio_get(struct gpio_chip *gc, unsigned int line) +{ + struct rpmsg_gpio_port *port =3D gpiochip_get_data(gc); + int ret; + + guard(mutex)(&port->lock); + + rpmsg_gpio_msg_prepare(port, line, VIRTIO_GPIO_MSG_GET_VALUE, 0); + + ret =3D rpmsg_gpio_send_message(port); + return ret ? ret : port->recv_msg->value; +} + +static int rpmsg_gpio_get_direction(struct gpio_chip *gc, unsigned int lin= e) +{ + struct rpmsg_gpio_port *port =3D gpiochip_get_data(gc); + int ret; + + guard(mutex)(&port->lock); + + rpmsg_gpio_msg_prepare(port, line, VIRTIO_GPIO_MSG_GET_DIRECTION, 0); + + ret =3D rpmsg_gpio_send_message(port); + if (ret) + return ret; + + switch (port->recv_msg->value) { + case VIRTIO_GPIO_DIRECTION_IN: + return GPIO_LINE_DIRECTION_IN; + case VIRTIO_GPIO_DIRECTION_OUT: + return GPIO_LINE_DIRECTION_OUT; + default: + break; + } + + return -EINVAL; +} + +static int rpmsg_gpio_direction_input(struct gpio_chip *gc, unsigned int l= ine) +{ + struct rpmsg_gpio_port *port =3D gpiochip_get_data(gc); + + guard(mutex)(&port->lock); + + rpmsg_gpio_msg_prepare(port, line, VIRTIO_GPIO_MSG_SET_DIRECTION, + VIRTIO_GPIO_DIRECTION_IN); + + return rpmsg_gpio_send_message(port); +} + +static int rpmsg_gpio_set(struct gpio_chip *gc, unsigned int line, int val) +{ + struct rpmsg_gpio_port *port =3D gpiochip_get_data(gc); + + guard(mutex)(&port->lock); + + rpmsg_gpio_msg_prepare(port, line, VIRTIO_GPIO_MSG_SET_VALUE, val); + + return rpmsg_gpio_send_message(port); +} + +static int rpmsg_gpio_direction_output(struct gpio_chip *gc, unsigned int = line, int val) +{ + struct rpmsg_gpio_port *port =3D gpiochip_get_data(gc); + int ret; + + guard(mutex)(&port->lock); + + rpmsg_gpio_msg_prepare(port, line, VIRTIO_GPIO_MSG_SET_DIRECTION, + VIRTIO_GPIO_DIRECTION_OUT); + + ret =3D rpmsg_gpio_send_message(port); + if (ret) + return ret; + + rpmsg_gpio_msg_prepare(port, line, VIRTIO_GPIO_MSG_SET_VALUE, val); + + return rpmsg_gpio_send_message(port); +} + +static int gpio_rpmsg_irq_set_type(struct irq_data *d, u32 type) +{ + struct rpmsg_gpio_port *port =3D irq_data_get_irq_chip_data(d); + u32 line =3D d->hwirq; + + switch (type) { + case IRQ_TYPE_EDGE_RISING: + type =3D VIRTIO_GPIO_IRQ_TYPE_EDGE_RISING; + irq_set_handler_locked(d, handle_simple_irq); + break; + case IRQ_TYPE_EDGE_FALLING: + type =3D VIRTIO_GPIO_IRQ_TYPE_EDGE_FALLING; + irq_set_handler_locked(d, handle_simple_irq); + break; + case IRQ_TYPE_EDGE_BOTH: + type =3D VIRTIO_GPIO_IRQ_TYPE_EDGE_BOTH; + irq_set_handler_locked(d, handle_simple_irq); + break; + case IRQ_TYPE_LEVEL_LOW: + type =3D VIRTIO_GPIO_IRQ_TYPE_LEVEL_LOW; + irq_set_handler_locked(d, handle_level_irq); + break; + case IRQ_TYPE_LEVEL_HIGH: + type =3D VIRTIO_GPIO_IRQ_TYPE_LEVEL_HIGH; + irq_set_handler_locked(d, handle_level_irq); + break; + default: + dev_err(&port->rpdev->dev, "unsupported irq type: %u\n", type); + return -EINVAL; + } + + port->lines[line].irq_type =3D type; + + return 0; +} + +static int gpio_rpmsg_irq_set_wake(struct irq_data *d, u32 enable) +{ + struct rpmsg_gpio_port *port =3D irq_data_get_irq_chip_data(d); + u32 line =3D d->hwirq; + + port->lines[line].irq_wake_enable =3D enable; + + return 0; +} + +/* + * This unmask/mask function is invoked in two situations: + * - when an interrupt is being set up, and + * - after an interrupt has occurred. + * + * The GPIO driver does not access hardware registers directly. + * Instead, it caches all relevant information locally, and then sends + * the accumulated state to the remote system at this stage. + */ +static void gpio_rpmsg_unmask_irq(struct irq_data *d) +{ + struct rpmsg_gpio_port *port =3D irq_data_get_irq_chip_data(d); + u32 line =3D d->hwirq; + + port->lines[line].irq_unmask =3D 1; +} + +static void gpio_rpmsg_mask_irq(struct irq_data *d) +{ + struct rpmsg_gpio_port *port =3D irq_data_get_irq_chip_data(d); + u32 line =3D d->hwirq; + + /* + * When an interrupt occurs, the remote system masks the interrupt + * and then sends a notification to Linux. After Linux processes + * that notification, it sends an RPMsg command back to the remote + * system to unmask the interrupt again. + */ + port->lines[line].irq_mask =3D 1; +} + +static void gpio_rpmsg_irq_shutdown(struct irq_data *d) +{ + struct rpmsg_gpio_port *port =3D irq_data_get_irq_chip_data(d); + u32 line =3D d->hwirq; + + port->lines[line].irq_shutdown =3D 1; +} + +static void gpio_rpmsg_irq_bus_lock(struct irq_data *d) +{ + struct rpmsg_gpio_port *port =3D irq_data_get_irq_chip_data(d); + + mutex_lock(&port->lock); +} + +static void gpio_rpmsg_irq_bus_sync_unlock(struct irq_data *d) +{ + struct rpmsg_gpio_port *port =3D irq_data_get_irq_chip_data(d); + u32 line =3D d->hwirq; + + rpmsg_gpio_msg_prepare(port, line, VIRTIO_GPIO_MSG_SET_WAKEUP, + port->lines[line].irq_wake_enable); + rpmsg_gpio_send_message(port); + + /* + * For mask irq, do nothing here. + * The remote system will mask interrupt after an interrupt occurs, + * and then send a notification to Linux system. After Linux system + * handles the notification, it sends an rpmsg back to the remote + * system to unmask this interrupt again. + */ + if (port->lines[line].irq_mask && !port->lines[line].irq_unmask) { + port->lines[line].irq_mask =3D 0; + mutex_unlock(&port->lock); + return; + } + + if (port->lines[line].irq_shutdown) { + rpmsg_gpio_msg_prepare(port, line, VIRTIO_GPIO_MSG_IRQ_TYPE, + VIRTIO_GPIO_IRQ_TYPE_NONE); + port->lines[line].irq_shutdown =3D 0; + } else { + rpmsg_gpio_msg_prepare(port, line, VIRTIO_GPIO_MSG_IRQ_TYPE, + port->lines[line].irq_type); + + if (port->lines[line].irq_unmask) + port->lines[line].irq_unmask =3D 0; + } + + rpmsg_gpio_send_message(port); + mutex_unlock(&port->lock); +} + +static const struct irq_chip gpio_rpmsg_irq_chip =3D { + .irq_mask =3D gpio_rpmsg_mask_irq, + .irq_unmask =3D gpio_rpmsg_unmask_irq, + .irq_set_wake =3D gpio_rpmsg_irq_set_wake, + .irq_set_type =3D gpio_rpmsg_irq_set_type, + .irq_shutdown =3D gpio_rpmsg_irq_shutdown, + .irq_bus_lock =3D gpio_rpmsg_irq_bus_lock, + .irq_bus_sync_unlock =3D gpio_rpmsg_irq_bus_sync_unlock, + .flags =3D IRQCHIP_IMMUTABLE, +}; + +static int rpmsg_gpiochip_register(struct rpmsg_device *rpdev, + struct device_node *np, const char *name) +{ + struct rpmsg_gpio_port *port; + struct gpio_irq_chip *girq; + struct gpio_chip *gc; + int ret; + + port =3D devm_kzalloc(&rpdev->dev, sizeof(*port), GFP_KERNEL); + if (!port) + return -ENOMEM; + + ret =3D of_property_read_u32(np, "reg", &port->idx); + if (ret) + return ret; + + ret =3D devm_mutex_init(&rpdev->dev, &port->lock); + if (ret) + return ret; + + ret =3D of_property_read_u32(np, "ngpios", &port->ngpios); + if (ret || port->ngpios > GPIOS_PER_PORT_DEFAULT) + port->ngpios =3D GPIOS_PER_PORT_DEFAULT; + + port->send_msg =3D devm_kzalloc(&rpdev->dev, + sizeof(*port->send_msg), + GFP_KERNEL); + + port->recv_msg =3D devm_kzalloc(&rpdev->dev, + sizeof(*port->recv_msg), + GFP_KERNEL); + if (!port->send_msg || !port->recv_msg) + return -ENOMEM; + + init_completion(&port->cmd_complete); + port->rpdev =3D rpdev; + + gc =3D &port->gc; + gc->owner =3D THIS_MODULE; + gc->parent =3D &rpdev->dev; + gc->fwnode =3D of_fwnode_handle(np); + gc->ngpio =3D port->ngpios; + gc->base =3D -1; + gc->label =3D devm_kasprintf(&rpdev->dev, GFP_KERNEL, "%s-gpio%d", + name, port->idx); + + gc->direction_input =3D rpmsg_gpio_direction_input; + gc->direction_output =3D rpmsg_gpio_direction_output; + gc->get_direction =3D rpmsg_gpio_get_direction; + gc->get =3D rpmsg_gpio_get; + gc->set =3D rpmsg_gpio_set; + + girq =3D &gc->irq; + gpio_irq_chip_set_chip(girq, &gpio_rpmsg_irq_chip); + girq->parent_handler =3D NULL; + girq->num_parents =3D 0; + girq->parents =3D NULL; + girq->chip->name =3D devm_kstrdup(&rpdev->dev, gc->label, GFP_KERNEL); + + dev_set_drvdata(&rpdev->dev, port); + + return devm_gpiochip_add_data(&rpdev->dev, gc, port); +} + +static const char *rpmsg_get_rproc_node_name(struct rpmsg_device *rpdev) +{ + const char *name =3D NULL; + struct device_node *np; + struct rproc *rproc; + + rproc =3D rproc_get_by_child(&rpdev->dev); + if (!rproc) + return NULL; + + np =3D of_node_get(rproc->dev.of_node); + if (!np && rproc->dev.parent) + np =3D of_node_get(rproc->dev.parent->of_node); + + if (np) { + name =3D devm_kstrdup(&rpdev->dev, np->name, GFP_KERNEL); + of_node_put(np); + } + + return name; +} + +static struct device_node * +rpmsg_find_child_by_compat_reg(struct device_node *parent, const char *com= pat, u32 idx) +{ + struct device_node *child; + u32 reg; + + for_each_available_child_of_node(parent, child) { + if (!of_device_is_compatible(child, compat)) + continue; + + if (of_property_read_u32(child, "reg", ®)) + continue; + + if (reg =3D=3D idx) + return child; + } + + return NULL; +} + +static struct device_node * +rpmsg_get_channel_ofnode(struct rpmsg_device *rpdev, const char *compat, u= 32 idx) +{ + struct device_node *np_chan =3D NULL, *np; + struct rproc *rproc; + + rproc =3D rproc_get_by_child(&rpdev->dev); + if (!rproc) + return NULL; + + np =3D of_node_get(rproc->dev.of_node); + if (!np && rproc->dev.parent) + np =3D of_node_get(rproc->dev.parent->of_node); + + if (np) + np_chan =3D rpmsg_find_child_by_compat_reg(np, compat, idx); + + return np_chan; +} + +static int rpmsg_get_gpio_index(const char *name, const char *prefix) +{ + const char *p; + int base =3D 10; + int val; + + if (!name) + return -EINVAL; + + /* Ensure correct prefix */ + if (!str_has_prefix(name, prefix)) + return -EINVAL; + + /* Find last '-' */ + p =3D strrchr(name, '-'); + + if (!p || *(p + 1) =3D=3D '\0') + return -EINVAL; + + if (p[1] =3D=3D '0' && (p[2] =3D=3D 'x' || p[2] =3D=3D 'X')) + base =3D 16; + + if (kstrtoint(p + 1, base, &val)) + return -EINVAL; + + return val; +} + +static int rpmsg_gpio_channel_callback(struct rpmsg_device *rpdev, void *d= ata, + int len, void *priv, u32 src) +{ + struct rpmsg_gpio_response *msg =3D data; + struct rpmsg_gpio_port *port =3D NULL; + + port =3D dev_get_drvdata(&rpdev->dev); + + if (!port) { + dev_err(&rpdev->dev, "port is null\n"); + return -EINVAL; + } + + if (msg->type =3D=3D GPIO_RPMSG_REPLY) { + *port->recv_msg =3D *msg; + complete(&port->cmd_complete); + } else if (msg->type =3D=3D GPIO_RPMSG_NOTIFY) { + generic_handle_domain_irq_safe(port->gc.irq.domain, msg->line); + } else { + dev_err(&rpdev->dev, "wrong message type (0x%x)\n", msg->type); + } + + return 0; +} + +static int rpmsg_gpio_channel_probe(struct rpmsg_device *rpdev) +{ + struct device *dev =3D &rpdev->dev; + struct device_node *np; + const char *rproc_name; + int idx; + + idx =3D rpmsg_get_gpio_index(rpdev->id.name, CHAN_NAME_PREFIX); + if (idx < 0) + return -EINVAL; + + if (!dev->of_node) { + np =3D rpmsg_get_channel_ofnode(rpdev, GPIO_COMPAT_STR, idx); + if (!np) + return -ENODEV; + + dev->of_node =3D np; + set_primary_fwnode(dev, of_fwnode_handle(np)); + return -EPROBE_DEFER; + } + + rproc_name =3D rpmsg_get_rproc_node_name(rpdev); + + return rpmsg_gpiochip_register(rpdev, dev->of_node, rproc_name); +} + +static const struct of_device_id rpmsg_gpio_dt_ids[] =3D { + { .compatible =3D GPIO_COMPAT_STR }, + { /* sentinel */ } +}; + +static struct rpmsg_device_id rpmsg_gpio_channel_id_table[] =3D { + { .name =3D CHAN_NAME_PREFIX }, + { }, +}; +MODULE_DEVICE_TABLE(rpmsg, rpmsg_gpio_channel_id_table); + +static struct rpmsg_driver rpmsg_gpio_channel_client =3D { + .callback =3D rpmsg_gpio_channel_callback, + .id_table =3D rpmsg_gpio_channel_id_table, + .probe =3D rpmsg_gpio_channel_probe, + .drv =3D { + .name =3D KBUILD_MODNAME, + .of_match_table =3D rpmsg_gpio_dt_ids, + }, +}; +module_rpmsg_driver(rpmsg_gpio_channel_client); + +MODULE_AUTHOR("Shenwei Wang "); +MODULE_DESCRIPTION("generic rpmsg gpio driver"); +MODULE_LICENSE("GPL"); --=20 2.43.0 From nobody Sun Jun 28 01:51:27 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011025.outbound.protection.outlook.com [52.101.65.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2E383AB476; Thu, 25 Jun 2026 15:55:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782402922; cv=fail; b=JYRO7AiAyyOxSqeuzw4lBkYK7ICegV+vX9EJfAXUr4QiVgo4KonxjhacjvKmEZ5rzjKT2g2BiBhbGrGWaWx4WX6Xh62LWQtg07m/bCci9W5naBf5j/PYstNfNW4m5LgtMRchlbkSqZ3fz3sFObmuH8TjCbcdAs/lC4rIrCVGUHo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782402922; c=relaxed/simple; bh=rOJ4TsW6mkd27bCvYfk8zbTnxJxa9QRgaqBwcHq6UVo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=SN2rV7a8LmOTeQ/QgE84bK4r6S5qkCzt2xNZxLZwY4ZLbTbNxUIp2q+8u9iL8GTOY6/jUwlr9fPKp/sBKqCCVGZdmeBKiPpYXFHzoZ3chVgWmWgDH+qN7d8hVo/DWIgcFCcS7JJGsZsTPsm22VyiTyYOknkyEtI4B+S+YjEnDSI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=Pff2WPs/; arc=fail smtp.client-ip=52.101.65.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="Pff2WPs/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KBG9hkXIPfQaNy7U2opYsGKzwnMyIljJm+O24gO2QnS9kf/7CSkWvdFtNSdQBjVR4vs8Uf3+fwTw/bFKmjs3sIPOC471kR/ezKotst9mBy3SgHOgBtuuuSFjL+AgGVQVeX+eW/1tbL6gxn06y6ribikA/GnoHd+1hkTz5teZa+S2Y0HGLnFzamh0J+E4SMhIX2MV5F4+LLBPUYtIeYFGoyLOfmKKGxRYUjFlZTVXowczGVnUO/tk3QkL+jTPvkCfPuHiprtBknN2W0JI4/0z6dohjJ6MNeMkBIdPK+aG+hVZC3mPGvGNZvgeYv1xlpbMgsen5cBreqTLOCLkPwuSUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZIRUCQ7GKInNNUZU2tddrif6egyV+j5CN9TUeXWm1mU=; b=fdl6HiwfJA8VBOs89Dky8LnSBPm6ynycAmDp59p/Ve+ocF1ZFAUmdAUWxKswSY9fsOv0gpj35uCZt6x9vuVYwAQ1hBELZZ0KMTGFHHwQ5JxdPdFROb+P0LOPWSYwpzJsgv8NXIucIowEHVEEU2ARO1UvF49jSmRIvfxrljiSkmIxbfbMxI5Rvv/to0u4gEfPbOI8AHLUnBu8qzY2jwXkAUnuHu5n5fNfUGKaosnolAHoFbGC9avetN9RZxuoo9do6pexenIr4RYcZoZzhp0uWZu5rwzhkkOgxpYZWLg/lX56BuHWNQWwfcf4bCg26RT3YjBa6kvTCQBB8nxUxZqQSw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZIRUCQ7GKInNNUZU2tddrif6egyV+j5CN9TUeXWm1mU=; b=Pff2WPs/zs+o1S4tX6IvMTcVoQBURlBByXFDDIlrPyeJBWK8ofmrTGLEy0cvkTVlg6MHxToAI9zzONfYD3HGTOS2Sz8mpV1o+Hrql1Yy6+b9rayy46IP1W+7oTZTIMS1BiTXTbhUJfAPV/ueWqGvnVL8XGuVBQM+3DBhaOy7W2FEBlSGK7xJlZk0qFqL6S4bHtVYcGRwYmw0pYxykblq0n1vyhK/yRgTMYCXskoqGyzm16YKuFAluXV5LqOuO0oLHrJ0eR6Ch3bnp8oLZQJJSphmcA5/1VmOiIjYxjXstpOQOIyLc4cWynjMm0b+5RH67FYRuNM58/AGLwxf52iGCQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VI1PR04MB7135.eurprd04.prod.outlook.com (2603:10a6:800:12c::22) by VI1PR04MB9812.eurprd04.prod.outlook.com (2603:10a6:800:1d2::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.16; Thu, 25 Jun 2026 15:54:59 +0000 Received: from VI1PR04MB7135.eurprd04.prod.outlook.com ([fe80::322f:adc4:8d65:2ba4]) by VI1PR04MB7135.eurprd04.prod.outlook.com ([fe80::322f:adc4:8d65:2ba4%6]) with mapi id 15.21.0159.015; Thu, 25 Jun 2026 15:54:59 +0000 From: Shenwei Wang To: Linus Walleij , Bartosz Golaszewski , Jonathan Corbet , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Mathieu Poirier , Frank Li , Sascha Hauer Cc: Shuah Khan , linux-gpio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Pengutronix Kernel Team , Fabio Estevam , Shenwei Wang , Peng Fan , devicetree@vger.kernel.org, linux-remoteproc@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, Arnaud POULIQUEN , b-padhi@ti.com, Andrew Lunn Subject: [PATCH v14 5/5] arm64: dts: imx8ulp: Add rpmsg node under imx_rproc Date: Thu, 25 Jun 2026 10:54:30 -0500 Message-ID: <20260625155432.815185-6-shenwei.wang@oss.nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260625155432.815185-1-shenwei.wang@oss.nxp.com> References: <20260625155432.815185-1-shenwei.wang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SA1PR02CA0013.namprd02.prod.outlook.com (2603:10b6:806:2cf::11) To VI1PR04MB7135.eurprd04.prod.outlook.com (2603:10a6:800:12c::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR04MB7135:EE_|VI1PR04MB9812:EE_ X-MS-Office365-Filtering-Correlation-Id: 656e9174-4512-4df2-2224-08ded2d21c0d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|19092799006|366016|1800799024|921020|11063799006|56012099006|22082099003|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: b6nOsP+/8qOCJylFPsLVr21iuKxFEcMeGOX40CP/9RWrKhSsuMWfTbjpqygUvnEg8bQTWtHXFNQWJCcGYC+DxeRs9A/3J1Dz+KQrSh1XTPOkdvGWSdcMxhfK4fuWnmHhtvFwgvyrgz9I48f9KqagdxXkX/CxiUkbVkLjGM1OzS1/SSfQ0QcQ61rljwnxn5C+Yhpi+tKI1JkeFrbm8qER4VdRo8KeyNU36q3loYUVAFqYDVnkOMNuxmFHK3VrAzyCdxIVmm4VTx4JAss3z5pq7ubx/d6ctCokppyPKQ/cy9AZW9TUuBN1FgEKL7FENrqVlCrxuQNUB8uGgJn3trFQM1SP0tkwlkilfD6/NJ6POwYhw7/uKzAWq+kbxGj4W1zBrZoz/UKC/TY0J0FpqSsw7sSD/2L7rwxN+7zOstgvnEj8JgrkPx8Oa8z0SEZqhgnhfJD9M0NXyuKSVRzOgP4x46GLahKiB3UQQzUeuEElvrOehQ2vcxtGMx+sQMbUHhfiz1T6R22ytVYzs0WL8Amab4xOgcQ5yvN31XMiTPPHBbv0ybALs/4PHHNfWXC97HRFa7SzlKHZpBSinQUKWwfhOpK1Z5XtW0hy5CwdAxJSIg5/fj3q5OJjjM8ayceOe7yZYSwZ1REgw9pDVQN4GyyjAu+feJuGW2s16vzIuBvTOxOBHabIy91u3/QIDv0bHvOF/94Cf5f3ehU8EnY/NxOpOg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB7135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(19092799006)(366016)(1800799024)(921020)(11063799006)(56012099006)(22082099003)(18002099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?A0POuqLIGWVyuAZCUeRyIfcu42DFYr2Asj8NbE0uA36K8t4NSiD0C56AD2F/?= =?us-ascii?Q?+wfWr8NLtTlJqfqDAdMho8pPF46Y84KNA3GDoOT66s9Mkls/EzOUqn5j3Fh7?= =?us-ascii?Q?1th6j60Nh2sgGLf/HwzIy9TCq9P8n3ZvUO3dQfUJ/IdtwNw8x0gHV6kNnm51?= =?us-ascii?Q?4bTaf7a4+FN4zdszVpdT/5bGgGnk+9958Jh+MMnS7yFkTD8B7ddYScEKhW+n?= =?us-ascii?Q?CrpNvJWjgaCx1SqCbbWr1FuMeV9EVp3Ql/qK8n3O4WcOZ94UVpMwVLnP8HDQ?= =?us-ascii?Q?EkVOLyu1NGti7WLnBCPX4m9AFa8bD33waYZhq2sEPk+0a26KphLb1ep6NO3+?= =?us-ascii?Q?03DQBdfY7GoAPiQXmG6BD/0lnlTLCuhKLEk9ZD4S3QIG5n3pyCjNTVvV01da?= =?us-ascii?Q?J2newspTZ0PJmFfHGEpB4pyz7s6Fmo1ZKtMFpJAAP47cDUPAr1cn/N9M9+6n?= =?us-ascii?Q?uoz1ftE8UzFh/x38kVk4dR/hkpIju4zKEXKFkpeE9I35hYsjuc9mi4RGBPar?= =?us-ascii?Q?yCGzvZnwAGPDwkGSUfieBEIGTFTQA6R0Fi4FzpEpdbUaqWcXkNariHrdx9ub?= =?us-ascii?Q?OXiGLGR9/GzoM9V1ibwYJxLjnkjl+U58+Kj9gYKk4HCGoFMtAxSXaBUzN3gT?= =?us-ascii?Q?C5W69Rgu9K+GyMb/CLpS6Qoaz1flcxmP83k7/Xx6a2ZneenjQjKD3b0pjjNy?= =?us-ascii?Q?5BV0qh4o7S+CKyZv/pV+bvFndRvYh2keaWhd97TKR0c/MASoBaSuIq1Z3e60?= =?us-ascii?Q?L4xQ2SDZEO5QEgCXnIO+iVigi3uRL14uS5saP5Ck3zz3vSv6/PCiskHmwI0+?= =?us-ascii?Q?YGqE3ZT6a1Xb9IHXC3RKMzwxIH9Q/aI34nG076npUi+ld6gdi6xGAEyY3l78?= =?us-ascii?Q?ghw6YtB/7ZuemC7QT8qDj1GcamzztfERLrm5YG5Q9Cl8SZN1Jxs7D733wPUZ?= =?us-ascii?Q?NgZy+VhauWxvoTAPbjbKHMQ9M46qs1oHVEYgStgt3f9De8WFZhUIDzOFKabJ?= =?us-ascii?Q?qzBTiEHlWn0nrYEs8bnoBAPV0eXJ3ShhZE5VDqasBOiAeu1mN9jykKwreIt/?= =?us-ascii?Q?CV9sozzefa9TDt3zpt+S7wPuVfLmHQ07n1rysKw90iDxzylBU/3AGeAHjpih?= =?us-ascii?Q?hfRwRV5wO//m36HICvtSpOW2/4hxZP8IsDh9qd4hEphCoB2Z1HZpAsUCypuZ?= =?us-ascii?Q?d3khEB8KvkX9CS8xfY1o2Ca0UDlkO2Mvn0y8SrVDbNYPI6KuXB7Fr5OjFZkd?= =?us-ascii?Q?4LDsQeEn1jQYniKyjE5k5b79gaN4/jP94JTduYyEd0u78TeJ3uSK7M0Ods08?= =?us-ascii?Q?9oyaEYhZzzJvtUdUgyh5AzIpA5poaDcpTawIpauiceY8TcaqbrjdAG8xER4s?= =?us-ascii?Q?KEwULmMVVWLX9yjVeEyj9rszEGyJTxW99IEFEWrMigcb+xPT17toxGKkwdNX?= =?us-ascii?Q?sI0RDzi++0sHSZ/n5XQAKSyGjbvQLOCDxnhx/vOEoK501PLCI9IM1jt8ToQe?= =?us-ascii?Q?frQTsxNC6jpmSFNhK5qWI6YqHel1QqtRcK5gXvI658ybZD/8nsUPy9+zMkOq?= =?us-ascii?Q?ZZ27jKDZeKlBXzvNdsMN+C5u1G/VQXUMVf3c+56pVg22Xo8BHsSr2dni0Ot4?= =?us-ascii?Q?BC5VPLyIaCSJtReH0I5mRwerP1DH0ILWDKGPdBPC+wvREsk4vEAZILKLp9ZJ?= =?us-ascii?Q?HcCDOzkt55dM+Ahw9mDy2lruh8f/cfuO4VWnOP/N9bKGs77mYiBhKkevNrg5?= =?us-ascii?Q?bXwyPaJf6KZGm7/RZ5+zOyfO+/WTSwC6d5I5ULkzb0jHG8XMPPUV?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 656e9174-4512-4df2-2224-08ded2d21c0d X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB7135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2026 15:54:59.1160 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: b4EOPq1TrBDmODIBDPjBORByiy9kdi6swRszwX+86H8CSPROXGXISOvV2hti73lWbl5BLn8BtkTv+Bn0T0mYkmigyxojvZpyzdMoRhTa4g+ljlMB7Btx7TPn29LXrocj X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB9812 Content-Type: text/plain; charset="utf-8" From: Shenwei Wang Add the RPMSG bus node along with its GPIO subnodes to the device tree. Enable remote device communication and GPIO control via RPMSG on the i.MX platform. Signed-off-by: Shenwei Wang --- arch/arm64/boot/dts/freescale/imx8ulp.dtsi | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/arch/arm64/boot/dts/freescale/imx8ulp.dtsi b/arch/arm64/boot/d= ts/freescale/imx8ulp.dtsi index 1de3ad60c6aa..f1b984eb1203 100644 --- a/arch/arm64/boot/dts/freescale/imx8ulp.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8ulp.dtsi @@ -190,6 +190,31 @@ scmi_sensor: protocol@15 { cm33: remoteproc-cm33 { compatible =3D "fsl,imx8ulp-cm33"; status =3D "disabled"; + + rpmsg { + rpmsg-io { + #address-cells =3D <1>; + #size-cells =3D <0>; + + rpmsg_gpioa: gpio@0 { + compatible =3D "rpmsg-gpio"; + reg =3D <0>; + gpio-controller; + #gpio-cells =3D <2>; + #interrupt-cells =3D <2>; + interrupt-controller; + }; + + rpmsg_gpiob: gpio@1 { + compatible =3D "rpmsg-gpio"; + reg =3D <1>; + gpio-controller; + #gpio-cells =3D <2>; + #interrupt-cells =3D <2>; + interrupt-controller; + }; + }; + }; }; =20 soc: soc@0 { --=20 2.43.0