From patchwork Sun May 5 03:47:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peng Fan (OSS)" X-Patchwork-Id: 1931469 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-NXP1-onmicrosoft-com header.b=juXZNnmB; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=139.178.88.99; helo=sv.mirrors.kernel.org; envelope-from=linux-gpio+bounces-6108-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VX9K91Mp1z1xnT for ; Sun, 5 May 2024 13:39:57 +1000 (AEST) Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id A0048281E68 for ; Sun, 5 May 2024 03:39:54 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7DF1F3FD4; Sun, 5 May 2024 03:39:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="juXZNnmB" X-Original-To: linux-gpio@vger.kernel.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2050.outbound.protection.outlook.com [40.107.6.50]) (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 C456D5227; Sun, 5 May 2024 03:39:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.6.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714880376; cv=fail; b=k9EW6PfURQNbg9vE77O2iu05RtI9jv21CUSfnv0spA7/oijjEVnF/TnhiUZ9gn9A0GnhBYDb9RXE1GIhj2mFQQY+Qo7QQVb2ofFrSne6OKISzCbA/wRt4Q44Eu3DajOCnIcfEtBhIF9PHLJt8VTnko3T4QDOl/SZUTaPmXN7fik= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714880376; c=relaxed/simple; bh=WTZ7YwNm/8WPxZlzkPznE0QEoAFR6b1n1hH0qOGF9Rg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=GD2ffmjPfad6R20aZGraqfiDpuWwYTBGygnQKwUjnknsXgEfXf74uRC+I9vXKNUbHfK3hB4dsOmJi2VROrXJKy6mpHTR94TNfpJENoqs/PcfK6vkK1wfXcgavtLy7E7f1vwmcE4EM5ENKtWk+91s0s5/wWnGrgmr8gF5g6WPKgA= 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 (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=juXZNnmB; arc=fail smtp.client-ip=40.107.6.50 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 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JZOFVrBaTFkJH8NbkT9LCu8zCzUWqq7GgqibgxjoaneOh5FhT+k6iUKd1ZPqt40Suc20Yg54Q4dCajBD6WMOX9gXpFFRV8VosOnagLTpMUsSJkO8yGo/ymt37V5Ipkdmt7QEb17m8joe3bYb9OORpMXPa7w5gMdZnDAXLhLksriEosTzp49Rl91ySd5pJX/vSGx4IQXOUDjOLJzkG/CkPe32GjioBNz3Zt4ZoWOjlvS9qBjofFFTaloUxk+B2TrR20Gbe52csWyZ45LcHFAZhrXn3jxdIBS/mXvcZWfCOlRPRE9Cas9x6gLJ3Ek/HK4+sjNYbBLNX24H6sRs6F+pig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=12DFYM63ULaEgVDZPXt8ffcWw3R7pE947r7KT9S2Pyk=; b=bWLNhJb/MpZKcgRAYdfwptF+eOtwEyjdG2OPJoJGjSKhhwrrE1UHpxRjNQTRDK07ZKNu9mgUE7Iag8BhCC8eDafwQvtfPuqi6Kiuh6uB6j6ULQfC3WfZBvXivsKw1ERcuE49HuuTPZCDqPxnK8tzoBpZ/8MVjiaRLHThLYkPBjauH7TSnJfcccZf+HUxDFPm/n9ZC7g90eNWG5ThI8s5fVDvd12k3hsDLUkA7pv9Ll07g0CP1dn6UFDg3Pdhl07Fihp9CJHLRR2Wirn14W8tUYKitiqmAppVg5aGMk8GaC6wxBK/6QeHDIE2eOdQhhFcZfzKLYRBVOic3oVgFUBq9g== 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=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=12DFYM63ULaEgVDZPXt8ffcWw3R7pE947r7KT9S2Pyk=; b=juXZNnmBgqrL5j4tmdrJ/4AEUkVJ7YAi7AzGy6DnxyIVhGXq6CMjO+1+Tt5EhnvJsAYZWu8uqkyWnaoUAXfhHeRuFTVKH41CcxaHmd/Masfb7NFLXbf1ecvB8pJ/jppa+BOkMJ9AflAneRbcCogHah6vhnnHNfD2YyXzp5RKj8A= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) by PA4PR04MB7599.eurprd04.prod.outlook.com (2603:10a6:102:ea::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.39; Sun, 5 May 2024 03:39:27 +0000 Received: from DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::d30b:44e7:e78e:662d]) by DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::d30b:44e7:e78e:662d%4]) with mapi id 15.20.7544.036; Sun, 5 May 2024 03:39:27 +0000 From: "Peng Fan (OSS)" Date: Sun, 05 May 2024 11:47:17 +0800 Subject: [PATCH v4 1/3] dt-bindings: firmware: arm,scmi: Add properties for i.MX95 Pinctrl OEM extensions Message-Id: <20240505-pinctrl-scmi-oem-v3-v4-1-7c99f989e9ba@nxp.com> References: <20240505-pinctrl-scmi-oem-v3-v4-0-7c99f989e9ba@nxp.com> In-Reply-To: <20240505-pinctrl-scmi-oem-v3-v4-0-7c99f989e9ba@nxp.com> To: Sudeep Holla , Cristian Marussi , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Linus Walleij , Dong Aisheng , Jacky Bai Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-gpio@vger.kernel.org, Peng Fan X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1714880847; l=2762; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=07Om+tiXUr57qz8djpSP7JUajKxdHALgoEKb63kMR5U=; b=4tiUBb7aTdODcvb4F7pK/qnoPD+xZud/vdVr6roRFf/Mln1WG4nZiAZ+tX9vjNQgozw/1vurR OpyO+hteN7SAVOsa0aQNbh4LBJ28y7Lzfe5s6mqhnBAYygbPWgjKPqR X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR01CA0022.apcprd01.prod.exchangelabs.com (2603:1096:4:192::14) To DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) Precedence: bulk X-Mailing-List: linux-gpio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0PR04MB9417:EE_|PA4PR04MB7599:EE_ X-MS-Office365-Filtering-Correlation-Id: 12f5e19b-8ccf-49d8-6a36-08dc6cb4f677 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|7416005|1800799015|52116005|376005|366007|921011|38350700005; X-Microsoft-Antispam-Message-Info: =?utf-8?q?hVvgiWa2W9PP2oMpfrnis+IqDnY0o/u?= =?utf-8?q?2KNAKQudJIE+lp+XrDJp4W1Y7Gspy8VaxZzgLy0WtUByxZd7KRlZW5DLZKmqO0gKA?= =?utf-8?q?/+iec6iFkbYosxPykbVj8Ghdtl6RwzYRxAiVAXAwdM10FZVjEUW8T+ONcQpfiBdII?= =?utf-8?q?iQNWXwF1dSrOsWUcpIf5k+nmTWqQWkfvsjIoSm0TFaOA/mtENmcSia580c99lou2Q?= =?utf-8?q?jl35kWb1zbugqHb0CVebaa3bOOurQvJm6pVB5jNvA4N47TuiP5tq8qtBzjLEHtKeJ?= =?utf-8?q?lThqWzI9HMj26DPMczmdB8R9s8FDO6E4Se2Os2caX+/jjzXnhoVXlHJtz0nH/E7+Y?= =?utf-8?q?822VL3wC6E3+RaKXIAP0CuWbqyXt89MvQ2BDwGhhaeLij8FMNls4cww96wGQmM3dK?= =?utf-8?q?jeVxjSk4AU1TENCz1uJxJf10F998QR0GJsAxHqJgO79ImZPmcjbEr6cxmnmDVBqkv?= =?utf-8?q?3XwsDP7Je+KYNjNHJJ4G1XOev5NXjxFNFabidV0KCswPYEdnf0pGaILaoIF38olR4?= =?utf-8?q?53JDiq3IriPLTmCitihxWciijOzkwKaJlnLkJlMJqCSutRJpqrQL7wFbzriPt6Z14?= =?utf-8?q?Glrp/nhXJ9y9/Y53nvNIkG4/cetWNRy+aR9xaCUoz7qZMTkkdpLx139wMneYd7A/o?= =?utf-8?q?MV3jo9l6we/9t9elJGBfhAcTDF5YxeBP4kuSnHBXv5Iiz3yLiBMXCk9wSrKPvqfxO?= =?utf-8?q?dLGnb9qukzA8k/FAui7AUEP+4R9f2ncDttcGGBt99AtzJHc2J/3Khx1Je6mUurPP1?= =?utf-8?q?j80k9oNyUfyiF1hkUB8rocGJu8Ld/kltVBlVu7fMYYfhIO2Se/V1uinoF46A6ixUv?= =?utf-8?q?tJZRG4HYREK/fpFZVwIqR7nGH2Qoq8tz2XVkdddWquhjzaYaliKlYGmWfYHsu9Mjd?= =?utf-8?q?8Hbj34sF1i8ph5+Zzvae0jTtzmIDBdsEhnf5XqcLLkHmONQeEG5nksUkEH99YrWdp?= =?utf-8?q?O1TIdEcZLDYcjL7Yn9Dpa82F97cC7SupkqzoCE1rMPVZK0y9SZZsrcXM3WmLNyhU9?= =?utf-8?q?HgqnleJScnYjz6emoVM5SJ4Q9AViiDTgj9iObPSawSi/jiW6Mp1jqiinUtqdRQ6jS?= =?utf-8?q?jFL0EJ1sK1CesB6hqNubR4HmidYnQ21tXUsF0Piz8OI0PkaTKRV4eV3bhbr9TUaZw?= =?utf-8?q?PKBnQoSfxsNaxjS1pilKVp4lGduj/M2amPeGUejZ16FC/ngr0y7iQ8dysHs1XROZ+?= =?utf-8?q?11nSzHoGVOzPRUEmYYHC9vq1Vq2CIo5BsYQwYZPaZ0hYat1pFdMkObNaE=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU0PR04MB9417.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(7416005)(1800799015)(52116005)(376005)(366007)(921011)(38350700005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?eu/3qdC0Cb/RcRe4kRPKrxzh8iQ+?= =?utf-8?q?IgOExIAm1zdMwOs8BYmtiIM9I3W7fU1pP4cSTReGawwvgHtukIRz7PmS0BY0LwhFd?= =?utf-8?q?0ztKDLRsRd3XwPueSkZ5wslKCR4JK81Kq6r3kZzBfsV4h9bePRkbj/+Y8ZQhq34YA?= =?utf-8?q?Kaq/PDpOryRmGMPVxC3Z/OoMsHqs+Sz4LaeEVOSzy22qUMAHVm7im+qka3eENuKtl?= =?utf-8?q?vdjkD3PvN3wY1baHz3T34VxMaCVapoiZc9fZv4dA+aTlwcsolbMsFS/UErNT1uqrR?= =?utf-8?q?6woWUXoIOpgGtD/7Ufutf/zHqvmc5mHzCqt/zSIspQtb5NPNDv+YkVK9j+7GY42b9?= =?utf-8?q?jmN7+pfx7gY+VbmNOiOZEKLmo39Xbdk7Ka51W0ySTkRhvjPeOoryjPDzfaXFYU/tW?= =?utf-8?q?Xs8sc05/pEa5ftZZCayV73ErAK3XJsYTiFIqb4C6Mm5D52vR7fDhl3H0gRpoL/tAM?= =?utf-8?q?OYD2yFGKDwVT8AnfzTkEq9YMiwUjjOaRW6XGbs1jy9s9+WcSjwsKYPDpgULWjLEoL?= =?utf-8?q?/NZbZvfVS+y9brsyOZIdSWAxjDRFURWQprTph/C8HWCjvpFn5FxcGVkViPamFlAEy?= =?utf-8?q?Z3zqbJgt/wi7Bl3ox9Q4hnhQZp4tqfjc532JTtbkccWBivVSZAywY+y7qkKOn6tHI?= =?utf-8?q?lCJl1z7E5s7yepthYWipSoTSdhZ8NR7Lc9Qf9iYGjIhSKRvW7BmkrWqVuapLbOF+i?= =?utf-8?q?idZW513eB9eoVqb+QUOKYzvEEUtbka3XS7Xpqiy0ArkWJJY8R8U2fA6bKD1my4HUB?= =?utf-8?q?vxrDCbrBIdTnF6KEJ11LQOE6JH/69MpsaPKD+mcxuiezty/mSkr+Q6EqTo+wYWHOC?= =?utf-8?q?Vf/3sUIubVGtNuo1L1Puj5boDI6TX+C/6puBKKysH655xuosfbHMPLP7V+PXV6RVZ?= =?utf-8?q?2ryP5lVvJbobOQ3daKuwNBZel7N+c1tYQQubOEAW7t5S5Vfak65P3GN8EBgsoQKmJ?= =?utf-8?q?MupkO8ejDD0Ui4XFcRh/g2xY1TLtbP0Ibt//SMaMPQynCXOPryNAeSFEKrEU1ytr/?= =?utf-8?q?konORkeT4Qr57xMajytgVB9nu+y6c0D4ozgq6Ur/58XqtQNXIPNXWYyKec8N/k4jy?= =?utf-8?q?oKIZTn8RIXHvGB00uXgtm9j40SEhAJ14gY88d+8lAlQg+Dsywaprf913afsNYWDBa?= =?utf-8?q?+Mzwpm6wAefcWxmkL4uD4+/9D1r/8iMlOOmgx9vpFJkMGmK+HmkDt5uABwCeAkWm0?= =?utf-8?q?e9YY3bJIAdOrbDDlwI0HhTIuoGhwdTKs6uevThpi7sqv7OxSM/h2Ff6lbUytQv6Hv?= =?utf-8?q?PqhsS8X2vODxIan5+vkBEJr1Jc3aXfOJB3PMK33YW8xaU4JDNpxFWXeZc/LGF+r4R?= =?utf-8?q?KT/WOVWaO6ht2WIDk5zhm1BgYyhiyG8oHkNcPvK1aUbUzV54kFiuATKmxBWEIOF1G?= =?utf-8?q?i+sW6m0wdmnvnw3pUxdNPO6jp9mtu+PiFl6Vn+EUVK69xyfkAZgEMF0sOPKlzRmJ8?= =?utf-8?q?kM1xsoKo9KPhrs0nveRNCFHhMRCV0GNWd2MZKP1Rt2/Lswf5SmprP3SjIIVf2xPCC?= =?utf-8?q?LZrqULabN6hL?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 12f5e19b-8ccf-49d8-6a36-08dc6cb4f677 X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9417.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 May 2024 03:39:27.0732 (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: LyECtTvrM4PaGpuQwj9fNhqRtw7+dR19Yp2foJEOLVRnL41WG9/lPZvZJp1JYTfAkAFBtdht6pNi4RxytCzZyQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7599 From: Peng Fan i.MX95 Pinctrl is managed by System Control Management Interface(SCMI) firmware using OEM extensions. No functions, no groups are provided by the firmware. To reuse generic properties, add the binding to enable pinmux, slew-rate, bias-pull-up and etc, under a subnode of '-pins'. Signed-off-by: Peng Fan Reviewed-by: Rob Herring --- .../devicetree/bindings/firmware/arm,scmi.yaml | 9 ++++-- .../bindings/firmware/nxp,imx95-scmi-pinctrl.yaml | 37 ++++++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/firmware/arm,scmi.yaml b/Documentation/devicetree/bindings/firmware/arm,scmi.yaml index 7de2c29606e5..bd4dfd7a85cd 100644 --- a/Documentation/devicetree/bindings/firmware/arm,scmi.yaml +++ b/Documentation/devicetree/bindings/firmware/arm,scmi.yaml @@ -262,9 +262,12 @@ properties: patternProperties: '-pins$': type: object - allOf: - - $ref: /schemas/pinctrl/pincfg-node.yaml# - - $ref: /schemas/pinctrl/pinmux-node.yaml# + anyOf: + - $ref: /schemas/firmware/nxp,imx95-scmi-pinctrl.yaml + - allOf: + - $ref: /schemas/pinctrl/pincfg-node.yaml# + - $ref: /schemas/pinctrl/pinmux-node.yaml# + unevaluatedProperties: false description: diff --git a/Documentation/devicetree/bindings/firmware/nxp,imx95-scmi-pinctrl.yaml b/Documentation/devicetree/bindings/firmware/nxp,imx95-scmi-pinctrl.yaml new file mode 100644 index 000000000000..1a694881f193 --- /dev/null +++ b/Documentation/devicetree/bindings/firmware/nxp,imx95-scmi-pinctrl.yaml @@ -0,0 +1,37 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +# Copyright 2024 NXP +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/firmware/nxp,imx95-scmi-pinctrl.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: i.MX System Control and Management Interface (SCMI) Pinctrl Protocol + +maintainers: + - Peng Fan + +patternProperties: + 'grp[0-9a-f]$': + type: object + unevaluatedProperties: false + + properties: + pinmux: + description: | + An integer array for representing pinmux configurations of + a device. Each integer has the format, pinid[31:21], mux[20:16], + daisy_value[15:12], daisy_valid[11:11], daisy_id[10:0]. + $ref: /schemas/types.yaml#/definitions/uint32-array + + drive-strength: + enum: [ 0, 1, 3, 7, 15, 31, 63 ] + + slew-rate: + enum: [2, 3] + + input-schmitt-enable: true + drive-open-drain: true + bias-pull-up: true + bias-pull-down: true + +additionalProperties: true From patchwork Sun May 5 03:47:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peng Fan (OSS)" X-Patchwork-Id: 1931471 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-NXP1-onmicrosoft-com header.b=Pp4DsE/G; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2604:1380:45e3:2400::1; helo=sv.mirrors.kernel.org; envelope-from=linux-gpio+bounces-6109-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [IPv6:2604:1380:45e3:2400::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VX9KX448Mz1xnS for ; Sun, 5 May 2024 13:40:16 +1000 (AEST) Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 11EC0281E98 for ; Sun, 5 May 2024 03:40:15 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DC4812F2C; Sun, 5 May 2024 03:39:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="Pp4DsE/G" X-Original-To: linux-gpio@vger.kernel.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2050.outbound.protection.outlook.com [40.107.6.50]) (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 22E496FC5; Sun, 5 May 2024 03:39:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.6.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714880389; cv=fail; b=L/ylCuEAlsViT+m5jB6lQM2GadPdsIoZ0LNb7Zi6rVRlflcXx8dLSBpS8iIWmBI8QvpPcG1VOHKgp/Y3z4NOyo9Ze3ZudDrJ+DXP0Pha832yl0CfuRkadofp+wbICrok8zrr8ZiF3sV7bz9UlFT8D2Ghf02U05BmS6KUl79jrPM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714880389; c=relaxed/simple; bh=cHIHcCXMeRtfcUN3fUO1YlmnkdzbEc0paFnDh1W7DWE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=DWbhg2ntaUSb1teu+HVMWmAoNvFSjLdVER5wlCapNpVrkP4JQ/fm1gaIwv31uTDu1O6H/jae2dfIjQDsebgbF5yKFOgQ12W+uMmK/U2m2lkJu1ttbz95rgWrT4YvtujGfWUzolKf3J2mApkMyvJVlVYdoSdWABPojglmcD7Gxhc= 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 (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=Pp4DsE/G; arc=fail smtp.client-ip=40.107.6.50 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 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iNTVg46vipQxTzF02Ds9f8ankb3BRhmMjQ+7gB7JuBEIQc7e5odEXs9UOAYwJ8tPfJXHYxpJUCzIUrOgLCEeS7s/kiJ8N/UpZfB5VRCo8W19Upd2hMT/xjJ1wi92LenmRBSg3OPxz+OcEY+F2uIsNqPp+AALLy/vKVGv8JJ8d48pLr0EuPKObC1XGoJRGMHYhjgBlLjhaD4exPE/Y5W9zv+y+aF9uNxwkRG7uM3h1oIBZQXXeDTIv9qRUb2DwZoEIBhuwYorsj6mFzBSBmwQt30OLleY0q9JL548MogXQkGI6bl3BWq6BEjaGH4EZNyrwSS533Qco1LUHLb/69K+fg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=hpRie+nloq8A3UbzYPB7kIX8wMCGL+JIcNg8iz+EHNs=; b=cjMbzSmmusc5eVnFLBzvgaKumRdvFQT2+bUzO6PbRhRexziURZCjPX4U1ClRT9F9XIFOMO/70zeQ/aM6igVeJrRlXKq74fjkxDOQki5YEd3suZSDWTD9FkLYSjBrKb3NUyBe0XMtccwgoGfdj5Q5Vrde3+Ds7n5gCF1d1gl6gdhGNFiHAxWsqXwnQOONMQfVymxrOS5OmBRisPiZNZ/osK677r5Oy/iXmgrpI6Y/3oP2P7T4OFJYwtZvqQQnZs4ASHtEJakCDMMp5veTRxSMUpp91O/noSaF7dgH6NUCdeiHPmovS5cJ/0a9bbiyLKxHBUbvEIWYL6KWMDwwme/sig== 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=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hpRie+nloq8A3UbzYPB7kIX8wMCGL+JIcNg8iz+EHNs=; b=Pp4DsE/GI2SYIClHsswH3VGqD3u+TLMj2OXI7Rf8KQ82CkP4IoGKS8gMvws8ZU9pVmjxwqIyvTQv2kVF4TmNqpQFxW0GT/JAgLwNFPbJuiJPAhLhMY5djwJD0b+0ii/fpn3d1X9p8OLlNzm1VPlsiLkKeDIjVKwSaYxt8Mzgly8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) by PA4PR04MB7599.eurprd04.prod.outlook.com (2603:10a6:102:ea::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.39; Sun, 5 May 2024 03:39:32 +0000 Received: from DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::d30b:44e7:e78e:662d]) by DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::d30b:44e7:e78e:662d%4]) with mapi id 15.20.7544.036; Sun, 5 May 2024 03:39:32 +0000 From: "Peng Fan (OSS)" Date: Sun, 05 May 2024 11:47:18 +0800 Subject: [PATCH v4 2/3] pinctrl: scmi: add blocklist Message-Id: <20240505-pinctrl-scmi-oem-v3-v4-2-7c99f989e9ba@nxp.com> References: <20240505-pinctrl-scmi-oem-v3-v4-0-7c99f989e9ba@nxp.com> In-Reply-To: <20240505-pinctrl-scmi-oem-v3-v4-0-7c99f989e9ba@nxp.com> To: Sudeep Holla , Cristian Marussi , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Linus Walleij , Dong Aisheng , Jacky Bai Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-gpio@vger.kernel.org, Peng Fan X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1714880848; l=1513; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=iLTosuMXHbADLkYgKUNjBSdsZfH9Zm2D+iMMZu/RGUc=; b=wAledQaRf8wMF5I3zCUr4UgQ+glmFxK5ZRJItXRlGF49CujeIs4uYGPhMLsOkm3I7SElOApao VBSUZpBkauaAB1iBGxBjRJHJ3Sh1WL00YtKp7sElF608GdShmCL691d X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR01CA0022.apcprd01.prod.exchangelabs.com (2603:1096:4:192::14) To DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) Precedence: bulk X-Mailing-List: linux-gpio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0PR04MB9417:EE_|PA4PR04MB7599:EE_ X-MS-Office365-Filtering-Correlation-Id: 5dc7512a-ef57-4eda-6595-08dc6cb4fa20 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|7416005|1800799015|52116005|376005|366007|921011|38350700005; X-Microsoft-Antispam-Message-Info: =?utf-8?q?lXtpObs2BUOPSuPI3Cj841JoW0JX63J?= =?utf-8?q?XpaHzKoRx3oGO7xNZjWY3MmzViF+Yr7um8A30Sn8ldm83DKsKtnhDO32Q/JQ91k8F?= =?utf-8?q?dSOb8glg+2OIcESgA3DRva4zqZl8CKjyook+8P0dD1PclAt5OsMU+cYVeLXECNbsP?= =?utf-8?q?SrLLztRLaMIl//+Y/lUfe30a9gn7S7MMb4VjfMXsz/uG4KIxq1mvQvEgvKhVhJ0Zw?= =?utf-8?q?ip6KgWGilh2nLPEc7PPVA3HofZz9LEuJJB5uIzMkf2hR4dpek3suIY7NYJ6JHDy+3?= =?utf-8?q?vOlC6iW8ZJ4C069tbKVY7BQoa4mkz5CGvdVXk0kGLniRrtsg4RL1s7mloe17hp5hF?= =?utf-8?q?iq74QdyDasSSJuyz2kDotKrv376hVIdly4k4YAJK93XFF1qFXEZayEcksbx/R/jQS?= =?utf-8?q?cAsISA6hoMLFwcqL+6YKkNQl6VZFJvNkkSs9pahVfKDll/n1x2Y+wHpBbdOudF/8u?= =?utf-8?q?o0m9H08TaPkKtA7lpx1YwjAPQGgUb9M997CjaOsThxSsCNE7+SBKjcJcknl9UWJqm?= =?utf-8?q?pDoakETEQuI8xKajdddBW+fnlR5LIjut6xZe5lOuQxiVy+FmxMIHQK5nJm0g4mr31?= =?utf-8?q?H5toOxs3ShufdCoZPTyfFenbeRDyR1EVQcxGZ+KAm8IWUKdg0BWdu3L0ti2CBKi+G?= =?utf-8?q?886S+5g3XVwsQtSYc06IeUzDCjWxw7NRmqD3cXsD2pPG9SzhN+96MNZKgncw6qkmV?= =?utf-8?q?rBLCSm2DeY5JQ5/+CwJi9Fm4EXhaEs8bGV6+om1e2pPS4NrH0iAvg1pxx9lU7kK5q?= =?utf-8?q?ACRyZWLYg0vzwuKINC6ZLM1QlyKkJrY1YnfF7qzOkXZA6uem+IioQkYYueDzYwjLy?= =?utf-8?q?ITPCzQ8j8VQhPCk0F3KF9HP5DkijWH6dTcp/2zSbbEw8zEDSU/b3UKXuCmKw/xWWW?= =?utf-8?q?vsZQ0B2kI471Hy11a/ckGO4pYpMslkcifIa4j9d5pvHv9wYwJpLP4BGHxCkyZdQCY?= =?utf-8?q?Rl4n1iukDeYIEvNUbtcbKaM/c9IAuASW/4vvSoRzk/oLri1h8mcrIs6j9tCv59jsQ?= =?utf-8?q?Yhp19Ng4EiFhdpSoCEmSxbhK6DDVTrWIyUANY2zL7I5TH2Sqhvx/LoFvVYsWkwoti?= =?utf-8?q?UhdAnY32mdaEnWU4tnXOOY5wk+WHBFIhiNiXFdSv/1EAB8zjq5a5apt9yZoh+i4vy?= =?utf-8?q?uxDza9tlymc2ZqoMcAWQ6Zruaqmz74Qd2mqonnuBqjYTc4eeuo8lGwmHck4SoNYhC?= =?utf-8?q?13MBqyWeUVvJC/6LkCz6J+GNO4XBvDcJQv6qfmi4YNyzNt7ghFDQGFM2b6uJzfY1d?= =?utf-8?q?OTaO+14say3TXW/W2qYWQYgoqzhyLaKASDQ=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU0PR04MB9417.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(7416005)(1800799015)(52116005)(376005)(366007)(921011)(38350700005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?XzH4SuvBJPbmiffk3v2fU5lfFZAW?= =?utf-8?q?Qcv1sOYk9ACyupGdpqTRBsmLFoEjo4WwAYLKxdLHISFymqVjkeNu/ID9LDqHvVsgy?= =?utf-8?q?+ftDJEp+7pWg6vWkgT4GpH7ohux5NQX7SzVjExZs0hgLmDOXcxeibZKr0+8C3PsDA?= =?utf-8?q?P9Sd8Q4ruSmuvLFP/AN7bvQ/QNSf8EGgsA+z6sCz7cVWRuScomLZmVCfqwMIssDXr?= =?utf-8?q?MVx5uXhrE8aIqCyYoCr9vFfpx1SMkEwxtHqrqqzTC+bBrGYUQdKK3VPoQCeMPejnv?= =?utf-8?q?DBw82173Cg1/YPOBZRxA78lorSHYwfjml9uj3qD8WBZqeDndvbpRNupWch3MFypPf?= =?utf-8?q?2xjC5wNheOv5Ow+4xsvEMxW4cJOiLaBVBspdqY1Oh1wq5LqxehjyqhC8EhfmxZuyo?= =?utf-8?q?xF4kxCs9BE8PEPP4gls9YTYRW1AiiaDK3pyzIUdOtVLvKBk7RtD7GMg4yfaEFoVf6?= =?utf-8?q?fTwlT1Vw3EKsqhALxRjwh6on78bGsBQRAGVYkjHXkPXNyfN3MXgn4Xbsu3GErrPua?= =?utf-8?q?L4fZlMnOKsqzXHIbQZRR67BD3GIavdl3Lw50f6Nx4njZEODWKqtfZvnRMxzQc9jDN?= =?utf-8?q?8Yha8OIbADC61JkAagFqLu6v/lBBu9ENrqb3zFNpOA0JkRyf9HH/2GiJBcrz8No9t?= =?utf-8?q?pJXb2y24fe1mgrPOX0+0W+/XPpp4/YekCc7r+sApjIih/8pnPfmuGPsAf274Qkxd1?= =?utf-8?q?Y9EIl/3QkTDsewNDPX4TCK0jcmCW2RQLvaHr6BgvjoxuYfaenc4ObbdmtuYSlUS16?= =?utf-8?q?93ad3eECt92K+MDUxAUB2wH7q4hYf8J5DqADZfpQLsLcR8FT8JwMwl9zIjuWvcjlu?= =?utf-8?q?56r5ozfEfA+N7X2wR6f8FbojkZAKIF75dgbFScijEYOxm2vZFDJS75XNOp5MciWar?= =?utf-8?q?0s5mWDHjjUQJjSP1r/W6C3vLf7XfN1z3UJ3tNl7paGO6BEpInMRbXA8Smrx32FrKz?= =?utf-8?q?3htnRsi5rw83wsQl3A1r/9RunOE2irHQZcx9mEQXUIQZnib/M9OjCKjXfnaKotZO2?= =?utf-8?q?94NVo6JYYq9uln9BNwCUBhtlyf7U1MfbjjxKdH9dY9/TXDNRXUCRkzH7ux9KupyrB?= =?utf-8?q?aGzs3e0iLRogCufNBxR/woR7KzA/88FHHzMtXrAL3MOqrwAXwSqB2ONnreyfjftlz?= =?utf-8?q?oMOnFwUfjlvLHSBMA0I/Fzx2v/3DMAH+nYKGu7vPLR+0TADaYOepxqHNYHB69G+H1?= =?utf-8?q?GW0VTbBKDR0DvuaXmrnyahBCcIX3XtsRf38dm8lXyhHQPnuWaQIBcRixF4KVJflpX?= =?utf-8?q?QIKZVmp+Zenf1CXrQi7PbDTQHb8a5DkAVEg4NSD3eUgwWwyk6TR08LgwIoWjeTkLB?= =?utf-8?q?MCeP16cjTWdMklxeQPqqdovuIOl7lY6dcZGx8P1xMYtyoVz+MO11l7O8+Q2BbiZdW?= =?utf-8?q?uw0+6gaG8PhKuPq5A1HyDl36pW9pP5ZvMhcZVaBbxY3z2FuajEMx+Ppdumaoeq07F?= =?utf-8?q?pLGXimrPvhtcfaDtwnJczD66cnrqDx+uM821ymsc4aeJdoW6ieN24VvP0X9wF7+fQ?= =?utf-8?q?GkawjvcxCtrV?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5dc7512a-ef57-4eda-6595-08dc6cb4fa20 X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9417.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 May 2024 03:39:32.7127 (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: uoJtvQt3oYxeVOGJs7KPui+GCxTs79WZt5R3RIbrrYEHXEagJnY2rXEUAXNM/LLSv84rdF0mpChWvvpiujhAnw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7599 From: Peng Fan i.MX95 will have its own pinctrl scmi driver, so need block pinctrl-scmi driver for i.MX95, otherwise there will be two pinctrl devices for a single scmi protocol@19. Signed-off-by: Peng Fan --- drivers/pinctrl/pinctrl-scmi.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/pinctrl/pinctrl-scmi.c b/drivers/pinctrl/pinctrl-scmi.c index 036bc1e3fc6c..331ca20ac68b 100644 --- a/drivers/pinctrl/pinctrl-scmi.c +++ b/drivers/pinctrl/pinctrl-scmi.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -504,6 +505,11 @@ static int pinctrl_scmi_get_pins(struct scmi_pinctrl *pmx, return 0; } +static const struct of_device_id scmi_pinctrl_blocklist[] = { + { .compatible = "fsl,imx95", }, + { } +}; + static int scmi_pinctrl_probe(struct scmi_device *sdev) { int ret; @@ -511,10 +517,14 @@ static int scmi_pinctrl_probe(struct scmi_device *sdev) struct scmi_pinctrl *pmx; const struct scmi_handle *handle; struct scmi_protocol_handle *ph; + struct device_node *np __free(device_node) = of_find_node_by_path("/"); if (!sdev->handle) return -EINVAL; + if (of_match_node(scmi_pinctrl_blocklist, np)) + return -ENODEV; + handle = sdev->handle; pinctrl_ops = handle->devm_protocol_get(sdev, SCMI_PROTOCOL_PINCTRL, &ph); From patchwork Sun May 5 03:47:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peng Fan (OSS)" X-Patchwork-Id: 1931472 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-NXP1-onmicrosoft-com header.b=M+zd36s1; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2604:1380:40f1:3f00::1; helo=sy.mirrors.kernel.org; envelope-from=linux-gpio+bounces-6110-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [IPv6:2604:1380:40f1:3f00::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VX9Kv4l8Mz1xnS for ; Sun, 5 May 2024 13:40:35 +1000 (AEST) Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id C0323B211E5 for ; Sun, 5 May 2024 03:40:34 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A2F65AD2C; Sun, 5 May 2024 03:40:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="M+zd36s1" X-Original-To: linux-gpio@vger.kernel.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2050.outbound.protection.outlook.com [40.107.6.50]) (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 C22A911712; Sun, 5 May 2024 03:39:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.6.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714880404; cv=fail; b=gkoKy26MVGiFUVl9O6W5JtkJ8K4eB9J1MI8wgad3B8+tIYEdbU+p9/SkSITdO3zpACZp8RVmODyAEhkVxvPE3BHG0IwBvD2jSdar92DtTW5vAfy7B27QG+yG8C+TIKg5IdSf3JjMCSKX47I5qnX33legNnHk7oQIWjylX88xcSA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714880404; c=relaxed/simple; bh=pnQfvjcg8gty3KvV5qIV2Km23PdUXViO9ur/K27O52I=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=QrxIb6X49pNe1BBGalylnLk5hjg3IZHAQPzk+Kb+wbzPw6eblFGo8To537vlnF7zYVCjXaBq8HeBQ6AYR2xpvksEYjzcevSMtlIJNQUxiY5fnX34Tzb4q4QF/eO9C4FWVySsl3VWHHZcp5osMnbjDzG6OSa4bRPvecmUs5CbmwY= 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 (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=M+zd36s1; arc=fail smtp.client-ip=40.107.6.50 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 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PhMJ5ctiymI/swPTEuMF84rkSaGfCpl4AMvgvu1Bsma0JPHoRnt+0CX9DnflwDJKjkzkKiLFJw1WyqFPY4SPc233xT+akuqFqLm3SSIMEadFUZ8ji5sgdL2XW/XWk9bHGQUGrhYhxL1gK0nNiEcSn7sBZ9HbkGsyf0VMkhpncSJ/lBg8sPX0I6zEH8mtp8yy6NzNvlJrscm71cGaJ6taZj8C4xlxgn25LmHoBTF+jofi4VnZ0Xh16cELmoxOdjA4nAw/gbxjRoXJ5vjbf14uAULOE4uyWiN7OaWUBHu2sAzBnz3OuUuTxwdU9FTegnt34uIZOVUGQjUx63hwyF6FVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=MICHok6sPr8pa2cf9OH6WUBu2RhwppFXYPYOCVKvmIU=; b=OufZ5M0YL02tMiQu2PmR+5FH3ZuJ1LNmUI8sxyQ0o7/0wMjXN8Rf6ukHbWoOje4FbWOuihsJ2hKgPogT1aSHtA11xFOLwAg6EKWYTBcZSzIjyd/y8mlofuiZdYgKQjFvtWGbeDsICiiu+TJuV2Sf73RrKtXayuoh82AXQ+Ma7hszn+bTViJQBUQKWa72fYEYHVqzXBbr6SWfWcvqw5z+AWc6IhOrup9isfs3IC1n1/ZtqRtsuqOoyPgS8PF5xvvsQ2OyuUTnG2gVdbg8myhYdR9noDwD7eBRwG4SI9VH+0ocePBtQWs93sR+nJ5GAZsaIOQaIi7Kvn7E8kJsbabDsg== 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=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MICHok6sPr8pa2cf9OH6WUBu2RhwppFXYPYOCVKvmIU=; b=M+zd36s1EnkOLh+vOkT9WRc9A29v5VU5ZdRXP50mE0fZkg4pgtkgRwbuW1V2qlF79Mw8pSI203X2VI30RV4OkTNNVT4ai6zPpy7UEyLDmyiPuunhtPPJ94KnPmOlFq5QINF3u8Du+9Dp33qNkGz7l3ZAWMFVl153g7j5B+rvRB0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) by PA4PR04MB7599.eurprd04.prod.outlook.com (2603:10a6:102:ea::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.39; Sun, 5 May 2024 03:39:38 +0000 Received: from DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::d30b:44e7:e78e:662d]) by DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::d30b:44e7:e78e:662d%4]) with mapi id 15.20.7544.036; Sun, 5 May 2024 03:39:38 +0000 From: "Peng Fan (OSS)" Date: Sun, 05 May 2024 11:47:19 +0800 Subject: [PATCH v4 3/3] pinctrl: imx: support SCMI pinctrl protocol for i.MX95 Message-Id: <20240505-pinctrl-scmi-oem-v3-v4-3-7c99f989e9ba@nxp.com> References: <20240505-pinctrl-scmi-oem-v3-v4-0-7c99f989e9ba@nxp.com> In-Reply-To: <20240505-pinctrl-scmi-oem-v3-v4-0-7c99f989e9ba@nxp.com> To: Sudeep Holla , Cristian Marussi , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Linus Walleij , Dong Aisheng , Jacky Bai Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-gpio@vger.kernel.org, Peng Fan X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1714880848; l=18054; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=IM8T/Fw/7itj6/oIqmhPHcq37uIf+3Ap9SbdT79HT64=; b=q0Q/DZOOGSx9FqTnmW+Pgm0SZzbpKWSxf2GwQrCl9zdXloNJWq7BEFWSg42PAuji9wATOWPRD h1JL2hUQtKRBf2uez2nQvtB5oPi79damvwKoXnelihIvGcnTxaAOyWZ X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR01CA0022.apcprd01.prod.exchangelabs.com (2603:1096:4:192::14) To DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) Precedence: bulk X-Mailing-List: linux-gpio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0PR04MB9417:EE_|PA4PR04MB7599:EE_ X-MS-Office365-Filtering-Correlation-Id: 042f24a5-2c15-475c-7dd3-08dc6cb4fd8b X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|7416005|1800799015|52116005|376005|366007|921011|38350700005; X-Microsoft-Antispam-Message-Info: =?utf-8?q?3dRzFygiuFWsnCixoqO9ZyqYRZ7uKSU?= =?utf-8?q?xOmrknbWPXCJcnbOEQN24mA3pTa0co1HVgjRPUvV60W4/y5YK8rBTedngJklXd4Gq?= =?utf-8?q?mLG23ZnNtPvKk0qKW9FCgTNCoPlJYfioUDoQrM/eMZEuGpy5lLttv+WbcJ56Wxm5L?= =?utf-8?q?gv8Zz1E/FvIjqSZ5QNXuPh9dlVVdjN9Ic4PzVohgzwGDac9uEb4HXG8LkHakt+e35?= =?utf-8?q?Oe3k8Izc9EHSJV0JZYdb2j8RRrbXoblsUpaQPhXtfxBK216+bdFKKV4U81nZIs7gR?= =?utf-8?q?68jFDWq5jeP905clxxypXrO2cmDnCqo75Rk44JEtNh8SJNfb6T3JbdSFbdxPD5/iD?= =?utf-8?q?IjV8IG9luaD32KQQSEMtL9RnpXbIsBkFEnVOE6YbJUvaIiYYmI+OSwYxToWz7mkGN?= =?utf-8?q?nswoHZYknWif9qZ6JXJg7jNaWUjxM6EPu5voqWbzknqfvbiH9wuDLCgK6WJK42KG4?= =?utf-8?q?NeRpDP+6+ZRq/+eEVVKVB8cYtSqTNo6a09sha/t3qwdPt0gVAkHncZ6/v/M3AThfe?= =?utf-8?q?07bvaxuiUod+HdHSDHMqv/CdTf2PxShujQAZAKRjc9gKs7ndG+D1fa/C3guJLKJFh?= =?utf-8?q?96zTOkQAVQ3XCvgCWuLDNHbkUjLAm8Rel+zSrBFAETfA3bYkgBITKx6VzMi0GsYTH?= =?utf-8?q?5GR4yJysX14rR65hCjg/Hwk3TUKw/d2GF5pDIeX4g/XfNBWjjWWSPaR10QYZYrwoM?= =?utf-8?q?XWnqEd7dFyl9/k6ZMlvLFikWGKrwJg+TFqeibrzzBh+l5TxjRd+A7DZvE/Al3UHjQ?= =?utf-8?q?/jHVxDpj7blHb93xqVQN3OvcZsnJY4M7i8dJcaPJD3lq4hC3oodJ4LKEYThl71O5G?= =?utf-8?q?dD61c6o0F93LaN5cSuurAWe5P6ib8DDzeyJHTifOzS8XGEb55uCadvI2qgf+q3pve?= =?utf-8?q?yhoJAAcpzTqwovp+GHUJx8OpAPiQXW2t43w7xl3h5MyC1z7H0heIYOs3VxmaTd1An?= =?utf-8?q?OFlr5/PSvAU9GgyLzsn8p9Xz4p20c1Kig5CIE5tge8zZojYRfXwv7IokgLIRnrkQz?= =?utf-8?q?Aurp4XWIw5OB736WYC54Z3KH42+0srQs/O/+xCQ0uJabMvAZ/NyhxhQ0WJw8KOskS?= =?utf-8?q?QdvxvYPGakF+A5ZdsmVlfOtgnCekSAJ585UYEeJFJ0e4DwsuTOhWlbNAKQEdUjett?= =?utf-8?q?SHUqOCGxVlaamtuRaZAguKey6tsoPoZ2fqLhN4Ku9Hie0lW7j0Kse4RmatHZW01kD?= =?utf-8?q?pttywyxzSptV8Jg52NQRsAIZULDWRHWGsZFwMQdYQH2B758sDcqlIkZ/c7z91EO0j?= =?utf-8?q?bUyLF49acbd4AsCNdWvYoG7tFbOXTBbVWATUjQu7DU7UeXpHeIMfT43I=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU0PR04MB9417.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(7416005)(1800799015)(52116005)(376005)(366007)(921011)(38350700005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?1JzP4e4nnDrX0KNzdlKzSVnvoV47?= =?utf-8?q?ZEPoJ6FouFurRmZi1PCrNatxKnI80vSDwtjoQ6UFOURayJbXEfIfnMNYYsYLpK+64?= =?utf-8?q?lO+YrSaBKuZibC9iYsaVBbTCCDJ+q6RdLD3nf6SiVlJvPODTn7z3H4G6OQzH+vrtR?= =?utf-8?q?IgVccpWRyWebO3NAbpOXVG72b06/dtOnRdt3v5825WRehUJxyqtPc/Mfq6JtEVHa7?= =?utf-8?q?4bPKQWXAgSQUJGXEQ3lp3ilX/xS0iged4hg1lltRMW2UuRAbzzL7seL+klClxgW6t?= =?utf-8?q?XbakjbrOdM7W3uhzzc+n+w5N8j6udVmoEXNm+On1vkdS2UZqB8tdZpTvpyUoQoiSq?= =?utf-8?q?KOehpYepzRdLgoQpXVoOikfU0TZXbKeOI/1OTfmI0/lSudMf/8K4QZGnCKDiJEg1Z?= =?utf-8?q?iwdAPLv2GWPzIkuyLmyMjDG9kr2fS7sAYupDV1JUElsRo2TXiE/qxqp8bkQQqX7XO?= =?utf-8?q?J4EQcRRTTJxngu6dcSMy4rEpj6J9qJJ3IE54EEngHZWIlpEetUh5yfLQ/x+qYeVZp?= =?utf-8?q?6vxFYjza5cJg/IjBzGgDMD00FY/py8xAA7GzMFj1F/Pp/Q9pGOhi9Lb668s+nFgSJ?= =?utf-8?q?8QQk718vOfQfzIf1YYmOU6iAvWi+GLAR5MmJmiJG82ECXqEz9onSIjQVlebgItQS4?= =?utf-8?q?UTWTCNpm5zGK8ydOAxHm+XGs7ipHDniNkeEH31gbsaR34+VDecoHSW/q3LA35QF4A?= =?utf-8?q?EgKp8cm8biL0jDD8HgAT+jsHhKkKxRVuL+jfC0nvq1dPSCYwOGWVB2yC7Ej9qHdEc?= =?utf-8?q?vjYzOjSF+fw49799DTmDIbuA1XNuHoF8cngRFyJ8nfZcSPyHZiI5YSVBC1xY3+Gq3?= =?utf-8?q?Z8jEJISFlIBSq1IRo6nE4kTqzNtO28WGOPs1D1WnsocXmD8j+BSsYlLjL0CE2oI5q?= =?utf-8?q?LW4R3Dog/Ext4XwDT2UxFPG2vZGPAcmLGbkPHMUclJ9+DAgH2Y61vNy+ODPpns4qt?= =?utf-8?q?imAd+gccP7gfWEXowtIS8q86p/J+UbmYXA+SpEFncI+ljnE2SP3S2BrAS3fVQr7Wq?= =?utf-8?q?DO76i63fHzTQWCbvIYcbB95QMHXpDcbBjwtcjBaBIIhKxgzc9zlAftUT8WZ3+Eh7w?= =?utf-8?q?q6l+2EsFRHlixv8z8iYPu2Tc2mjn4+hsOHEWqScAqyFrDeDlTL2EVyaR9LaFNfX+L?= =?utf-8?q?8pegXnyPQtNiVlt74tRcl4juEFapuBUuBXC4/B5QtDkCyESEBr5vyTGLU//BnuXhk?= =?utf-8?q?p08O08ifTR7lOKL3HMEBJU6y6sXvS9stqzgj2D2TJk3GEZyl7VOq18Zj4PMFZEzeK?= =?utf-8?q?QzyU7HK4LImQWSAn5QmspppQOUZDArg2gdoo3XAtYtWLjYkidxQk+nDXNf/G19tAa?= =?utf-8?q?VwZJWfdD3J3wjbdyu9DhU4hBAItmsfRBRLMArbVTo07FR2MZS/ffRvl+jHixkLaWm?= =?utf-8?q?XrTSkRhUTXCLBcrxg2Ds8pxK+GBM7ncWqHgMTxysH1S/BYEPyXcLGXonOs4bAbdIh?= =?utf-8?q?DEyoZdRPHJdhlVS+7XzM0tIailP6NCNdf7n5eURR18b6oJXXP/HIXfbZCJKYQ3bQS?= =?utf-8?q?9vqCuNdr6b72?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 042f24a5-2c15-475c-7dd3-08dc6cb4fd8b X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9417.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 May 2024 03:39:38.4618 (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: DPst6aqLL/3Orcww+2TG46FTGNGFBupSSB4geYH2/vVE4K1BnCWUMQMbyn9yzAfOp8Ecct+m21oa+4TozC1Zqg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7599 From: Peng Fan The generic pinctrl-scmi.c driver could not be used for i.MX95 because i.MX95 SCMI firmware not supports functions, groups or generic 'Pin Configuration Type and Enumerations' listed in SCMI Specification. i.MX95 System Control Management Interface(SCMI) firmware only supports below pin configuration types which are OEM specific types: 192: PIN MUX 193: PIN CONF 194: DAISY ID 195: DAISY VAL To support Linux generic pinctrl properties(pinmux, bias-pull-[up, down], and etc), need extract the value from the property and map them to the format that i.MX95 SCMI pinctrl protocol understands, so add this driver. Signed-off-by: Peng Fan --- drivers/pinctrl/freescale/Kconfig | 9 + drivers/pinctrl/freescale/Makefile | 1 + drivers/pinctrl/freescale/pinctrl-imx-scmi.c | 586 +++++++++++++++++++++++++++ 3 files changed, 596 insertions(+) diff --git a/drivers/pinctrl/freescale/Kconfig b/drivers/pinctrl/freescale/Kconfig index 27bdc548f3a7..23c71d2ea388 100644 --- a/drivers/pinctrl/freescale/Kconfig +++ b/drivers/pinctrl/freescale/Kconfig @@ -7,6 +7,15 @@ config PINCTRL_IMX select PINCONF select REGMAP +config PINCTRL_IMX_SCMI + tristate "i.MX95 pinctrl driver using SCMI protocol interface" + depends on ARM_SCMI_PROTOCOL && OF + select PINMUX + select GENERIC_PINCONF + help + i.MX95 SCMI firmware provides pinctrl protocol. This driver + utilizes the SCMI interface to do pinctrl configuration. + config PINCTRL_IMX_SCU tristate depends on IMX_SCU diff --git a/drivers/pinctrl/freescale/Makefile b/drivers/pinctrl/freescale/Makefile index 647dff060477..e79b4b06e71b 100644 --- a/drivers/pinctrl/freescale/Makefile +++ b/drivers/pinctrl/freescale/Makefile @@ -2,6 +2,7 @@ # Freescale pin control drivers obj-$(CONFIG_PINCTRL_IMX) += pinctrl-imx.o obj-$(CONFIG_PINCTRL_IMX_SCU) += pinctrl-scu.o +obj-$(CONFIG_PINCTRL_IMX_SCMI) += pinctrl-imx-scmi.o obj-$(CONFIG_PINCTRL_IMX1_CORE) += pinctrl-imx1-core.o obj-$(CONFIG_PINCTRL_IMX1) += pinctrl-imx1.o obj-$(CONFIG_PINCTRL_IMX27) += pinctrl-imx27.o diff --git a/drivers/pinctrl/freescale/pinctrl-imx-scmi.c b/drivers/pinctrl/freescale/pinctrl-imx-scmi.c new file mode 100644 index 000000000000..d055c58165f9 --- /dev/null +++ b/drivers/pinctrl/freescale/pinctrl-imx-scmi.c @@ -0,0 +1,586 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * System Control and Power Interface (SCMI) Protocol based i.MX pinctrl driver + * + * Copyright 2024 NXP + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "../pinctrl-utils.h" +#include "../core.h" +#include "../pinconf.h" +#include "../pinmux.h" + +#define DRV_NAME "scmi-pinctrl-imx" + +#define SCMI_NUM_CONFIGS 4 + +struct imx_pin_group { + struct pingroup data; +}; + +struct scmi_pinctrl_imx { + struct device *dev; + struct scmi_protocol_handle *ph; + struct pinctrl_dev *pctldev; + struct pinctrl_desc pctl_desc; + struct pinfunction *functions; + unsigned int nfunctions; + struct pinctrl_pin_desc *pins; + unsigned int nr_pins; + const struct scmi_pinctrl_proto_ops *ops; + unsigned int grp_index; + struct imx_pin_group *groups; + unsigned int ngroups; +}; + +/* SCMI pin control types, aligned with SCMI firmware */ +#define IMX_SCMI_NUM_CFG 4 +#define IMX_SCMI_PIN_MUX 192 +#define IMX_SCMI_PIN_CONFIG 193 +#define IMX_SCMI_PIN_DAISY_ID 194 +#define IMX_SCMI_PIN_DAISY_CFG 195 + +/* + * pinmux format: + * pin[31:21]|mux[20:16]|daisy_value[15:12]|daisy_valid[11:11]|daisy_id[10:0] + */ +#define IMX_PIN_ID_MASK GENMASK(31, 21) +#define IMX_PIN_MUX_MASK GENMASK(20, 16) +#define IMX_PIN_DAISY_VAL_MASK GENMASK(15, 12) +#define IMX_PIN_DAISY_VALID BIT(11) +#define IMX_PIN_DAISY_ID_MASK GENMASK(10, 0) + +static inline u32 get_pin_no(u32 pinmux) +{ + return FIELD_GET(IMX_PIN_ID_MASK, pinmux); +} + +static inline u32 get_pin_func(u32 pinmux) +{ + return FIELD_GET(IMX_PIN_MUX_MASK, pinmux); +} + +static inline u32 get_pin_daisy_valid(u32 pinmux) +{ + return FIELD_GET(IMX_PIN_DAISY_VALID, pinmux); +} + +static inline u32 get_pin_daisy_val(u32 pinmux) +{ + return FIELD_GET(IMX_PIN_DAISY_VAL_MASK, pinmux); +} + +static inline u32 get_pin_daisy_no(u32 pinmux) +{ + return FIELD_GET(IMX_PIN_DAISY_ID_MASK, pinmux); +} + +static int pinctrl_scmi_imx_map_pinconf_type(enum pin_config_param param, + u32 *mask, u32 *shift) +{ + u32 arg = param; + + switch (arg) { + case PIN_CONFIG_INPUT_SCHMITT_ENABLE: + *mask = BIT(12); + *shift = 12; + break; + case PIN_CONFIG_DRIVE_OPEN_DRAIN: + *mask = BIT(11); + *shift = 11; + break; + case PIN_CONFIG_BIAS_PULL_DOWN: + *mask = BIT(10); + *shift = 10; + break; + case PIN_CONFIG_BIAS_PULL_UP: + *mask = BIT(9); + *shift = 9; + break; + case PIN_CONFIG_SLEW_RATE: + *mask = GENMASK(8, 7); + *shift = 7; + break; + case PIN_CONFIG_DRIVE_STRENGTH: + *mask = GENMASK(6, 1); + *shift = 1; + break; + default: + return -EINVAL; + } + + return 0; +} + +static int pinctrl_scmi_imx_dt_group_node_to_map(struct pinctrl_dev *pctldev, + struct device_node *np, + struct pinctrl_map **map, + unsigned int *reserved_maps, + unsigned int *num_maps, + const char *func_name) +{ + struct device *dev = pctldev->dev; + unsigned long *cfgs = NULL; + unsigned int n_cfgs, reserve = 1; + int i, n_pins, ret; + u32 ncfg, val, mask, shift, pin_conf, pinmux_group; + unsigned long cfg[IMX_SCMI_NUM_CFG]; + enum pin_config_param param; + struct property *prop; + const __be32 *p; + + n_pins = of_property_count_u32_elems(np, "pinmux"); + if (n_pins < 0) { + dev_warn(dev, "Can't find 'pinmux' property in node %pOFn\n", np); + return -EINVAL; + } else if (!n_pins) { + return -EINVAL; + } + + ret = pinconf_generic_parse_dt_config(np, pctldev, &cfgs, &n_cfgs); + if (ret) { + dev_err(dev, "%pOF: could not parse node property\n", np); + return ret; + } + + pin_conf = 0; + for (i = 0; i < n_cfgs; i++) { + param = pinconf_to_config_param(cfgs[i]); + ret = pinctrl_scmi_imx_map_pinconf_type(param, &mask, &shift); + if (ret) { + dev_err(dev, "Error map pinconf_type %d\n", ret); + goto free_cfgs; + } + + val = pinconf_to_config_argument(cfgs[i]); + + pin_conf |= (val << shift) & mask; + + } + + reserve = n_pins * (1 + n_cfgs); + + ret = pinctrl_utils_reserve_map(pctldev, map, reserved_maps, num_maps, + reserve); + if (ret < 0) + goto free_cfgs; + + of_property_for_each_u32(np, "pinmux", prop, p, pinmux_group) { + u32 pin_id, pin_func, daisy_id, daisy_val, daisy_valid; + const char *pin_name; + + i = 0; + ncfg = IMX_SCMI_NUM_CFG; + pin_id = get_pin_no(pinmux_group); + pin_func = get_pin_func(pinmux_group); + daisy_id = get_pin_daisy_no(pinmux_group); + daisy_val = get_pin_daisy_val(pinmux_group); + cfg[i++] = pinconf_to_config_packed(IMX_SCMI_PIN_MUX, pin_func); + cfg[i++] = pinconf_to_config_packed(IMX_SCMI_PIN_CONFIG, pin_conf); + + daisy_valid = get_pin_daisy_valid(pinmux_group); + if (daisy_valid) { + cfg[i++] = pinconf_to_config_packed(IMX_SCMI_PIN_DAISY_ID, + daisy_id); + cfg[i++] = pinconf_to_config_packed(IMX_SCMI_PIN_DAISY_CFG, + daisy_val); + } else { + ncfg -= 2; + } + + pin_name = pin_get_name(pctldev, pin_id); + + dev_dbg(dev, "pin: %s, pin_conf: 0x%x, daisy_id: %u, daisy_val: 0x%x\n", + pin_name, pin_conf, daisy_id, daisy_val); + + ret = pinctrl_utils_add_map_configs(pctldev, map, reserved_maps, + num_maps, pin_name, + cfg, ncfg, + PIN_MAP_TYPE_CONFIGS_PIN); + if (ret < 0) + goto free_cfgs; + }; + +free_cfgs: + kfree(cfgs); + return ret; +} + +static int pinctrl_scmi_imx_dt_node_to_map(struct pinctrl_dev *pctldev, + struct device_node *np_config, + struct pinctrl_map **map, + unsigned int *num_maps) + +{ + unsigned int reserved_maps; + int ret; + + reserved_maps = 0; + *map = NULL; + *num_maps = 0; + + for_each_available_child_of_node_scoped(np_config, np) { + ret = pinctrl_scmi_imx_dt_group_node_to_map(pctldev, np, map, + &reserved_maps, + num_maps, + np_config->name); + if (ret < 0) { + pinctrl_utils_free_map(pctldev, *map, *num_maps); + return ret; + } + } + + return 0; +} + +static const struct pinctrl_ops pinctrl_scmi_imx_pinctrl_ops = { + .get_groups_count = pinctrl_generic_get_group_count, + .get_group_name = pinctrl_generic_get_group_name, + .get_group_pins = pinctrl_generic_get_group_pins, + .dt_node_to_map = pinctrl_scmi_imx_dt_node_to_map, + .dt_free_map = pinconf_generic_dt_free_map, +}; + +static int pinctrl_scmi_imx_func_set_mux(struct pinctrl_dev *pctldev, + unsigned int selector, unsigned int group) +{ + /* + * For i.MX SCMI PINCTRL , postpone the mux setting + * until config is set as they can be set together + * in one IPC call + */ + return 0; +} + +static const struct pinmux_ops pinctrl_scmi_imx_pinmux_ops = { + .get_functions_count = pinmux_generic_get_function_count, + .get_function_name = pinmux_generic_get_function_name, + .get_function_groups = pinmux_generic_get_function_groups, + .set_mux = pinctrl_scmi_imx_func_set_mux, +}; + +static int pinctrl_scmi_imx_pinconf_get(struct pinctrl_dev *pctldev, + unsigned int pin, unsigned long *config) +{ + int ret; + struct scmi_pinctrl_imx *pmx = pinctrl_dev_get_drvdata(pctldev); + enum pin_config_param config_type; + u32 mask, val, shift; + u32 config_value; + + if (!config) + return -EINVAL; + + config_type = pinconf_to_config_param(*config); + + ret = pinctrl_scmi_imx_map_pinconf_type(config_type, &mask, &shift); + if (ret) + return ret; + + ret = pmx->ops->settings_get_one(pmx->ph, pin, PIN_TYPE, + IMX_SCMI_PIN_CONFIG, &val); + /* Convert SCMI error code to PINCTRL expected error code */ + if (ret == -EOPNOTSUPP) + return -ENOTSUPP; + if (ret) + return ret; + + config_value = (val & mask) >> shift; + *config = pinconf_to_config_packed(config_type, config_value); + + dev_dbg(pmx->dev, "pin:%s, conf:0x%x, type: %d, val: %u", + pin_get_name(pctldev, pin), val, config_type, config_value); + + return 0; +} + +static int pinctrl_scmi_imx_pinconf_set(struct pinctrl_dev *pctldev, + unsigned int pin, + unsigned long *configs, + unsigned int num_configs) +{ + struct scmi_pinctrl_imx *pmx = pinctrl_dev_get_drvdata(pctldev); + enum scmi_pinctrl_conf_type config_type[SCMI_NUM_CONFIGS]; + u32 config_value[SCMI_NUM_CONFIGS]; + enum scmi_pinctrl_conf_type *p_config_type = config_type; + u32 *p_config_value = config_value; + int ret; + int i; + + if (!configs || !num_configs) + return -EINVAL; + + if (num_configs > SCMI_NUM_CONFIGS) { + dev_err(pmx->dev, "num_configs(%d) too large\n", num_configs); + return -EINVAL; + } + + for (i = 0; i < num_configs; i++) { + /* cast to avoid build warning */ + p_config_type[i] = + (enum scmi_pinctrl_conf_type)pinconf_to_config_param(configs[i]); + p_config_value[i] = pinconf_to_config_argument(configs[i]); + + dev_err(pmx->dev, "pin: %u, type: %u, val: 0x%x\n", + pin, p_config_type[i], p_config_value[i]); + } + + ret = pmx->ops->settings_conf(pmx->ph, pin, PIN_TYPE, num_configs, + p_config_type, p_config_value); + if (ret) + dev_err(pmx->dev, "Error set config %d\n", ret); + + return ret; +} + +static const struct pinconf_ops pinctrl_scmi_imx_pinconf_ops = { + .is_generic = true, + .pin_config_get = pinctrl_scmi_imx_pinconf_get, + .pin_config_set = pinctrl_scmi_imx_pinconf_set, + .pin_config_config_dbg_show = pinconf_generic_dump_config, +}; + +static int scmi_pinctrl_imx_parse_groups(struct device_node *np, + struct imx_pin_group *grp, + struct scmi_pinctrl_imx *pmx) +{ + const __be32 *p; + struct device *dev; + struct property *prop; + unsigned int *pins; + int npins; + u32 i = 0, pinmux; + + dev = pmx->dev; + + dev_dbg(dev, "group: %pOFn\n", np); + + /* Initialise group */ + grp->data.name = np->name; + + npins = of_property_count_elems_of_size(np, "pinmux", sizeof(u32)); + if (npins < 0) { + dev_err(dev, "Failed to read 'pinmux' property in node %s.\n", + grp->data.name); + return npins; + } + if (!npins) { + dev_err(dev, "The group %s has no pins.\n", grp->data.name); + return -EINVAL; + } + + grp->data.npins = npins; + + pins = devm_kcalloc(pmx->dev, npins, sizeof(*pins), GFP_KERNEL); + if (!pins) + return -ENOMEM; + + i = 0; + of_property_for_each_u32(np, "pinmux", prop, p, pinmux) { + pins[i] = get_pin_no(pinmux); + dev_dbg(pmx->dev, "pin reg: 0x%x", pins[i] * 4); + i++; + } + + grp->data.pins = pins; + + return 0; +} + +static int scmi_pinctrl_imx_parse_functions(struct device_node *np, + struct scmi_pinctrl_imx *pmx, + u32 index) +{ + struct pinfunction *func; + struct imx_pin_group *grp; + const char **groups; + u32 i = 0; + int ret = 0; + + dev_dbg(pmx->dev, "parse function(%u): %pOFn\n", index, np); + + func = &pmx->functions[index]; + + /* Initialise function */ + func->name = np->name; + func->ngroups = of_get_child_count(np); + if (func->ngroups == 0) { + dev_err(pmx->dev, "no groups defined in %pOF\n", np); + return -EINVAL; + } + + groups = devm_kcalloc(pmx->dev, func->ngroups, sizeof(*func->groups), + GFP_KERNEL); + if (!groups) + return -ENOMEM; + + for_each_child_of_node_scoped(np, child) { + groups[i] = child->name; + grp = &pmx->groups[pmx->grp_index++]; + ret = scmi_pinctrl_imx_parse_groups(child, grp, pmx); + if (ret) + return ret; + i++; + } + + func->groups = groups; + + return 0; +} + +static int scmi_pinctrl_imx_probe_dt(struct scmi_device *sdev, + struct scmi_pinctrl_imx *pmx) +{ + int i, ret, nfuncs; + struct device_node *np = sdev->dev.of_node; + + pmx->dev = &sdev->dev; + + nfuncs = of_get_child_count(np); + if (nfuncs <= 0) { + dev_err(&sdev->dev, "no functions defined\n"); + return -EINVAL; + } + + pmx->nfunctions = nfuncs; + pmx->functions = devm_kcalloc(&sdev->dev, nfuncs, + sizeof(*pmx->functions), GFP_KERNEL); + if (!pmx->functions) + return -ENOMEM; + + pmx->ngroups = 0; + for_each_child_of_node_scoped(np, child) + pmx->ngroups += of_get_child_count(child); + + pmx->groups = devm_kcalloc(&sdev->dev, pmx->ngroups, + sizeof(*pmx->groups), GFP_KERNEL); + if (!pmx->groups) + return -ENOMEM; + + i = 0; + for_each_child_of_node_scoped(np, child) { + ret = scmi_pinctrl_imx_parse_functions(child, pmx, i++); + if (ret) + return ret; + } + + return 0; +} + +static int +scmi_pinctrl_imx_get_pins(struct scmi_pinctrl_imx *pmx, struct pinctrl_desc *desc) +{ + struct pinctrl_pin_desc *pins; + unsigned int npins; + int ret, i; + + npins = pmx->ops->count_get(pmx->ph, PIN_TYPE); + pins = devm_kmalloc_array(pmx->dev, npins, sizeof(*pins), GFP_KERNEL); + if (!pins) + return -ENOMEM; + + for (i = 0; i < npins; i++) { + pins[i].number = i; + /* no need free name, firmware driver handles it */ + ret = pmx->ops->name_get(pmx->ph, i, PIN_TYPE, &pins[i].name); + if (ret) + return dev_err_probe(pmx->dev, ret, + "Can't get name for pin %d", i); + } + + desc->npins = npins; + desc->pins = pins; + dev_dbg(pmx->dev, "got pins %u", npins); + + return 0; +} + +static const struct of_device_id scmi_pinctrl_imx_allowlist[] = { + { .compatible = "fsl,imx95", }, + { } +}; + +static int scmi_pinctrl_imx_probe(struct scmi_device *sdev) +{ + int ret; + struct device *dev = &sdev->dev; + struct scmi_pinctrl_imx *pmx; + const struct scmi_handle *handle; + struct scmi_protocol_handle *ph; + struct device_node *np __free(device_node) = of_find_node_by_path("/"); + const struct scmi_pinctrl_proto_ops *pinctrl_ops; + + if (!sdev->handle) + return -EINVAL; + + if (!of_match_node(scmi_pinctrl_imx_allowlist, np)) + return -ENODEV; + + handle = sdev->handle; + + pinctrl_ops = handle->devm_protocol_get(sdev, SCMI_PROTOCOL_PINCTRL, &ph); + if (IS_ERR(pinctrl_ops)) + return PTR_ERR(pinctrl_ops); + + pmx = devm_kzalloc(dev, sizeof(*pmx), GFP_KERNEL); + if (!pmx) + return -ENOMEM; + + pmx->ph = ph; + pmx->ops = pinctrl_ops; + + pmx->dev = dev; + pmx->pctl_desc.name = DRV_NAME; + pmx->pctl_desc.owner = THIS_MODULE; + pmx->pctl_desc.pctlops = &pinctrl_scmi_imx_pinctrl_ops; + pmx->pctl_desc.pmxops = &pinctrl_scmi_imx_pinmux_ops; + pmx->pctl_desc.confops = &pinctrl_scmi_imx_pinconf_ops; + + ret = scmi_pinctrl_imx_get_pins(pmx, &pmx->pctl_desc); + if (ret) + return ret; + + ret = scmi_pinctrl_imx_probe_dt(sdev, pmx); + if (ret) + return ret; + + ret = devm_pinctrl_register_and_init(dev, &pmx->pctl_desc, pmx, + &pmx->pctldev); + if (ret) + return dev_err_probe(dev, ret, "Failed to register pinctrl\n"); + + return pinctrl_enable(pmx->pctldev); +} + +static const struct scmi_device_id scmi_id_table[] = { + { SCMI_PROTOCOL_PINCTRL, "pinctrl-imx" }, + { } +}; +MODULE_DEVICE_TABLE(scmi, scmi_id_table); + +static struct scmi_driver scmi_pinctrl_imx_driver = { + .name = DRV_NAME, + .probe = scmi_pinctrl_imx_probe, + .id_table = scmi_id_table, +}; +module_scmi_driver(scmi_pinctrl_imx_driver); + +MODULE_AUTHOR("Peng Fan "); +MODULE_DESCRIPTION("i.MX SCMI pin controller driver"); +MODULE_LICENSE("GPL");