From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-SH0-obe.outbound.protection.partner.outlook.cn (mail-sh0chn02on2104.outbound.protection.partner.outlook.cn [139.219.146.104]) (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 D662D3EDE67; Wed, 3 Jun 2026 05:54:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.146.104 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466057; cv=fail; b=icIMGnV4QFo46Uz3PyPfRdtvfoC+NapwhC9D2uzR2c+p5Ub9xC0Va5huGI8SqsMkqyidSxcqerYjybnZ74TaQ0rzZ5SBfcakTNzrFB+oQGRmut31T4jNt5PCOkMLS9sg76AYaqSUhhHdu8oa6tm+tiKqeO1Tmb89GX8/Hsxo5Ns= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466057; c=relaxed/simple; bh=teSwUQT7T4UGvcYR8dedO5tCdG2oJNvdmzbpvZLC0Lk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=WD1SaBXo4oeZC1mTmepJXiW5rRZlM3dE75bSuhVe1CJ79485TUqCooa6TCSwkr8a9bUuC6LPYw9IltVNQ411hJE8p1eZ4WJZaMf4SBu4K5L9KrXvpINGcZyf0wJDKb588rNmtT/g9hSwWI/lR1usrSvK8uYzcEYQZBwKxg8pZdU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.146.104 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dLgwMHYqTtC77mJgQttHJeTAvjEk5M5u3GbW6GBbC4hwaWgjZ0NjJybdPdPlKYL2nzZfa/z1HGrMmsKXro/JJr4uWl58Y1e6sseXmnuJMRzizD5M0LqwAb8Seo305N0ZBnVvLdKqyOQ+jztBeK8ymeMtQwXGs1E4LgoyTAqDoKDCWmhIBAsPb4QDiX98B3MUk+z/n81prTDRXxe7lTI8XYC+5DkW447G/Fhw397XQ4jiSvZoP+fBtk+ZTVvSn5opGxIMy5z+iTHRNznSqmSCBzOUjxZhSGowk8DW1gywoMUDiiN7vvdNSUlr1f+KQaKBIznykV6OncurbKro0WQjwA== 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=XwkTC5X2ZeVunywQtJdFR39QzwXUzVldTr1z4Q7gF5w=; b=UJad/MiDk+oHGRz6V7zHXSxRFyYYj86mysHXFBZXDo3rw8VS7gxs7l2xqeDvDWhPFtRzc2PLaRPEOsvSgpmyrOOUgK/92JKiGTyyGgcfIkMMHhgxZYYjQzzfFJl37wil7HJm6Yh7bA+K6HRqX7qEzVblF2YJw1G5cuu9QsrRHZnJl6sePyVfO8nHRSPWW9TZSqHH35bHMFq0J6vpUnzUuVYyKuF1LD45bVvmoDr6VJEpIgEy+tnj3RKqJ2dLaRF7lzrjVwInrR3Yt/LVwVuJXKkyXQXBDUte7rbsfSv5RXGZj+KYEKRZ+4+CVUcL8Dne0H/m9GBu4ZNTFISghvSdRA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1171.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:15::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:01 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:01 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 01/21] dt-bindings: pincfg-node: Add property 'input-debounce-ns' Date: Tue, 2 Jun 2026 22:53:27 -0700 Message-Id: <20260603055347.66845-2-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1171:EE_ X-MS-Office365-Filtering-Correlation-Id: 81431e5c-7d36-40c9-1ace-08dec1348304 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|52116014|7416014|1800799024|366016|56012099006|18002099003|22082099003|3023799007|921020|38350700014; X-Microsoft-Antispam-Message-Info: AvB4wW3Okx6lDJoQTCl0RrMi00VOpHwgo4uu9p4kzHBSbwn4NdqNfcuntzI0jKfki6Wv9RrwPG21bbpi0oOcI0DpZ06bx3dnERQd5wMU0qz/nOIVzqbm420r4iIGQrVzbgdBg7sggF3TT6NQZXhmTesp0+Nt2Htkq47//Jx0e2SvXhfsVrRZi8M5iVTfhXrXYvVhh8J3PNnAXnCcxHlbSJzarnCy9EAfNtLTYCb33WlpfkOVus2wl2L2ZtdrK2vVnz6IOSNbsXQkw5hhnXezZ3yRoVXBlWN5UQzyTaeJu1brPI5ZqmTfE9ZW2xj8CKtZEDRmPLlrMyXltMURBUkd9T/a2SxvGdttkcWv0oTEXLFasGY6sVGv35casJyZuGyLSA/wpo/HBW7HKsSl+vRB1Fiu+946f+PztNFyESidonppwyhxrEs27DdU2gQ98sBYAkk9eib8SrsjyFfSa7m7zmE9DlLEq0Uvc95KH3AH27PXVrQZriq2AGI/USYAhpyxgKouxTjRAFteVnzIN0w6xsv2K0BJ4ID5eofko6kFwzRTRDGCBG2fS9Q6TX50+IJ+7osbyq0QGf653X46fs08Mg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(1800799024)(366016)(56012099006)(18002099003)(22082099003)(3023799007)(921020)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wH6DOY4QLOowKsyb3PAOuF06WqJVQSzMV4/CekwI8wCbTN7otUdI+csupNYN?= =?us-ascii?Q?GSSHEMJ3jZOfNPEj+bLNx39bRDIvCW0sPzLwhe9fh56Gm0Bqr0nLPRBrswd8?= =?us-ascii?Q?r3PdwPe8M5Z/UgajTS/LjmynkbsHFa2SthGUAq6Na/dF/H1DbxC4fvMYQyUa?= =?us-ascii?Q?x22AbKs+VSQrspX6oRordA+qOjagj35i8PKFRecA/iK60SUXNILKlcIgYj2Q?= =?us-ascii?Q?aDRrGX3wldmof1X8T09BlwKxgqbPWNzlu7h/NhNqVi1WS6WujsdZRPF5YOWE?= =?us-ascii?Q?1K369O1d7caBhCrJqmRm5mqgBIwg4btgO7TgMYF63eNey89ju59mS0LtIJSG?= =?us-ascii?Q?PnJkRJ2hPIUE6RRi4esbXxn//ofhJiP/b9en5grIv0SSorEFVTes2gh6P50g?= =?us-ascii?Q?o+hGUr0bK+QoXqx008AxD9uGD1hj8JFxNNKKaiaSKePtgucCD+ptXyh+TawL?= =?us-ascii?Q?snGzAap0ZW79k7vWaIxOm2JK6cjP0BFz/c4/4IwUwzKCdVC2+CcaPH1OddGm?= =?us-ascii?Q?OWe5bTu1UPP0GQk3xX35TaGML1Ep5Qu5JM2PCi3+XekzMCUyuIEtqUZU7v+1?= =?us-ascii?Q?Jxlmj4d99UcsL0emIslDwHZDGGcOFkQ4trUTYn/BAUm4eBLiVFzIcC8IqSjJ?= =?us-ascii?Q?3kg2K5+v+C4n8ss6Wb+SmEZPk6Z58O/pY9o04fP2D4jTIi7ClWj6pNSdgbRY?= =?us-ascii?Q?v7GtYZLiMTCGYI4kKOH+CHOUNOyQipPbyyYP182mPp/u9n7QdIA0nYhlbiXZ?= =?us-ascii?Q?FB7pkdjCRxLTNfcKBpPzLjek27hWfh0oSyiQ5WRBym0I8g1SkWjFYFpVZdrB?= =?us-ascii?Q?HNT75TojSQ585lAC0l/4zFnfU7Uo+0Gfru6bjwcwCrQTQGJN4X2dOy8n308X?= =?us-ascii?Q?asVS6HVuGo4DA6EIkZTl0rCR0rNAs+YrTqvCcyiNuYiFLUL40kvyIRshiTaY?= =?us-ascii?Q?3SaARZw0MKtfTpxSY6j5llYuY3SlRXMZbCddIyv0L7Si1roXhV4qpdAYLANE?= =?us-ascii?Q?Y+UNj7koUD82CRqkkkEPMb1cFdCyOKV/71c+kLdmIfirmPa38HVjT1yLo7s5?= =?us-ascii?Q?upqxwZPMuxM5yE5hfoAX+ZuofyKeNm2IIy44JtkgJPWEKWp1L1QLNQzKdtJA?= =?us-ascii?Q?KDQl3BOp433M8VGY+YIffGWT2OMDblsOkJTNtBWNXlnTNNijFu64M/j7Yz2e?= =?us-ascii?Q?sSKw2b3bZY7jlHs3ToS9W7Z4Mr1nKI8PB2eMf8KOEYOPBCnvnmyebJcvHIyg?= =?us-ascii?Q?CuT8dpF5Va4m8tw0Rmm5S4x1NQd9r5axIvK37+5pI1orwaBLY3WS8frVLasM?= =?us-ascii?Q?LVh6/5zZO4Pj515R04roQJF2Rqt5Wkgyt75Yqp+1PctTSFpT5pJX1XW/vKeC?= =?us-ascii?Q?tFZkVUZIImsNhNNJe95Dr4NmoW09Evq39JO+gWQIfI6PILAVrajdMlx9aq58?= =?us-ascii?Q?QV8xXlcEsqJ7SrDc8GxuqIbKtG4csRDvJv8/DnHKQ3xmPIv3Y9PQvU7HDGYn?= =?us-ascii?Q?YtOFXAQFJMW/nBJImeH1IaCb0dKJDAqVECFJ9IrOkt00KsroZfZAEK3jJBdY?= =?us-ascii?Q?ry8MF/n13m2V/3A8aVmZC3fO84rkX6qcFhcyGtH/Um6K+vNe+4xsYNOsplA7?= =?us-ascii?Q?+cpI+F9wOCun4RNVicyENfNUOkbtTJ1MxXwcSoK/XrWtZie7gQboiMxwLwli?= =?us-ascii?Q?Tb1wNJ9YrhjiWPPNR8F9R4He1Uf2bCTTzv5Y+c2BVrh2EZMUhBPUrL7s0BNP?= =?us-ascii?Q?Ulwjh5AGb53uUl6iWeP2FjzKqEwWq4nRgld5vW5+pMKw93g2bnyg?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 81431e5c-7d36-40c9-1ace-08dec1348304 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:01.4422 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: gURXdB1tO9oSHbrGghOudJPVaUO+NKJZvksaqEcPTVLM7qCZWuXMtVb4FhYKXv+U3Gv8RwsVJ81xxAAlesQOmxRhqDJt7hz5ocu3PJppVhxJoiYnwx5Y0oekcDbvGgwO X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1171 Content-Type: text/plain; charset="utf-8" Add the property 'input-debounce-ns' to specify debounce time in nanoseconds as an alternative to the existing 'input-debounce' which uses microseconds. Make the new property unavailable when the existing property 'input-debounce' is selected to prevent conflicting definitions. Signed-off-by: Changhuang Liang Acked-by: Conor Dooley --- .../devicetree/bindings/pinctrl/pincfg-node.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Documentation/devicetree/bindings/pinctrl/pincfg-node.yaml b/D= ocumentation/devicetree/bindings/pinctrl/pincfg-node.yaml index 97dbce8a261f..17a6270dce31 100644 --- a/Documentation/devicetree/bindings/pinctrl/pincfg-node.yaml +++ b/Documentation/devicetree/bindings/pinctrl/pincfg-node.yaml @@ -104,6 +104,10 @@ properties: description: Takes the debounce time in usec as argument or 0 to disab= le debouncing =20 + input-debounce-ns: + description: Takes the debounce time in nsec as argument or 0 to disab= le + debouncing + power-source: $ref: /schemas/types.yaml#/definitions/uint32 description: select between different power supplies @@ -214,6 +218,13 @@ allOf: input-schmitt-enable: false input-schmitt-microvolt: false =20 + - if: + required: + - input-debounce + then: + properties: + input-debounce-ns: false + - if: required: - drive-strength --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2113.outbound.protection.partner.outlook.cn [139.219.17.113]) (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 6948D3CB2CF; Wed, 3 Jun 2026 06:09:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.113 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466982; cv=fail; b=Su8J8Nx3ZADbcADjFpEmJLYdFlFPCgNQZ0DJaLeLbsOrBrB3NqVD7/WctYhPmOkODEs820JuCOMbYca/zozT8bePKkuwWkygVUWsV5nO7N5D3iav+XkZvere37Mbee/1LittVThcx6T4Phm/INmrlA+4ubJC0WtAcdF28EeYa/M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466982; c=relaxed/simple; bh=9G/ILWmPpwc/UO+Yk4v1wYHAuz5C0l1PRggMhpG4Ua8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=JK9/d22kRZKzK0UGclzRuBHCiXeQ5V6uv9MmDFtPTLldrImpUr50zy2XA3zxQ5LgBUD+vRLa6TS4OOxXbqEL3US/2GrA6WQygCu14HElduIjQT6Q1jJ+frsSKI4ev23FAwXyVK4+sOTvmsi1vkTBw7z4j1ctR9B2hucAHtHpFUs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.113 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FgMduDjIvD1xFIZvzdGQ3jNP2MXR+WGlkmjVGWF9hds1/3cd9VplcnyqqdzUw5rmoWFB3IhXgrs5ZlKaoi1WMmGoJcwTM8ZAcBM4G6onX3+o16nnqf9C9yHn5X8xHN1WQI8SykmcGypJcVc9bgz6CkH3IhZphi3VLygsgtK8DYba2g0ujllDJu377vTRlV7EIgdK8DpWjeoNMXc6jwV1G2CnfewOBXe0dZRr0FChdbM3/GHbHnqZxsOTAirdDaoNKhz1ah3likNMPUk0WTSxxwEV4nmBc4blLSk/1jR3UW1MISCbD1RMYEXS41HIArfC8DH1Mi5cJwYFaFs9cWAF5g== 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=PzuxpJAL8jStQzoMYlnEmtobevwBFQ4zcB6w6buW3uI=; b=IlpSUy4ghxHTleEj46wozDfgRz6WSA0WBausQPuVO8Uda+958WkEpRICe7EVHG4gx6iE41+TzqlQApe8VMxfS3TsaELnOR2IT/ikhZnkS6oC+6F66hfySdd5JspGFoEKhXGQR7S/Swlu1rAYZl9xK64hzgvN50i/j2MTgzryJQeWerUft1Z4jZAOMZ2UFIKYvltoki8u1FgphucucfWpqiluS8c6ePp0AFWWbHonIXRQS/etWllIG4ZLl50UTMHDJ0CLmirPE2sffzN4lqQfV6QLNBBZR0wq09R7w1yLcjO7voyXMtZXurXF2rS1zwYGHMZyh/VRc1MnpmB+4DdiGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:02 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:02 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 02/21] pinctrl: pinconf-generic: Add property 'input-debounce-ns' Date: Tue, 2 Jun 2026 22:53:28 -0700 Message-Id: <20260603055347.66845-3-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: cc148277-b50d-4c1e-c9a9-08dec13483c5 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: 0V3arIO3FWgi+yboYht2z3m2nh5OSErDOzg8PzwHMUK5hlTYVIjP+xbduvW3wAc2OTmVJC6nsh96U8x2Ihj1uQ3nFIqWOT0CpCCHaYEX1UxzZrY+rP3N4ATYPFfYwHCxRymHnJILbOrXLrbnpo+CIZGXMODnZOhHGHnxegx50+ZDz+HABpIom1vlwFwsYZQ6hx5PMANnGZj8Q6EAm/2gCwZIfZqTtQQwgJCwkHYxHSbXJ5HLTCFS+AIpJxDqVkg5ntpP6Vj90HD2eqRD6vyWgB0isiM+eCmcnAYS01UVEbpiLAu04DTZamZ9jUgaZFOEOFw+tbrZtkLgLH8djMs1L4vEVrY2c5W79oCh4IqW3VmdO7YblJ2KbWg/4kcD3iC83fZ1UGGaY42rMbT/4dLMTBABJzBgNKsESY7BPLEWtuHTGCJYMCt78KR7Bea6rAbVKq4kBex40TtKD+yIGmiiKnk2jPiKgT2VJxo4vRAvNtHLRDIkqSIoLX4aZ8jat0+ztrMna0VgjgzNN5p2nbvaEdAQi/ScDJKPknWN3U3AiaItVHvb3pA26QVG+OoZESrfaqlo/KB2NA5TV47zZ8/OWQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?xFPO+hQNTHxpIZMFzfNxVlxFofqAd8lFTYH0YRYMjhs3OxKBVFsx4fCFI7z3?= =?us-ascii?Q?f2s7P9uHDtzN5tzk57ZY/1uzLK0GZcVJFaOre9S6SE+hQYuosc7hPhUXch2K?= =?us-ascii?Q?9JyoSr3sDJkfgf0JaBekxlY7MoqCkZC0PAgxK654vUfYN5UzaO5buu4w6dsj?= =?us-ascii?Q?VHJfPpzBbKeurhN8Dv+eicIZT8DnmcRfcS6qUR2YX1dHSWrSL+BKdFzavMTe?= =?us-ascii?Q?XfiKM2Ycp29uW1unsmmUkh1TxZRGV+GrFd/oNwqxuHqR6BhA7t38fVlIbyv6?= =?us-ascii?Q?Hr1A7Kx5no0QEiTyxYJIaXiJ9qrVHycwKglsD+QpVwRJahU5GSRjNyGmL1Ky?= =?us-ascii?Q?4w8BM9Y5pKBOmnZe6MTlz+NRYT+bdNrOOwMqoApK6DVBS5XlLgTbpX+PYJiy?= =?us-ascii?Q?Lf7syYafnQcXzRr8xnZ5waSfm/FzIx6Zrfi6MfCE2YC753KJHSMd0sFvrE3k?= =?us-ascii?Q?7cvWMbT16e8ILj0W0EvHWqohEbQW3TFCHfBoh95dghVDPDqOU9A8kUMxB46c?= =?us-ascii?Q?r2lZdPJy8u0iQBOnBzXuxxI7x8tDMULlIeZIt/dBwV+nYJ/nljKqSB9MmRny?= =?us-ascii?Q?mC9pz1DTlGfiRY5sG9ft80Ej5Di1jxZq8MiartuWZ7t9WTiDmeUnuqV8tack?= =?us-ascii?Q?AiBD+qN0hpe+iiKblk17QKtLL6sUBJoM7riU/m2749LP68jPSaxyIkw1BOm5?= =?us-ascii?Q?nB7+y9qG8SkS4xsJ9TB2AVHxCbW3xrPWuz4EeSXf6ZVxReEYQ7M3cQ1Mm5Oi?= =?us-ascii?Q?ok6+YIEa+o10Lg76F4i7j/52Xeo5B1+okuKWdx+1/5Qrxt38eYuTHkx1Q0wI?= =?us-ascii?Q?w36AumdxYwcUqVTxywaseuDZjFx8JOmz/0kDYzjoXO5RPfyFmSSr9WohUam/?= =?us-ascii?Q?oUOSX5ggzdiTr+BG0QnZBKt4sffxPQa9qzyi7ZXmFKzDfT2SGZd5IvxzqJhk?= =?us-ascii?Q?Mto6OOr105iRJZbtK66Xi4uLSsKqbk7qiiOXu+5ssmYXamps9RQ8HZeM/+WZ?= =?us-ascii?Q?jsOD3TeYeiqY9EAAodrNQ75pOM1tRI3UfKfvly02MfwhROfgFq56PxRM7seM?= =?us-ascii?Q?ReiETxdu0rZWQ1LeM4APnKLgGeDMWZ0sSRO3z9p401IVEma+z41iLt/nwV8X?= =?us-ascii?Q?evrNHorf0iWO5gxxZ8jSYucA4rHDO8QPQscMnTc8pTZG/FfaohkvdVjxKp6p?= =?us-ascii?Q?+WU8Qnict18x0UxbxpQoQC7RX2EDCm6h8etPW+uQHT3CYC7+NMtWr8WrDRZz?= =?us-ascii?Q?8AirB1IeyCV1uEZFHvrI8vQ4TB4hiv9xUEmBfV1dIIknBh1TzMPSKIsiFx3m?= =?us-ascii?Q?89ilQ5+GjWWUMjz7rPNPOmMFgxlbY3MoI9ZzPJQz3yLk8w1ID8iUJmOvvWZ4?= =?us-ascii?Q?qg4KnBcMsq6/02lgKeTKirF5mjfCG2jQlNeE34pMVR8qdFqV9H/Vv1diX0C/?= =?us-ascii?Q?QY3G1HBCOdIaZL0aSVMJfI3obv8vOlGnLMbLp6AbCEh9inN+ZJ+lHsa7z7mz?= =?us-ascii?Q?Spy50C9zAQnW/ms66xCY+3GnxGo1K2KHphJBJGa/2aTpRZYZaAy42cxKHr40?= =?us-ascii?Q?i6PndhiBdA/EZ2cDcrxuUACEC7T0hwxa5YqDJk1DIe2nyjhxmy2hUc59z9u2?= =?us-ascii?Q?aV7pmnCTot5+oJDLBdVzvWyLE0L+efCBUvkpRdkOA0iwIsu74BG3xvkkN26M?= =?us-ascii?Q?S8+I8bJxrN7gHnVUQajM9zJe3k/2pKhR84iIPWiaZhnGAiO/ghWguZvLF9Ma?= =?us-ascii?Q?BzyXwWl+LcdR3NVVh5kr2oHQSdYsavevKtO+5MQZ0AwSxr4fjxnr?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: cc148277-b50d-4c1e-c9a9-08dec13483c5 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:02.7444 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: eD7Z3mCZVItYZcHemyXgiHAIUV0TOBXS6R46N1K1dgx6dlke0R29K1xUBBYKtjAdt7J6X3tNhp1zwxEkmXYI1tTLZfUdcoG6iWpCf12HeSXiG+lYmRK7Bhay/mmzOyIm X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add 'input-debounce-ns' to the generic parameters used for parsing DT files, along with the corresponding configuration parameter PIN_CONFIG_INPUT_DEBOUNCE_NS. This allows debounce time to be specified in nanoseconds as an alternative to the existing 'input-debounce' property which uses microseconds Signed-off-by: Changhuang Liang --- drivers/pinctrl/pinconf-generic.c | 2 ++ include/linux/pinctrl/pinconf-generic.h | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/drivers/pinctrl/pinconf-generic.c b/drivers/pinctrl/pinconf-ge= neric.c index 64ed28309788..9d67e2d26e28 100644 --- a/drivers/pinctrl/pinconf-generic.c +++ b/drivers/pinctrl/pinconf-generic.c @@ -43,6 +43,7 @@ static const struct pin_config_item conf_items[] =3D { PCONFDUMP(PIN_CONFIG_DRIVE_STRENGTH, "output drive strength", "mA", true), PCONFDUMP(PIN_CONFIG_DRIVE_STRENGTH_UA, "output drive strength", "uA", tr= ue), PCONFDUMP(PIN_CONFIG_INPUT_DEBOUNCE, "input debounce", "usec", true), + PCONFDUMP(PIN_CONFIG_INPUT_DEBOUNCE_NS, "input debounce", "nsec", true), PCONFDUMP(PIN_CONFIG_INPUT_ENABLE, "input enabled", NULL, false), PCONFDUMP(PIN_CONFIG_INPUT_SCHMITT, "input schmitt trigger", NULL, false), PCONFDUMP(PIN_CONFIG_INPUT_SCHMITT_UV, "input schmitt threshold", "uV", t= rue), @@ -185,6 +186,7 @@ static const struct pinconf_generic_params dt_params[] = =3D { { "drive-strength", PIN_CONFIG_DRIVE_STRENGTH, 0 }, { "drive-strength-microamp", PIN_CONFIG_DRIVE_STRENGTH_UA, 0 }, { "input-debounce", PIN_CONFIG_INPUT_DEBOUNCE, 0 }, + { "input-debounce-ns", PIN_CONFIG_INPUT_DEBOUNCE_NS, 0 }, { "input-disable", PIN_CONFIG_INPUT_ENABLE, 0 }, { "input-enable", PIN_CONFIG_INPUT_ENABLE, 1 }, { "input-schmitt", PIN_CONFIG_INPUT_SCHMITT, 0 }, diff --git a/include/linux/pinctrl/pinconf-generic.h b/include/linux/pinctr= l/pinconf-generic.h index a5d4b2d8633a..1df63c732b99 100644 --- a/include/linux/pinctrl/pinconf-generic.h +++ b/include/linux/pinctrl/pinconf-generic.h @@ -71,6 +71,10 @@ struct pinctrl_map; * which means it will wait for signals to settle when reading inputs. The * argument gives the debounce time in usecs. Setting the * argument to zero turns debouncing off. + * @PIN_CONFIG_INPUT_DEBOUNCE_NS: this will configure the pin to debounce = mode, + * which means it will wait for signals to settle when reading inputs. The + * argument gives the debounce time in nsecs. Setting the + * argument to zero turns debouncing off. * @PIN_CONFIG_INPUT_ENABLE: enable the pin's input. Note that this does = not * affect the pin's ability to drive output. 1 enables input, 0 disables * input. @@ -143,6 +147,7 @@ enum pin_config_param { PIN_CONFIG_DRIVE_STRENGTH, PIN_CONFIG_DRIVE_STRENGTH_UA, PIN_CONFIG_INPUT_DEBOUNCE, + PIN_CONFIG_INPUT_DEBOUNCE_NS, PIN_CONFIG_INPUT_ENABLE, PIN_CONFIG_INPUT_SCHMITT, PIN_CONFIG_INPUT_SCHMITT_ENABLE, --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2097.outbound.protection.partner.outlook.cn [139.219.17.97]) (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 6A5863EFD29; Wed, 3 Jun 2026 05:54:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.97 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466060; cv=fail; b=a1VRri14K9u41sTA2h00CK8jrSWax9pVNFeMxJTKWRnqg1bOLnuDpEegerWjg9LPP0oxmE1OR+F0BXyBxyf+TJZ/uGG0nsjOv/awA5uza4R8a+IFogEkb1HkDc22Fugu0MlAn41akvFcV0vwTwvbr26U/mQyps+msTjWRsBksNk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466060; c=relaxed/simple; bh=aFvylQfSN2d945+IqOx1otwN60uv1I8Go1pA+HqD6Po=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=FuiVCUQ9H02OYfsJeM19VxyFqk4FcVm6lOnhvmu1qDCeMUR/K8gQzXfPNqiGWUsCrqj5hQlXW/HOy/HVh9EeXgSBOrj7gB7KFenlqG4T7enP4608yokheRoby2LIFLRwsGNcCsKseXEa2Ut3yrkhqnPtioSivS+5g2YEXA4MkjE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XDmCY1Stuv2p6uUuHhk3hI90xBy1gI4IFzjBwKJ7JBLCzQUgZ/Nxv/362dxhYKuEfs8MJqNgkaUTJ5fBMlj/fl19YoWQTcDb1f83KVLfIghbiHOL5K9qwk1x37FsnQIx2H7Ee3sLIoA5gCzrRAYT3RZdBbLl9RhxShles06l1VGLzF7VOLWUYhCHKRLZNrvH9ij80zP5bzN03ngEwud+By4Wu9JQuOwegsbtAMc4nDIz7V60amESAH+AqPh/VsA3xPXqjn3gvkoJ+jlutqIoXj6ea3FwXcnPohF3uwi/1OL7DPyPrIOPSqXL+DeNYjkKniZCd5BFRGOvglrRokpENA== 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=2UBY/+KmzO6oc8d/rYlrh0pCQE4xi0rd7odwlX6hchU=; b=k4hM1UkgElZfuu4QFFAMzWTnO6DIIirolnkv64THs9I3O4nkH/3Fsrbv3M1VG/DgFbupg4UIZarWBI9xGRwht1CeYLX8vd8NTwdd3+bd50E6HQ1TC3+Sw7nYrjsIb0/0HXVQEKuFXKr4Gt8CcfIy2pj8StgHOuWwQ77xXVr/rycTFydpBk4f18QYIJ4jgSg52l8JAPnA1j6ynmWqBJoeaODn3K35/XcnYYzPoPwyvrHVveWGDLpOprVPyULE2tNZZWlvZGVPe+LF7ZS3QRFTvNFf2+1QghfZQ7ViG2rt7BNzPZzvGrULglKlyhjC4DwKxirAxRURMq+ytLiAFlwogw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:04 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:04 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 03/21] dt-bindings: pinctrl: Add starfive,jhb100-sys0-pinctrl Date: Tue, 2 Jun 2026 22:53:29 -0700 Message-Id: <20260603055347.66845-4-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: b830942c-9331-4bf8-e7ef-08dec134848e X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: ghoGWDpIOuKjK7xGGvis1qQ3h9xAZlHy5lbrFaIj3bJ2P42D94JDwbYVvSzGE0GZCEyrL1hPLKyc8Zess9iSXMc+bvhKXgsfaHr51itJMV5f8+lUn8cCxFcue9IcVKczKpdP7Czmc48b9hBWMtkGvCeMekmi5DpBBYchHFFA5lvdo8ynEEoYCrN6RAgeyA/wN62I2OtRT39c5RSb3LEoGiYo2IBDVjnm/PvPDXNpq5t/5yBahJVfBS5nL1w3kmrztqqWV3t/obButi40iFSGqCcuDfLojHrv8EQXGNSgzFZYPEjLVrE6IYnXnLoXmOZTJxdVmL6t54nAUfnKe5Q8ACoXM7Ot6Sfx0EmYWa+GaGDKVHUDbFAGTWZc8oBBDngYfMR8FyI605XZaZfv1antC8bb4AINObm88UUT0VwGVIOq19igy9x/FEnEjxEgO7pArHrLkT9diVw5h9TXeCJ9BQE97eGEBBUwk830OsI/sSVlWaoVnXrOiq0qAwVW2sBTVajjesI0YKr2Pkwf9vQH54Znq3Ghh5J/Kd2WM0tXJHPFtEDsVvHWOn6BNouS5xe2bca75KSg7a1c7aFYVt9npw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zhJriAx+xPWt5FUsOP4/Iw/TBJ1+Wl9i+HXBPzxi67kbeR2/Iu6SFP0k285q?= =?us-ascii?Q?fKd/A8JmbJzpMKgANc8uW/ikUYBLiaBHYtPcBUN2Ag6oCQVsM+VEBjyBew7j?= =?us-ascii?Q?a9Wuwc9etCYNvZlpfn4PzsNXfb3J6iSOMjMP4TWNetAuc7uGnRJOb/37wII0?= =?us-ascii?Q?s9SLtis+WWNZShfDULFXk40SZnVTnNxVhG3iIt8yZJdBNOpruApmB9uQhLRC?= =?us-ascii?Q?OCbATVCJaa+5e+u7rHX6jM96K5nF7x0Hi6GWKD9x4UnDhwzzGw5WIr0HNkez?= =?us-ascii?Q?mb8Je2XlRReLDDBltYhv94x5b+I0WJYd++yjNxBbO2K5YF5lmXena1wPaxdW?= =?us-ascii?Q?l4bHATSzvsOkTlaoKabNVwythWPodnTrCKpDV/F0LbKGSrLUqdgn+wmxFpCW?= =?us-ascii?Q?CSGaYgDAclXkFDY026DOUFyDqDxJc+NZ1guhgTj+I4QxOE9RHSdDdpzYMvlM?= =?us-ascii?Q?G3lufXH23Hb7ozrhFhYRFpXhpkjahzbZxTIbNEaC9UZpC9eB1+kJnVzT4Oy6?= =?us-ascii?Q?6lieXC5olgMFZw3RVNK3gnVJege3u9YNyUrwbCLZ8AbkhJFoJdxlEVj21VHl?= =?us-ascii?Q?+aOLoVh1C7X+vs4jLqaDie9L2qp/5M0rTPWmn67JEFj56brgbPa/Ntk8lUfS?= =?us-ascii?Q?bnVz7fWuglD1BpRgcCLrGc2cIDdFIDfTlTBnTCqIf1jIhStwvBdkBNYNHKQg?= =?us-ascii?Q?jNE2XV1weJq972B38EvAM4Ag07JlFD6+eStLIEykz1bhGjmjPHl5OhNhLZkO?= =?us-ascii?Q?zj6zsFri808AuqZ2XoSBpYG1tYh5ysiWuqfo4tjkj04DBB5DmX5zUW6brq3D?= =?us-ascii?Q?DnY95NxHtib/XDfGr+wbD9wnOQZSG0sDoew1Fu7MCWu6OUiX0KJ4gQsTRSaZ?= =?us-ascii?Q?iPdMzKukaeGLVtiwp+1nOOarKgFakAtJAd8D3sotoRLJrNJwat8FczRKhQvs?= =?us-ascii?Q?BSXxGWd6SKjvMGOko7p0LXJKUanwWby7sgKm7wFToeDeUBUkVuLzQe5OcOgE?= =?us-ascii?Q?QIVNjHyQlISf9DIgVBlH7BGKk8yPH9mSTo7pcgXIyapoiQ43sF7ao3eoSgeg?= =?us-ascii?Q?m6Ezm1rFuRIb3a904Orgbwozu07FS6rW7Y1DTxMVpg8OVy2Hmz+1KA11dshk?= =?us-ascii?Q?REeG3hEjJ4dUYogu7NU8pN83Kt5W9C8d/lHtND+pATI5I0jXaumIvFlGeDWD?= =?us-ascii?Q?RwyuBlB/b/tIDcw90TdgmNyh6IEG7w5vdDxMK+NN6n4WS5PYjGsRu9x9RTw0?= =?us-ascii?Q?T6P7R9NMJcZC1d9M5YS44l541Z4+PTykt3cX3WBy3InUzk8QeLAxzjrR1DBJ?= =?us-ascii?Q?ARFvhZBoc79S8ut3wpVm87HTTr1FO3wyNv7a51niih5EgkkmDqQKaXDX9SiO?= =?us-ascii?Q?62NsaLM/dM28iohx0cx56FwXvYPh/S6DkHk7gp2J9vigN7bPtCeMsDNSgowr?= =?us-ascii?Q?LPxvpOZnFwl3bAnuop2YJZwvGvKam7wZeb8jp7rE2Ala8fOY6Xv2+gWutinA?= =?us-ascii?Q?hGJt8ukf/4Khi/jzfo+fukXB/eX7fyV/29gJQFMS5Al+QyG4zE6IvHwh7IPM?= =?us-ascii?Q?tJj00jvhFK382P1AReaQmwgL+F7uwI3H0CDPbWob9kB5OyLeyphFiocugeE4?= =?us-ascii?Q?iKQjM3d5HuLXkmIWdfKQUPIcZFq7aXEzOJhUWkSWuUglJLVx4qs3W1tRQhOt?= =?us-ascii?Q?0Sfh2U8YkN7iOrpUMG9lx4ApI1eUr2i5k1nKgxjXIppX8iIr1rLB2MUxxqGi?= =?us-ascii?Q?oYlKy5Q/bZO7dQetQF5CZcbEMDwhG24Hz3gXA7xv6warRXz3va67?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: b830942c-9331-4bf8-e7ef-08dec134848e X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:04.1090 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YvsLdoLWnApivzo6ZKHyZt9DAdncd/t9cOSsHKxhfULPLmw2/D3f6ethDrwVxCDr/LDsR8Yb5vhk1j5lAf7r7D7lfUh1kOdFqNkfYpOVOCcmSsmIdlXl7R8W5gpFPKBs X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl bindings for StarFive JHB100 SoC System-0(sys0) pinctrl controller. Signed-off-by: Changhuang Liang --- .../pinctrl/starfive,jhb100-sys0-pinctrl.yaml | 161 ++++++++++++++++++ .../pinctrl/starfive,jhb100-pinctrl.h | 17 ++ 2 files changed, 178 insertions(+) create mode 100644 Documentation/devicetree/bindings/pinctrl/starfive,jhb1= 00-sys0-pinctrl.yaml create mode 100644 include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h diff --git a/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-sys0= -pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-s= ys0-pinctrl.yaml new file mode 100644 index 000000000000..1baaeefdd090 --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-sys0-pinctr= l.yaml @@ -0,0 +1,161 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/starfive,jhb100-sys0-pinctrl.ya= ml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: StarFive JHB100 System-0 Pin Controller + +description: | + Pinctrl bindings for JHB100 RISC-V SoC from StarFive Technology Ltd. + + The JHB100 SoC has 13 pinctrl domains - sys0, sys0h, sys1, sys2, per0, p= er1, + per2, per2pok, per3, adc0, adc1, emmc, and vga. + This document provides an overview of the "sys0" pinctrl domain. + + The "sys0" domain has a pin controller which provides + - function selection for GPIO pads. + - GPIO pad configuration. + - GPIO interrupt handling. + + In the SYS0 Pin Controller, there are 4 multi-function GPIO_PADs. Each of + them can be multiplexed to different hardware blocks through function + selection and each iopad has a maximum of up to 2 functions - 0 and 1. + Function 0 is the default function which is generally the GPIO function + (or occasionally, it can be a peripheral signal). + Function 1 is the alternate function or peripheral signal that can be + routed to the iopad. The function selection is carried out by writing + the function number to the iopad function select register. + + Each iopad is configurable with parameters such as input-enable, internal + pull-up/pull-down bias, drive strength, schmitt trigger, slew rate, input + debounce nanoseconds. + +maintainers: + - Changhuang Liang + +properties: + compatible: + items: + - const: starfive,jhb100-sys0-pinctrl + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + resets: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-controller: true + + '#interrupt-cells': + const: 3 + + gpio-controller: true + + '#gpio-cells': + const: 3 + + gpio-ranges: true + + gpio-line-names: true + +patternProperties: + '-grp$': + type: object + additionalProperties: false + patternProperties: + '-pins$': + type: object + description: | + A pinctrl node should contain at least one subnode representing = the + pinctrl groups available in the domain. Each subnode will list t= he + pins it needs, and how they should be configured, with regard to + function selection, bias, input enable/disable, input schmitt + trigger enable/disable, slew-rate, input debounce and + drive-strength. + allOf: + - $ref: /schemas/pinctrl/pincfg-node.yaml + - $ref: /schemas/pinctrl/pinmux-node.yaml + additionalProperties: false + + properties: + pins: + description: + The list of IOs that properties in the pincfg node apply to. + + function: + description: + A string containing the name of the function to mux for these + pins. + enum: [ auxpwrgood, gpio, hbled, pe2rst_out ] + + bias-disable: true + + bias-pull-down: + type: boolean + + bias-pull-up: + type: boolean + + drive-strength: + enum: [ 2, 4, 8, 12 ] + + drive-strength-microamp: + enum: [ 2000, 4000, 8000, 12000 ] + + input-debounce-ns: + minimum: 0 + maximum: 4294967295 + + input-disable: true + + input-enable: true + + input-schmitt-enable: true + + input-schmitt-disable: true + + slew-rate: + enum: [ 0, 1 ] + default: 0 + description: | + 0: slow (half frequency) + 1: fast + +required: + - compatible + - reg + - resets + - interrupts + - interrupt-controller + - '#interrupt-cells' + - gpio-controller + - '#gpio-cells' + - gpio-ranges + +additionalProperties: false + +examples: + - | + soc { + #address-cells =3D <2>; + #size-cells =3D <2>; + + pinctrl_sys0: pinctrl@13080000 { + compatible =3D "starfive,jhb100-sys0-pinctrl"; + reg =3D <0x0 0x13080000 0x0 0x800>; + resets =3D <&sys0crg 2>; + interrupts =3D <56>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_sys0 0 0 0 4>; + }; + }; diff --git a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h b/includ= e/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h new file mode 100644 index 000000000000..6d8f5516a178 --- /dev/null +++ b/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0 OR MIT */ +/* + * Copyright (C) 2022 StarFive Technology Co., Ltd. + * + * Author: Changhuang Liang + */ + +#ifndef __DT_BINDINGS_PINCTRL_STARFIVE_JHB100_H__ +#define __DT_BINDINGS_PINCTRL_STARFIVE_JHB100_H__ + +/* sys0 pad numbers */ +#define PADNUM_SYS0_GPIO_A0 0 +#define PADNUM_SYS0_GPIO_A1 1 +#define PADNUM_SYS0_GPIO_A2 2 +#define PADNUM_SYS0_GPIO_A3 3 + +#endif --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2123.outbound.protection.partner.outlook.cn [139.219.17.123]) (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 2449937C930; Wed, 3 Jun 2026 06:09:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.123 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466966; cv=fail; b=u4JSxog8pmp0P37GSbS8Jda+dfj1CmlU/RBVW+0RoD2YRVOuFKsL9QRi9OIUpyJRxR1PxzORj/P0gfppZJPCfNe9vOnxvroDTx8mXxef4MOh5IsGz6G1+8zU3+oororqYgiPWxb9ZIa/2xRI0icSHv3JANf/7OL+5gonNEDaJsA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466966; c=relaxed/simple; bh=IyuuQp/F7NhMptB5zrdNyZ8A1fDV/oYwL+nvqbJjuBM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=NIBPTTvlJkS9paEp7EGiqVar6uEVyDoCcBdWOEQd2RPn27pvfX8P+k+W5XMN4fVyfMX/fjbLzoBLzh8Bb2QALd81zsaZTSFq+delZ76w8IKmdfpe1u0fasD5mMxn1HaZLZIBGo0+GJLJBGeDKMUG/qUoqfzqQwnEp7AleF0R00U= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.123 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Hu6E96AQsGaHFatX2vOTdaVeSWlTHv60inZrf+ToDLxe7SMA0pBXyfgKrN7X8YxgrkTWVyeE4wMzI2mwu3D8ap9Ab3mIb1M2mlWiQ/5JH4XVQG53Vmy86EbBjkdjJbFw/4tkvCiWLKBkyKTHSWJhJY+zTXphjjGb0AJd6iImarpbikREfaJDllPoewgjLXa2j30t/CQDpqka5itBPLr7FuA71mugMW3BuRBJ5pcPuydcGLdLMLCI3KBZbS9yG/OSR4y/pGoxaFwcEEVkZSLCaGHK+4+QmVLJLqsfKv3+kk2Is3eqlegz8NozZ13lm59Eu8muFnN3olqpM8CXBD4cNA== 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=2x+bwv4pTPSFlgmzmYrYV9iMc3kbkytw3oVFfDrdjxQ=; b=Mgc0f3Vfy9dh+z+uQOXF5xFA2bd5ajaDb1/YAqtXmEMSYPQpCHxCbyqUZufa7IS++vygUgdWp0PFKf0ekXZUawrpBGhaUsHC/pbmUDK8sUd1Qe41DzuNaqIJ4sodGq/KzoUS3HEesKWDWiQ1PkwofsA9EifoT1frnhVyfoEEbuq2rwOmhykAKRhy5gBUDXrr2iQLVKr8/QhtFu+VztnBe1HcqHkn/9c9HDUEBterwlsnBf5XX2BUkgZMqqN5q4e4q+9Pfqpx2YNrnxwUZnM0sy/7d28PnfL6S8XmrWbmy8yE0aJmGijZjTZEM5gUW+B73x0MMyfQH2mp+t5y1ZOxXg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:05 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:05 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 04/21] pinctrl: starfive: Add StarFive JHB100 sys0 controller driver Date: Tue, 2 Jun 2026 22:53:30 -0700 Message-Id: <20260603055347.66845-5-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: 8a3dfa19-31dc-414d-72de-08dec1348555 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|5023799004|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: Zs7/h05f/DPolu+73GLXG51RHY6M/R0xZsa6t2eFw+AqEptm7pDYwLEfgNGNzLy3dP+nZO9xzj8QgQVcS8754soLBIfgE54IDp2fQIEHuIEK8eKMOLsRTXIN/hbn8C3rpbJ2Ds04aBRJeKds55P1EpKBdU5BTX+iiXsLjQ+sWDYY0prODajks7Hkn2JZt3xz8bPSz0rWgn0XUWfjZ4VZeqVBeU4Po/nGB549IkaWPQkKkQOCXpGHYa+hCmocOpst2gW5bLDIuAjikysCgc3uQUkxrs4o3HgHCowQzAQ9qzBWPFV8GNCjY0r5Mbh2HWLqM0itt/qJe2BOCzXKEjpmo79FLsqkA7Whq2gfnjNqnfEJjGip/gMZN3vUWaer8zBv3pvBArsoLEZllJJZiEDPvc4Fs0YZ98YUSUdm3lf9V86oCT9Ap7sbEaw27UmPaHgnzSCJ/zaaCo6R0Zv6LjaOWdK962STG+5JBNafH69MJYUlwA4yJ6OdFKefmNVSJwST8SOjGtEr2j65ZKO15dKJoon9N9iWm7JAT+gGCj5eei2hLLM2M0+8UC7DiyPv3ZXFd+mmgLO55QHHgNbj6qDh5g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(5023799004)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wf/H9WxKjT2PWVx2XHDh9EnNvP5sZy/obNP/DiqzLpcIX9GeTPtfTE6fhLPf?= =?us-ascii?Q?nNXq5w4S1Qx93lDB1A4rOLJZ1FdLmtgO7aVrl4I+RnK8HgtwUr5OmKHUgcO+?= =?us-ascii?Q?bCmCrruo5zt4aSYSJrz/z1O87dTkuoxAHpvhAVld/o72V+hTuB1kZXsaCbgt?= =?us-ascii?Q?he6VxeSAK8UZNgI2CcLJTnfG4769NAgnnI8m4/UwqU74WauTUG696s0ZaHdu?= =?us-ascii?Q?rScksPcp30r4BTftxZMeq3ByjeQiGu7IFoPnPi1iwCMa8zfhWM+nyOftHnJ3?= =?us-ascii?Q?Z6T8zRIamMVvOVmp5OoQ8xA+TUzuzDmwavlYb1DI0wK27DF3H5ag6JYO9UYK?= =?us-ascii?Q?w35FY52IWPIxyWlfSINuEnf0ZrJCJdKBfFUXFsdmkxNIUFXQVffjG5OrE4tr?= =?us-ascii?Q?015q6Nme5aHDXuSiy/0jGttPS9p8ln1e4LXnvKuu+bPjWjaTCTdEVZKwfuU2?= =?us-ascii?Q?XBf5Tk/CaTSTsjEvhJpF8YDjik5v2mRA/HKPF0JD3+dCL2OUnjR0ZwpIIMgP?= =?us-ascii?Q?Hg0djKIiDYf3wuLVR0Nmdc77rlMXlZJaX8lXdjHR3Ttn67zqZ9ab6c95LG80?= =?us-ascii?Q?L8/e0XObTeFmh4nxfloBF+QbkavQ/FQDLC0BYLKv6GHBADVT8oqEEpnjkN6a?= =?us-ascii?Q?GTTvmCnPwPwqM8UZXLoNJH6d5C99Lv1hcCpbT1h3c5VOOQ+SuYIspz4dokjW?= =?us-ascii?Q?yIPVIUzQex2KyqAELSegD7IfwswxNgzRrxvIWNy32FlqjW+BDekWFTUvrtsg?= =?us-ascii?Q?/pVNY3UDeydU2y5SK3DZRwfWJI5E1kRhtKZeMY5nnH4ID4Z/13rNjE96yFJa?= =?us-ascii?Q?tu86tBbB6FepJFdFYpFegQzQ7S7Mku6npGOf5y1IOL7Y8iccsUB/8zfUcNWA?= =?us-ascii?Q?Ti/yifVlJmH9RjZ6lFRYrbII6vsA4ZBM6QJmbjPxsW8JqtqcB3R0m1LU1eSV?= =?us-ascii?Q?8JPKyg7int2xGOhVtdajMduaptWXjVyG0ALwk1clkNGeZKQjito+KP/aOeyQ?= =?us-ascii?Q?KR9tkEytU3I38EF8yemyQrxlJWIUvKZLDVoHErg6CrpLNqe1NIxu23UzxlJr?= =?us-ascii?Q?pb7F1V+IahtY02s7Mae0P3ouQPRFOk2vlXMtMO7ZUfZS10VIPkwPKEozAKJm?= =?us-ascii?Q?AytOcUC6tTcupqsNQwIlLEJx9rLEV5lRadYxhkTWwA7rLvelyjXoHCqYD+uz?= =?us-ascii?Q?+/wgY1oPbJ0mT/n1c+0xdX9B4EuC7PM4ELgLkEOSgYWMSWwqlYmiWnfpxEum?= =?us-ascii?Q?GeqCIGIqyhl55/J8myNJyjF6HT1QQdIBsZ/kH+CRH4Kz0uCtm1HAfrSEQPFi?= =?us-ascii?Q?Gmnl/S72R5blEWg8icu2Bgkv4zwP7TMrIxekgAU2VK076GomDBPlJwVmzJB1?= =?us-ascii?Q?dAqweXOwHlnNUQnEMkNwdmXSNcyG3UyRv9nTxjDHEu4eKW55ZXj0Uf8Zpr6k?= =?us-ascii?Q?DfX3exrkWnjdC555X6sEMaIFdqg7EavVcfMSZTO1eVqzcJo2BnULUZnmFsVj?= =?us-ascii?Q?a8gxhDJsUckCOiFmCQ0KMVP+5xAMxz2WOp76+GtSJWAO3QZf4+kiMX7m+OFN?= =?us-ascii?Q?3PMmwt4UsHHtv6ea9F3dtemcYVDnsw8ppDLbRivvFf46MGwiJSmOkZnE2zt7?= =?us-ascii?Q?t8t/3OS7QpSU8DGbEWFo/Cbi0lq0an/ALF1//cvo+72NNYmNUE7jnTEhpdds?= =?us-ascii?Q?siin/+KZJSPJRN0ijnvlEwqBvgKSigJI56UtCBBi4LidTsEfob+Fne47e2Lh?= =?us-ascii?Q?JrbugCGlr3QM8DfadKZ6fOWeNGCnC10/48SdYRsFJpFgSRvrEqDG?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8a3dfa19-31dc-414d-72de-08dec1348555 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:05.5098 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XTVPdiK9TWThqkGfDE+ELuvEDHIg/tS4BnNQnTHvkVko8Czi0IXizeC16C5+vp2L/sR3M8LxuB74M6/FKduXIdB/NpAI8laUG8IWMoOz7cb6iGs5mll4DFTAmphup7sz X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl driver for StarFive JHB100 SoC System-0(sys0) pinctrl controller. Co-developed-by: Lianfeng Ouyang Signed-off-by: Lianfeng Ouyang Signed-off-by: Changhuang Liang --- MAINTAINERS | 9 + drivers/pinctrl/starfive/Kconfig | 19 + drivers/pinctrl/starfive/Makefile | 3 + .../starfive/pinctrl-starfive-jhb100-sys0.c | 123 ++ .../starfive/pinctrl-starfive-jhb100.c | 1607 +++++++++++++++++ .../starfive/pinctrl-starfive-jhb100.h | 152 ++ 6 files changed, 1913 insertions(+) create mode 100644 drivers/pinctrl/starfive/pinctrl-starfive-jhb100-sys0.c create mode 100644 drivers/pinctrl/starfive/pinctrl-starfive-jhb100.c create mode 100644 drivers/pinctrl/starfive/pinctrl-starfive-jhb100.h diff --git a/MAINTAINERS b/MAINTAINERS index 47e4b368347f..f56721b4cbd1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -25607,6 +25607,15 @@ S: Supported F: Documentation/devicetree/bindings/interrupt-controller/starfive,jhb100-= intc.yaml F: drivers/irqchip/irq-starfive-jhb100-intc.c =20 +STARFIVE JHB100 PINCTRL DRIVERS +M: Changhuang Liang +M: Lianfeng Ouyang +L: linux-gpio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/pinctrl/starfive,jhb1*.yaml +F: drivers/pinctrl/starfive/pinctrl-starfive-jhb1* +F: include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h + STARFIVE JHB100 RESET CONTROLLER DRIVERS M: Changhuang Liang S: Maintained diff --git a/drivers/pinctrl/starfive/Kconfig b/drivers/pinctrl/starfive/Kc= onfig index a9a7cb101684..548a1b133f81 100644 --- a/drivers/pinctrl/starfive/Kconfig +++ b/drivers/pinctrl/starfive/Kconfig @@ -47,3 +47,22 @@ config PINCTRL_STARFIVE_JH7110_AON This also provides an interface to the GPIO pins not used by other peripherals supporting inputs, outputs, configuring pull-up/pull-down and interrupts on input changes. + +config PINCTRL_STARFIVE_JHB100 + bool + select GENERIC_PINCTRL + select GPIOLIB + select GPIOLIB_IRQCHIP + select OF_GPIO + +config PINCTRL_STARFIVE_JHB100_SYS0 + tristate "StarFive JHB100 SoC System-0 pinctrl and GPIO driver" + depends on ARCH_STARFIVE || COMPILE_TEST + depends on OF + select PINCTRL_STARFIVE_JHB100 + default ARCH_STARFIVE + help + Say yes here to support system-0 pin control on the StarFive JHB100 SoC. + This also provides an interface to the GPIO pins not used by other + peripherals supporting inputs, outputs, configuring pull-up/pull-down + and interrupts on input changes. diff --git a/drivers/pinctrl/starfive/Makefile b/drivers/pinctrl/starfive/M= akefile index ee0d32d085cb..c0d368f413bc 100644 --- a/drivers/pinctrl/starfive/Makefile +++ b/drivers/pinctrl/starfive/Makefile @@ -5,3 +5,6 @@ obj-$(CONFIG_PINCTRL_STARFIVE_JH7100) +=3D pinctrl-starfive= -jh7100.o obj-$(CONFIG_PINCTRL_STARFIVE_JH7110) +=3D pinctrl-starfive-jh7110.o obj-$(CONFIG_PINCTRL_STARFIVE_JH7110_SYS) +=3D pinctrl-starfive-jh7110-sys= .o obj-$(CONFIG_PINCTRL_STARFIVE_JH7110_AON) +=3D pinctrl-starfive-jh7110-aon= .o + +obj-$(CONFIG_PINCTRL_STARFIVE_JHB100) +=3D pinctrl-starfive-jhb100.o +obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0) +=3D pinctrl-starfive-jhb100-sy= s0.o diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-sys0.c b/driv= ers/pinctrl/starfive/pinctrl-starfive-jhb100-sys0.c new file mode 100644 index 000000000000..d86a82eb5e05 --- /dev/null +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-sys0.c @@ -0,0 +1,123 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Pinctrl / GPIO driver for StarFive JHB100 SoC System-0 domain + * + * Copyright (C) 2024 StarFive Technology Co., Ltd. + * Author: Alex Soo + * + */ + +#include +#include +#include + +#include "pinctrl-starfive-jhb100.h" + +static const struct jhb100_pin_layout_desc jhb100_sys0_pl_desc[] =3D { + { .pin_start =3D 0, .pin_cnt =3D 3, .name =3D "gpio", .gpio_func_sel =3D = 0, }, + { .pin_start =3D 3, .pin_cnt =3D 1, .name =3D "bmcpcierp_pe2rst_out", .gp= io_func_sel =3D 1, }, + { .pin_start =3D 4, .pin_cnt =3D 1, .name =3D "testen", .gpio_func_sel = =3D -1, }, + { .pin_start =3D 5, .pin_cnt =3D 1, .name =3D "syspok_in", .gpio_func_sel= =3D -1, }, + { .pin_start =3D 6, .pin_cnt =3D 1, .name =3D "sysrstn_in", .gpio_func_se= l =3D -1, }, + { .pin_start =3D 7, .pin_cnt =3D 1, .name =3D "perstn0_in", .gpio_func_se= l =3D -1, }, + { .pin_start =3D 8, .pin_cnt =3D 1, .name =3D "perstn1_in", .gpio_func_se= l =3D -1, }, + { .pin_start =3D 9, .pin_cnt =3D 1, .name =3D "aprstn_out", .gpio_func_se= l =3D -1, }, + { .pin_start =3D 10, .pin_cnt =3D 1, .name =3D "pcierp_wake", .gpio_func_= sel =3D -1, }, + { 0xff }, +}; + +static struct config_reg_layout_desc jhb100_sys0_pinctrl_crl_desc[] =3D { + { + .pin_start =3D 0, + .pin_cnt =3D 4, + .drive_strength_2bit =3D { .shift =3D 0, .width =3D 2 }, + .input_enable =3D { .shift =3D 2, .width =3D 1 }, + .pull_down =3D { .shift =3D 3, .width =3D 1 }, + .pull_up =3D { .shift =3D 4, .width =3D 1 }, + .slew_rate =3D { .shift =3D 5, .width =3D 1 }, + .schmitt_trigger_select =3D { .shift =3D 6, .width =3D 1 }, + .reserved =3D { .shift =3D 7, .width =3D 8 }, + .debounce_width =3D { .shift =3D 15, .width =3D 17 }, + }, + { + .pin_start =3D 4, + .pin_cnt =3D 5, + .schmitt_trigger_select =3D { .shift =3D 0, .width =3D 1 }, + .reserved =3D { .shift =3D 1, .width =3D 31 }, + }, + { + .pin_start =3D 9, + .pin_cnt =3D 1, + .drive_strength_2bit =3D { .shift =3D 0, .width =3D 2 }, + .slew_rate =3D { .shift =3D 2, .width =3D 1 }, + .reserved =3D { .shift =3D 3, .width =3D 29 }, + }, + { + .pin_start =3D 10, + .pin_cnt =3D 1, + .drive_strength_2bit =3D { .shift =3D 0, .width =3D 2 }, + .input_enable =3D { .shift =3D 2, .width =3D 1 }, + .pull_down =3D { .shift =3D 3, .width =3D 1 }, + .pull_up =3D { .shift =3D 4, .width =3D 1 }, + .slew_rate =3D { .shift =3D 5, .width =3D 1 }, + .schmitt_trigger_select =3D { .shift =3D 6, .width =3D 1 }, + .reserved =3D { .shift =3D 7, .width =3D 25 }, + }, + { 0xff }, +}; + +struct starfive_pinctrl_regs jhb100_sys0_pinctrl_regs =3D { + .func_sel =3D { .reg =3D 0x44, .width_per_pin =3D 2 }, + .config =3D 0x0c, + .output =3D 0x38, + .output_en =3D 0x3c, + .gpio_status =3D 0x40, + .irq_en =3D 0x48, + .irq_status =3D 0x4c, + .irq_clr =3D 0x50, + .irq_trigger =3D 0x54, + .irq_level =3D 0x58, + .irq_both_edge =3D 0x5c, + .irq_edge =3D 0x60, +}; + +static const struct jhb100_pinctrl_func_maps jhb100_func_maps_sys0[] =3D { + { .func =3D "auxpwrgood", .val =3D 1 }, + { .func =3D "gpio", .val =3D 0, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_PER3_GPIO_E2) }, + { .func =3D "gpio", .val =3D 1, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_PER3_GPIO_E3) }, + { .func =3D "hbled", .val =3D 1 }, + { .func =3D "pe2rst_out", .val =3D 0 }, +}; + +static const struct jhb100_pinctrl_domain_info jhb100_sys0_pinctrl_info = =3D { + .name =3D "jhb100-sys0", + .pl_desc =3D jhb100_sys0_pl_desc, + .crl_desc =3D jhb100_sys0_pinctrl_crl_desc, + .regs =3D &jhb100_sys0_pinctrl_regs, + .fmaps =3D jhb100_func_maps_sys0, + .num_maps =3D ARRAY_SIZE(jhb100_func_maps_sys0), +}; + +static const struct of_device_id jhb100_sys0_pinctrl_of_match[] =3D { + { + .compatible =3D "starfive,jhb100-sys0-pinctrl", + .data =3D &jhb100_sys0_pinctrl_info, + }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, jhb100_sys0_pinctrl_of_match); + +static struct platform_driver jhb100_sys0_pinctrl_driver =3D { + .probe =3D jhb100_pinctrl_probe, + .driver =3D { + .name =3D "starfive-jhb100-sys0-pinctrl", + .of_match_table =3D jhb100_sys0_pinctrl_of_match, + }, +}; +module_platform_driver(jhb100_sys0_pinctrl_driver); + +MODULE_DESCRIPTION("Pinctrl driver for StarFive JHB100 SoC System-0 domain= "); +MODULE_AUTHOR("Alex Soo "); +MODULE_LICENSE("GPL"); diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jhb100.c b/drivers/p= inctrl/starfive/pinctrl-starfive-jhb100.c new file mode 100644 index 000000000000..52b97870b991 --- /dev/null +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jhb100.c @@ -0,0 +1,1607 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Pinctrl / GPIO driver for StarFive JHB100 SoC + * + * Copyright (C) 2024 StarFive Technology Co., Ltd. + * Author: Alex Soo + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../core.h" +#include "../pinconf.h" +#include "../pinctrl-utils.h" +#include "../pinmux.h" +#include "pinctrl-starfive-jhb100.h" + +#define GPOUT_LOW 0 +#define GPOUT_HIGH 1 + +#define GPOEN_ENABLE 0 +#define GPOEN_DISABLE 1 + +#define JHB100_DEBOUNCE_WIDTH_STAGES_MAX 0x1FFFFU +#define JHB100_DEBOUNCE_WIDTH_STAGE_NS 80 + +/* mode select */ +#define JHB100_PUSH_PULL 0 +#define JHB100_OPEN_DRAIN 1 +#define JHB100_LEGACY_FAST_MODE_PLUS 2 +#define JHB100_LEGACY_FAST_MODE 3 + +/* i2c open-drain pull-up select */ +#define JHB100_I2C_OPEN_DRAIN_PU_600_OHMS 0 +#define JHB100_I2C_OPEN_DRAIN_PU_900_OHMS 1 +#define JHB100_I2C_OPEN_DRAIN_PU_1200_OHMS 2 +#define JHB100_I2C_OPEN_DRAIN_PU_2000_OHMS 3 + +#define JHB100_NR_GPIOS_PER_BANK 32 + +struct field_info { + const char *name; + unsigned int shift; + unsigned int width; + unsigned int end; +}; + +static int jhb100_map_get_func_val(struct jhb100_pinctrl *sfp, const char = *function, + unsigned int pin) +{ + const struct jhb100_pinctrl_func_maps *fmaps =3D sfp->info->fmaps; + size_t num =3D sfp->info->num_maps; + + for (int i =3D 0; i < num; i++) { + if (!strcmp(function, fmaps[i].func)) { + if (!fmaps[i].max_pin) + return fmaps[i].val; + + if (pin < fmaps[i].max_pin) + return fmaps[i].val; + + continue; + } + } + + return -EINVAL; +} + +static struct config_reg_layout_desc *get_crl_desc_by_pin(struct jhb100_pi= nctrl *sfp, + unsigned int pin) +{ + struct config_reg_layout_desc *crl_desc =3D sfp->info->crl_desc; + unsigned int i =3D 0; + + do { + if (pin >=3D crl_desc[i].pin_start && + pin < crl_desc[i].pin_start + crl_desc[i].pin_cnt) + return &crl_desc[i]; + } while (crl_desc[i++].pin_start !=3D 0xff); + + return NULL; +} + +static inline struct jhb100_gpio_bank *jhb100_gc_to_bank(struct gpio_chip = *gc) +{ + return container_of(gc, struct jhb100_gpio_bank, gc); +} + +static unsigned int jhb100_gpio_to_pin(struct gpio_chip *gc, unsigned int = gpio) +{ + struct jhb100_gpio_bank *bank =3D jhb100_gc_to_bank(gc); + + return bank->id * JHB100_NR_GPIOS_PER_BANK + gpio; +} + +static const struct pinctrl_ops jhb100_pinctrl_ops =3D { + .get_groups_count =3D pinctrl_generic_get_group_count, + .get_group_name =3D pinctrl_generic_get_group_name, + .get_group_pins =3D pinctrl_generic_get_group_pins, + .dt_node_to_map =3D pinctrl_generic_pins_function_dt_node_to_map, + .dt_free_map =3D pinctrl_utils_free_map, +}; + +static void jhb100_set_gpioval(struct jhb100_pinctrl *sfp, unsigned int pi= n, + unsigned int val) +{ + const struct jhb100_pinctrl_domain_info *info =3D sfp->info; + unsigned int offset =3D 4 * (pin / 32); + unsigned int shift =3D 1 * (pin % 32); + unsigned int fs_offset =3D 4 * (pin / 16); + unsigned int fs_shift =3D 2 * (pin % 16); + u32 func_sel_mask; + u32 dout, doen, fs; + void __iomem *reg_gpio_o; + void __iomem *reg_gpio_oen; + void __iomem *reg_gpio_func_sel; + unsigned long flags; + + reg_gpio_o =3D sfp->base + info->regs->output + offset; + reg_gpio_oen =3D sfp->base + info->regs->output_en + offset; + reg_gpio_func_sel =3D sfp->base + info->regs->func_sel.reg + fs_offset; + + func_sel_mask =3D GENMASK(info->regs->func_sel.width_per_pin - 1, 0) << f= s_shift; + dout =3D val << shift; + doen =3D 0; + + raw_spin_lock_irqsave(&sfp->lock, flags); + fs =3D readl_relaxed(reg_gpio_func_sel); + if (fs & func_sel_mask) { + fs &=3D ~func_sel_mask; + writel_relaxed(fs, reg_gpio_func_sel); + } + dout |=3D readl_relaxed(reg_gpio_o) & ~BIT(shift); + writel_relaxed(dout, reg_gpio_o); + doen |=3D readl_relaxed(reg_gpio_oen) & ~BIT(shift); + writel_relaxed(doen, reg_gpio_oen); + raw_spin_unlock_irqrestore(&sfp->lock, flags); +} + +static void jhb100_set_function(struct jhb100_pinctrl *sfp, + unsigned int pin, u8 func) +{ + struct starfive_pinctrl_regs *pinctrl_regs =3D sfp->info->regs; + void __iomem *func_sel_reg; + unsigned long flags; + u32 func_sel_mask; + u32 func_sel_val; + unsigned int offset =3D 4 * (pin / (32 / pinctrl_regs->func_sel.width_per= _pin)); + unsigned int shift =3D pinctrl_regs->func_sel.width_per_pin * + (pin % (32 / pinctrl_regs->func_sel.width_per_pin)); + + if (!pinctrl_regs->func_sel.reg || !pinctrl_regs->func_sel.width_per_pin) + return; + + func_sel_reg =3D sfp->base + pinctrl_regs->func_sel.reg + offset; + func_sel_mask =3D GENMASK(pinctrl_regs->func_sel.width_per_pin - 1, 0) <<= shift; + func_sel_val =3D func << shift; + + raw_spin_lock_irqsave(&sfp->lock, flags); + func_sel_val |=3D readl_relaxed(func_sel_reg) & ~func_sel_mask; + writel_relaxed(func_sel_val, func_sel_reg); + raw_spin_unlock_irqrestore(&sfp->lock, flags); +} + +static int jhb100_set_one_pin_mux(struct jhb100_pinctrl *sfp, + unsigned int pin, + u8 func, + int val) +{ + const struct pinctrl_pin_desc *desc =3D &sfp->pins[pin]; + struct device *dev =3D sfp->dev; + s8 gpio_func_sel =3D sfp->gpio_func_sel_arr[pin]; + + jhb100_set_function(sfp, pin, func); + + if (pin < sfp->ngpios && (val =3D=3D 0 || val =3D=3D 1)) { + if (func =3D=3D gpio_func_sel) + jhb100_set_gpioval(sfp, pin, val); + else + dev_err(dev, "pin (%s) is not a GPIO. func=3D%d/%d\n", + desc->name, func, gpio_func_sel); + } + + return 0; +} + +static int jhb100_set_mux(struct pinctrl_dev *pctldev, + unsigned int fsel, unsigned int gsel) +{ + struct jhb100_pinctrl *sfp =3D pinctrl_dev_get_drvdata(pctldev); + const struct group_desc *group; + unsigned int i; + const char **functions; + + group =3D pinctrl_generic_get_group(pctldev, gsel); + if (!group) + return -EINVAL; + + functions =3D group->data; + + for (i =3D 0; i < group->grp.npins; i++) { + int function; + + function =3D jhb100_map_get_func_val(sfp, functions[i], group->grp.pins[= i]); + if (function < 0) { + dev_err(pctldev->dev, "invalid function %s\n", functions[i]); + return function; + } + + jhb100_set_one_pin_mux(sfp, group->grp.pins[i], function, -1); + } + + return 0; +} + +static const struct pinmux_ops jhb100_pinmux_ops =3D { + .get_functions_count =3D pinmux_generic_get_function_count, + .get_function_name =3D pinmux_generic_get_function_name, + .get_function_groups =3D pinmux_generic_get_function_groups, + .set_mux =3D jhb100_set_mux, +}; + +static const u8 jhb100_drive_strength_ma[4] =3D { 2, 4, 8, 12 }; + +static const u8 jhb100_drive_strength_ma_3bit[8] =3D { 2, 5, 8, 10, 14, 16= , 18, 20 }; + +static u32 jhb100_padcfg_ds_to_mA(u32 padcfg) +{ + return jhb100_drive_strength_ma[padcfg]; +} + +static u32 jhb100_padcfg_ds_to_mA_3bit(u32 padcfg) +{ + return jhb100_drive_strength_ma_3bit[padcfg]; +} + +static u32 jhb100_padcfg_ds_to_uA(u32 padcfg) +{ + return (jhb100_drive_strength_ma[padcfg] * 1000); +} + +static u32 jhb100_padcfg_ds_to_uA_3bit(u32 padcfg) +{ + return (jhb100_drive_strength_ma_3bit[padcfg] * 1000); +} + +static u32 jhb100_padcfg_ds_from_mA(u32 v) +{ + int i; + + for (i =3D 0; i < ARRAY_SIZE(jhb100_drive_strength_ma); i++) { + if (v <=3D jhb100_drive_strength_ma[i]) + break; + } + return i; +} + +static u32 jhb100_padcfg_ds_from_mA_3bit(u32 v) +{ + int i; + + for (i =3D 0; i < ARRAY_SIZE(jhb100_drive_strength_ma_3bit); i++) { + if (v <=3D jhb100_drive_strength_ma_3bit[i]) + break; + } + return i; +} + +static u32 jhb100_padcfg_ds_from_uA(u32 v) +{ + /* Convert from uA to mA */ + v /=3D 1000; + + return jhb100_padcfg_ds_from_mA(v); +} + +static u32 jhb100_padcfg_ds_from_uA_3bit(u32 v) +{ + /* Convert from uA to mA */ + v /=3D 1000; + + return jhb100_padcfg_ds_from_mA_3bit(v); +} + +static void jhb100_padcfg_rmw(struct jhb100_pinctrl *sfp, + unsigned int pin, u32 mask, u32 value) +{ + void __iomem *reg; + unsigned int offset; + unsigned long flags; + int padcfg_base; + + padcfg_base =3D sfp->info->regs->config; + + offset =3D 4 * pin; + + reg =3D sfp->base + padcfg_base + offset; + + value &=3D mask; + raw_spin_lock_irqsave(&sfp->lock, flags); + value |=3D readl_relaxed(reg) & ~mask; + writel_relaxed(value, reg); + raw_spin_unlock_irqrestore(&sfp->lock, flags); +} + +static int jhb100_pincfg_pin_vref_get(struct jhb100_pinctrl *sfp, unsigned= int pin) +{ + struct pinvref_reg *vref =3D &sfp->info->regs->vref; + u32 grp =3D 0, i; + + while (grp < vref->num_pv) { + for (i =3D 0; i < vref->pv_desc[grp].num_pins; i++) { + if (pin !=3D vref->pv_desc[grp].pin_grp[i]) + continue; + + return readl(sfp->base + vref->reg + grp * 4); + } + + grp++; + } + + return -ENOTSUPP; +} + +static void jhb100_pincfg_pin_vref_set(struct jhb100_pinctrl *sfp, unsigne= d int pin, + u32 arg) +{ + struct pinvref_reg *vref =3D &sfp->info->regs->vref; + u32 grp =3D 0, i; + + while (grp < vref->num_pv) { + for (i =3D 0; i < vref->pv_desc[grp].num_pins; i++) { + if (pin !=3D vref->pv_desc[grp].pin_grp[i]) + continue; + + if (!(vref->pv_desc[grp].range & BIT(arg))) + return; + + writel(arg, sfp->base + vref->reg + grp * 4); + return; + } + + grp++; + } +} + +static int jhb100_pinconf_get(struct pinctrl_dev *pctldev, + unsigned int pin, unsigned long *config) +{ + struct jhb100_pinctrl *sfp =3D pinctrl_dev_get_drvdata(pctldev); + int param =3D pinconf_to_config_param(*config); + struct device *dev =3D sfp->dev; + struct config_reg_layout_desc *crl_desc; + unsigned int offset; + u32 padcfg, arg; + bool enabled; + int padcfg_base; + + padcfg_base =3D sfp->info->regs->config; + offset =3D 4 * pin; + + if (pin >=3D sfp->npins) + return -EINVAL; + + padcfg =3D readl_relaxed(sfp->base + padcfg_base + offset); + + crl_desc =3D get_crl_desc_by_pin(sfp, pin); + if (!crl_desc) { + dev_err(dev, "pin %d can't not found reg layout descriptor\n", pin); + return -EINVAL; + } + + switch (param) { + case PIN_CONFIG_BIAS_DISABLE: + arg =3D 0; + + if (!RL_DESC_SUPPORTED(crl_desc, pull_down) || + !RL_DESC_SUPPORTED(crl_desc, pull_up)) + return -ENOTSUPP; + + enabled =3D !(padcfg & (RL_DESC_GENMASK(crl_desc, pull_down) | + RL_DESC_GENMASK(crl_desc, pull_up))); + break; + case PIN_CONFIG_BIAS_PULL_DOWN: + arg =3D 1; + + if (!RL_DESC_SUPPORTED(crl_desc, pull_down)) + return -ENOTSUPP; + + enabled =3D (padcfg & RL_DESC_GENMASK(crl_desc, pull_down)) + >> RL_DESC_SHIFT(crl_desc, pull_down); + break; + case PIN_CONFIG_BIAS_PULL_UP: + enabled =3D false; + + if (!RL_DESC_SUPPORTED(crl_desc, pull_up) || + !RL_DESC_SUPPORTED(crl_desc, open_drain_pull_up_sel)) + return -ENOTSUPP; + + if (RL_DESC_SUPPORTED(crl_desc, pull_up)) { + arg =3D (padcfg & RL_DESC_GENMASK(crl_desc, pull_up)) >> + RL_DESC_SHIFT(crl_desc, pull_up); + + enabled =3D arg ? true : false; + } + + if (!enabled && RL_DESC_SUPPORTED(crl_desc, open_drain_pull_up_sel)) { + enabled =3D true; + + arg =3D (padcfg & RL_DESC_GENMASK(crl_desc, open_drain_pull_up_sel)) >> + RL_DESC_SHIFT(crl_desc, open_drain_pull_up_sel); + + if (arg =3D=3D JHB100_I2C_OPEN_DRAIN_PU_600_OHMS) + arg =3D 600; + else if (arg =3D=3D JHB100_I2C_OPEN_DRAIN_PU_900_OHMS) + arg =3D 900; + else if (arg =3D=3D JHB100_I2C_OPEN_DRAIN_PU_1200_OHMS) + arg =3D 1200; + else if (arg =3D=3D JHB100_I2C_OPEN_DRAIN_PU_2000_OHMS) + arg =3D 2000; + else + return -ENOTSUPP; + } + + break; + case PIN_CONFIG_DRIVE_STRENGTH: + enabled =3D true; + + if (RL_DESC_SUPPORTED(crl_desc, drive_strength_2bit)) { + arg =3D (padcfg & RL_DESC_GENMASK(crl_desc, drive_strength_2bit)) >> + RL_DESC_SHIFT(crl_desc, drive_strength_2bit); + arg =3D jhb100_padcfg_ds_to_mA(arg); + } else if (RL_DESC_SUPPORTED(crl_desc, drive_strength_3bit)) { + arg =3D (padcfg & RL_DESC_GENMASK(crl_desc, drive_strength_3bit)) >> + RL_DESC_SHIFT(crl_desc, drive_strength_3bit); + arg =3D jhb100_padcfg_ds_to_mA_3bit(arg); + } else { + return -ENOTSUPP; + } + break; + case PIN_CONFIG_DRIVE_STRENGTH_UA: + enabled =3D true; + + if (RL_DESC_SUPPORTED(crl_desc, drive_strength_2bit)) { + arg =3D (padcfg & RL_DESC_GENMASK(crl_desc, drive_strength_2bit)) >> + RL_DESC_SHIFT(crl_desc, drive_strength_2bit); + arg =3D jhb100_padcfg_ds_to_uA(arg); + } else if (RL_DESC_SUPPORTED(crl_desc, drive_strength_3bit)) { + arg =3D (padcfg & RL_DESC_GENMASK(crl_desc, drive_strength_3bit)) >> + RL_DESC_SHIFT(crl_desc, drive_strength_3bit); + arg =3D jhb100_padcfg_ds_to_uA_3bit(arg); + } else { + return -ENOTSUPP; + } + break; + case PIN_CONFIG_INPUT_ENABLE: + if (!RL_DESC_SUPPORTED(crl_desc, input_enable)) + return -ENOTSUPP; + + enabled =3D (padcfg & RL_DESC_GENMASK(crl_desc, input_enable)) + >> RL_DESC_SHIFT(crl_desc, input_enable); + arg =3D enabled; + break; + case PIN_CONFIG_INPUT_SCHMITT_ENABLE: + if (!RL_DESC_SUPPORTED(crl_desc, schmitt_trigger_select)) + return -ENOTSUPP; + + enabled =3D (padcfg & RL_DESC_GENMASK(crl_desc, schmitt_trigger_select)) + >> RL_DESC_SHIFT(crl_desc, schmitt_trigger_select); + arg =3D enabled; + break; + case PIN_CONFIG_SLEW_RATE: + enabled =3D true; + + if (RL_DESC_SUPPORTED(crl_desc, slew_rate)) { + arg =3D (padcfg & RL_DESC_GENMASK(crl_desc, slew_rate)) >> + RL_DESC_SHIFT(crl_desc, slew_rate); + } else if (RL_DESC_SUPPORTED(crl_desc, mode_select)) { + arg =3D (padcfg & RL_DESC_GENMASK(crl_desc, mode_select)) >> + RL_DESC_SHIFT(crl_desc, mode_select); + + if (arg =3D=3D JHB100_LEGACY_FAST_MODE_PLUS) + arg =3D 1; + else if (arg =3D=3D JHB100_LEGACY_FAST_MODE) + arg =3D 0; + else + return -ENOTSUPP; + } else { + return -ENOTSUPP; + } + break; + case PIN_CONFIG_DRIVE_PUSH_PULL: + if (!RL_DESC_SUPPORTED(crl_desc, mode_select)) + return -ENOTSUPP; + + arg =3D (padcfg & RL_DESC_GENMASK(crl_desc, mode_select)) >> + RL_DESC_SHIFT(crl_desc, mode_select); + + if (arg =3D=3D JHB100_PUSH_PULL) + enabled =3D true; + + break; + case PIN_CONFIG_DRIVE_OPEN_DRAIN: + if (!RL_DESC_SUPPORTED(crl_desc, mode_select)) + return -ENOTSUPP; + + arg =3D (padcfg & RL_DESC_GENMASK(crl_desc, mode_select)) >> + RL_DESC_SHIFT(crl_desc, mode_select); + + if (arg =3D=3D JHB100_OPEN_DRAIN) + enabled =3D true; + + break; + case PIN_CONFIG_INPUT_DEBOUNCE_NS: + enabled =3D true; + + if (!RL_DESC_SUPPORTED(crl_desc, debounce_width)) + return -ENOTSUPP; + + arg =3D (padcfg & RL_DESC_GENMASK(crl_desc, debounce_width)) >> + RL_DESC_SHIFT(crl_desc, debounce_width); + + arg *=3D JHB100_DEBOUNCE_WIDTH_STAGE_NS; + + break; + case PIN_CONFIG_POWER_SOURCE: + if (!sfp->info->regs->vref.num_pv && !RL_DESC_SUPPORTED(crl_desc, vsel)) + return -ENOTSUPP; + + enabled =3D true; + + if (sfp->info->regs->vref.num_pv) { + int ret; + + ret =3D jhb100_pincfg_pin_vref_get(sfp, pin); + if (ret < 0) + return ret; + + arg =3D ret; + } else if (RL_DESC_SUPPORTED(crl_desc, vsel)) { + arg =3D (padcfg & RL_DESC_GENMASK(crl_desc, vsel)) >> + RL_DESC_SHIFT(crl_desc, vsel); + } else { + return -ENOTSUPP; + } + break; + default: + return -ENOTSUPP; + } + + *config =3D pinconf_to_config_packed(param, arg); + return enabled ? 0 : -EINVAL; +} + +static int jhb100_pinconf_set(struct pinctrl_dev *pctldev, + unsigned int pin, unsigned long *configs, + unsigned int num_configs) +{ + struct jhb100_pinctrl *sfp =3D pinctrl_dev_get_drvdata(pctldev); + struct device *dev =3D sfp->dev; + struct config_reg_layout_desc *crl_desc; + bool vref_set =3D false; + u32 value =3D 0; + u32 mask =3D 0; + u32 vref =3D 0; + int i; + + crl_desc =3D get_crl_desc_by_pin(sfp, pin); + if (!crl_desc) { + dev_err(dev, "pin %d can't not found reg layout descriptor\n", pin); + return -EINVAL; + } + + for (i =3D 0; i < num_configs; i++) { + int param =3D pinconf_to_config_param(configs[i]); + u32 arg =3D pinconf_to_config_argument(configs[i]); + + switch (param) { + case PIN_CONFIG_BIAS_DISABLE: + if (!RL_DESC_SUPPORTED(crl_desc, pull_down) || + !RL_DESC_SUPPORTED(crl_desc, pull_up)) + return -ENOTSUPP; + + mask |=3D RL_DESC_GENMASK(crl_desc, pull_down) | + RL_DESC_GENMASK(crl_desc, pull_up); + value &=3D ~(RL_DESC_GENMASK(crl_desc, pull_down) | + RL_DESC_GENMASK(crl_desc, pull_up)); + break; + case PIN_CONFIG_BIAS_PULL_DOWN: + if (!arg || !RL_DESC_SUPPORTED(crl_desc, pull_down) || + !RL_DESC_SUPPORTED(crl_desc, pull_up)) + return -ENOTSUPP; + + mask |=3D RL_DESC_GENMASK(crl_desc, pull_down) | + RL_DESC_GENMASK(crl_desc, pull_up); + value &=3D ~(RL_DESC_GENMASK(crl_desc, pull_down) | + RL_DESC_GENMASK(crl_desc, pull_up)); + value |=3D RL_DESC_GENMASK(crl_desc, pull_down); + break; + case PIN_CONFIG_BIAS_PULL_UP: + if ((!arg || arg =3D=3D 1) && RL_DESC_SUPPORTED(crl_desc, pull_up)) { + mask |=3D RL_DESC_GENMASK(crl_desc, pull_down) | + RL_DESC_GENMASK(crl_desc, pull_up); + value &=3D ~(RL_DESC_GENMASK(crl_desc, pull_down) | + RL_DESC_GENMASK(crl_desc, pull_up)); + value |=3D RL_DESC_GENMASK(crl_desc, pull_up); + } else if (arg && RL_DESC_SUPPORTED(crl_desc, open_drain_pull_up_sel)) { + mask |=3D RL_DESC_GENMASK(crl_desc, open_drain_pull_up_sel); + value &=3D ~RL_DESC_GENMASK(crl_desc, open_drain_pull_up_sel); + switch (arg) { + case 600: + value |=3D JHB100_I2C_OPEN_DRAIN_PU_600_OHMS << + RL_DESC_SHIFT(crl_desc, open_drain_pull_up_sel); + break; + case 900: + value |=3D JHB100_I2C_OPEN_DRAIN_PU_900_OHMS << + RL_DESC_SHIFT(crl_desc, open_drain_pull_up_sel); + break; + case 1200: + value |=3D JHB100_I2C_OPEN_DRAIN_PU_1200_OHMS << + RL_DESC_SHIFT(crl_desc, open_drain_pull_up_sel); + break; + case 2000: + value |=3D JHB100_I2C_OPEN_DRAIN_PU_2000_OHMS << + RL_DESC_SHIFT(crl_desc, open_drain_pull_up_sel); + break; + default: + return -ENOTSUPP; + } + } else { + return -ENOTSUPP; + } + break; + case PIN_CONFIG_DRIVE_STRENGTH: + if (RL_DESC_SUPPORTED(crl_desc, drive_strength_2bit)) { + mask |=3D RL_DESC_GENMASK(crl_desc, drive_strength_2bit); + value &=3D ~RL_DESC_GENMASK(crl_desc, drive_strength_2bit); + value |=3D jhb100_padcfg_ds_from_mA(arg) << + RL_DESC_SHIFT(crl_desc, drive_strength_2bit); + } else if (RL_DESC_SUPPORTED(crl_desc, drive_strength_3bit)) { + mask |=3D RL_DESC_GENMASK(crl_desc, drive_strength_3bit); + value &=3D ~RL_DESC_GENMASK(crl_desc, drive_strength_3bit); + value |=3D jhb100_padcfg_ds_from_mA_3bit(arg) << + RL_DESC_SHIFT(crl_desc, drive_strength_3bit); + } else { + return -ENOTSUPP; + } + break; + case PIN_CONFIG_DRIVE_STRENGTH_UA: + if (RL_DESC_SUPPORTED(crl_desc, drive_strength_2bit)) { + mask |=3D RL_DESC_GENMASK(crl_desc, drive_strength_2bit); + value &=3D ~RL_DESC_GENMASK(crl_desc, drive_strength_2bit); + value |=3D jhb100_padcfg_ds_from_uA(arg) << + RL_DESC_SHIFT(crl_desc, drive_strength_2bit); + } else if (RL_DESC_SUPPORTED(crl_desc, drive_strength_3bit)) { + mask |=3D RL_DESC_GENMASK(crl_desc, drive_strength_3bit); + value &=3D ~RL_DESC_GENMASK(crl_desc, drive_strength_3bit); + value |=3D jhb100_padcfg_ds_from_uA_3bit(arg) << + RL_DESC_SHIFT(crl_desc, drive_strength_3bit); + } else { + return -ENOTSUPP; + } + break; + case PIN_CONFIG_INPUT_ENABLE: + if (!RL_DESC_SUPPORTED(crl_desc, input_enable)) + return -ENOTSUPP; + + mask |=3D RL_DESC_GENMASK(crl_desc, input_enable); + value =3D arg ? (value | RL_DESC_GENMASK(crl_desc, input_enable)) + : value; + break; + case PIN_CONFIG_INPUT_SCHMITT_ENABLE: + if (!RL_DESC_SUPPORTED(crl_desc, schmitt_trigger_select)) + return -ENOTSUPP; + + mask |=3D RL_DESC_GENMASK(crl_desc, schmitt_trigger_select); + value =3D arg + ? (value | RL_DESC_GENMASK(crl_desc, schmitt_trigger_select)) + : value; + break; + case PIN_CONFIG_SLEW_RATE: + if (RL_DESC_SUPPORTED(crl_desc, slew_rate)) { + mask |=3D RL_DESC_GENMASK(crl_desc, slew_rate); + value =3D arg ? + (value | RL_DESC_GENMASK(crl_desc, slew_rate)) : + value; + } else if (RL_DESC_SUPPORTED(crl_desc, mode_select)) { + mask |=3D RL_DESC_GENMASK(crl_desc, mode_select); + value &=3D ~RL_DESC_GENMASK(crl_desc, mode_select); + value |=3D arg ? + JHB100_LEGACY_FAST_MODE_PLUS << + RL_DESC_SHIFT(crl_desc, mode_select) : + JHB100_LEGACY_FAST_MODE << + RL_DESC_SHIFT(crl_desc, mode_select); + } else { + return -ENOTSUPP; + } + break; + case PIN_CONFIG_DRIVE_PUSH_PULL: + if (!RL_DESC_SUPPORTED(crl_desc, mode_select)) + return -ENOTSUPP; + + mask |=3D RL_DESC_GENMASK(crl_desc, mode_select); + value &=3D ~RL_DESC_GENMASK(crl_desc, mode_select); + value |=3D JHB100_PUSH_PULL << + RL_DESC_SHIFT(crl_desc, mode_select); + break; + case PIN_CONFIG_DRIVE_OPEN_DRAIN: + if (!RL_DESC_SUPPORTED(crl_desc, mode_select)) + return -ENOTSUPP; + + mask |=3D RL_DESC_GENMASK(crl_desc, mode_select); + value &=3D ~RL_DESC_GENMASK(crl_desc, mode_select); + value |=3D JHB100_OPEN_DRAIN << + RL_DESC_SHIFT(crl_desc, mode_select); + break; + case PIN_CONFIG_INPUT_DEBOUNCE_NS: + u32 debounce_stage; + + if (!RL_DESC_SUPPORTED(crl_desc, debounce_width)) + return -ENOTSUPP; + + mask |=3D RL_DESC_GENMASK(crl_desc, debounce_width); + value &=3D ~RL_DESC_GENMASK(crl_desc, debounce_width); + + debounce_stage =3D arg ? arg / JHB100_DEBOUNCE_WIDTH_STAGE_NS : 0; + debounce_stage =3D umin(debounce_stage, JHB100_DEBOUNCE_WIDTH_STAGES_MA= X); + + value |=3D (debounce_stage << RL_DESC_SHIFT(crl_desc, debounce_width)); + + break; + case PIN_CONFIG_POWER_SOURCE: + if (!sfp->info->regs->vref.num_pv && !RL_DESC_SUPPORTED(crl_desc, vsel)) + return -ENOTSUPP; + + if (sfp->info->regs->vref.num_pv) { + vref_set =3D true; + vref =3D arg; + } + + if (RL_DESC_SUPPORTED(crl_desc, vsel)) { + mask |=3D RL_DESC_GENMASK(crl_desc, vsel); + value &=3D ~RL_DESC_GENMASK(crl_desc, vsel); + + value |=3D arg & BIT(0) ? + 1 << RL_DESC_SHIFT(crl_desc, vsel) : + 0; + } + break; + default: + return -ENOTSUPP; + } + } + + jhb100_padcfg_rmw(sfp, pin, mask, value); + + if (vref_set) + jhb100_pincfg_pin_vref_set(sfp, pin, vref); + + return 0; +} + +static int jhb100_pinconf_group_get(struct pinctrl_dev *pctldev, + unsigned int gsel, + unsigned long *config) +{ + const struct group_desc *group; + + group =3D pinctrl_generic_get_group(pctldev, gsel); + if (!group) + return -EINVAL; + + return jhb100_pinconf_get(pctldev, group->grp.pins[0], config); +} + +static int jhb100_pinconf_group_set(struct pinctrl_dev *pctldev, + unsigned int gsel, + unsigned long *configs, + unsigned int num_configs) +{ + const struct group_desc *group; + int ret; + u32 i; + + group =3D pinctrl_generic_get_group(pctldev, gsel); + if (!group) + return -EINVAL; + + for (i =3D 0; i < group->grp.npins; i++) { + ret =3D jhb100_pinconf_set(pctldev, group->grp.pins[i], configs, num_con= figs); + if (ret) { + dev_err(pctldev->dev, "failed to set config for pin %d\n", + group->grp.pins[i]); + return ret; + } + } + + return 0; +} + +static const struct pinconf_ops jhb100_pinconf_ops =3D { + .pin_config_get =3D jhb100_pinconf_get, + .pin_config_set =3D jhb100_pinconf_set, + .pin_config_group_get =3D jhb100_pinconf_group_get, + .pin_config_group_set =3D jhb100_pinconf_group_set, + .is_generic =3D true, +}; + +static int jhb100_gpio_get_direction(struct gpio_chip *gc, + unsigned int gpio) +{ + struct jhb100_gpio_bank *bank =3D jhb100_gc_to_bank(gc); + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + const struct jhb100_pinctrl_domain_info *info =3D sfp->info; + unsigned int offset =3D 4 * bank->id; + u32 doen; + void __iomem *reg_gpio_oen; + + reg_gpio_oen =3D sfp->base + info->regs->output_en + offset; + + doen =3D (readl_relaxed(reg_gpio_oen) & BIT(gpio)) >> gpio; + + return doen =3D=3D GPOEN_ENABLE ? GPIO_LINE_DIRECTION_OUT : GPIO_LINE_DIR= ECTION_IN; +} + +static int jhb100_gpio_direction_input(struct gpio_chip *gc, + unsigned int gpio) +{ + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + struct device *dev =3D sfp->dev; + struct config_reg_layout_desc *crl_desc; + unsigned int pin =3D jhb100_gpio_to_pin(gc, gpio); + + crl_desc =3D get_crl_desc_by_pin(sfp, pin); + if (!crl_desc) { + dev_err(dev, "pin %d can't not found reg layout descriptor\n", + pin); + return -EINVAL; + } + + jhb100_padcfg_rmw(sfp, pin, + RL_DESC_GENMASK(crl_desc, input_enable) | + RL_DESC_GENMASK(crl_desc, schmitt_trigger_select), + RL_DESC_GENMASK(crl_desc, input_enable) | + RL_DESC_GENMASK(crl_desc, schmitt_trigger_select)); + + jhb100_set_one_pin_mux(sfp, pin, 0, -1); + + return 0; +} + +static int jhb100_gpio_direction_output(struct gpio_chip *gc, + unsigned int gpio, int value) +{ + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + struct device *dev =3D sfp->dev; + struct config_reg_layout_desc *crl_desc; + unsigned int pin =3D jhb100_gpio_to_pin(gc, gpio); + + jhb100_set_one_pin_mux(sfp, pin, 0, + value ? GPOUT_HIGH : GPOUT_LOW); + + crl_desc =3D get_crl_desc_by_pin(sfp, pin); + if (!crl_desc) { + dev_err(dev, "pin %d can't not found reg layout descriptor\n", + pin); + return -EINVAL; + } + + jhb100_padcfg_rmw(sfp, pin, + RL_DESC_GENMASK(crl_desc, input_enable) | + RL_DESC_GENMASK(crl_desc, schmitt_trigger_select) | + RL_DESC_GENMASK(crl_desc, pull_down) | + RL_DESC_GENMASK(crl_desc, pull_up), + 0); + + return 0; +} + +static int jhb100_gpio_get(struct gpio_chip *gc, unsigned int gpio) +{ + struct jhb100_gpio_bank *bank =3D jhb100_gc_to_bank(gc); + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + const struct jhb100_pinctrl_domain_info *info =3D sfp->info; + unsigned int offset =3D 4 * bank->id; + u32 doen =3D 0; + void __iomem *reg_gpio_oen; + void __iomem *reg; + unsigned long flags; + + reg_gpio_oen =3D sfp->base + info->regs->output_en + offset; + reg =3D sfp->base + info->regs->gpio_status + offset; + + raw_spin_lock_irqsave(&sfp->lock, flags); + doen =3D readl_relaxed(reg_gpio_oen) | BIT(gpio); + writel_relaxed(doen, reg_gpio_oen); + raw_spin_unlock_irqrestore(&sfp->lock, flags); + + return !!(readl_relaxed(reg) & BIT(gpio % 32)); +} + +static int jhb100_gpio_set(struct gpio_chip *gc, unsigned int gpio, int va= lue) +{ + struct jhb100_gpio_bank *bank =3D jhb100_gc_to_bank(gc); + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + const struct jhb100_pinctrl_domain_info *info =3D sfp->info; + unsigned int offset =3D 4 * bank->id; + void __iomem *reg_dout; + u32 dout; + unsigned long flags; + + reg_dout =3D sfp->base + info->regs->output + offset; + dout =3D (value ? GPOUT_HIGH : GPOUT_LOW) << gpio; + + raw_spin_lock_irqsave(&sfp->lock, flags); + dout |=3D readl_relaxed(reg_dout) & ~BIT(gpio); + writel_relaxed(dout, reg_dout); + raw_spin_unlock_irqrestore(&sfp->lock, flags); + + return 0; +} + +static void jhb100_irq_ack(struct irq_data *d) +{ + struct gpio_chip *gc =3D irq_data_get_irq_chip_data(d); + struct jhb100_gpio_bank *bank =3D jhb100_gc_to_bank(gc); + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + struct starfive_pinctrl_regs *pinctrl_regs =3D sfp->info->regs; + irq_hw_number_t gpio =3D irqd_to_hwirq(d); + unsigned int offset =3D 4 * bank->id; + void __iomem *ic; + unsigned long flags; + u32 value; + u32 mask; + + ic =3D sfp->base + pinctrl_regs->irq_clr + offset; + mask =3D BIT(gpio); + + raw_spin_lock_irqsave(&sfp->lock, flags); + value =3D readl_relaxed(ic) & ~mask; + writel_relaxed(value | mask, ic); + value =3D readl_relaxed(ic) & ~mask; + writel_relaxed(value, ic); + raw_spin_unlock_irqrestore(&sfp->lock, flags); +} + +static void jhb100_irq_mask(struct irq_data *d) +{ + struct gpio_chip *gc =3D irq_data_get_irq_chip_data(d); + struct jhb100_gpio_bank *bank =3D jhb100_gc_to_bank(gc); + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + struct starfive_pinctrl_regs *pinctrl_regs =3D sfp->info->regs; + irq_hw_number_t gpio =3D irqd_to_hwirq(d); + unsigned int offset =3D 4 * bank->id; + void __iomem *ien; + unsigned long flags; + u32 value; + u32 mask; + + ien =3D sfp->base + pinctrl_regs->irq_en + offset; + mask =3D BIT(gpio); + + raw_spin_lock_irqsave(&sfp->lock, flags); + value =3D readl_relaxed(ien) & ~mask; + writel_relaxed(value, ien); + raw_spin_unlock_irqrestore(&sfp->lock, flags); + + gpiochip_disable_irq(gc, d->hwirq); +} + +static void jhb100_irq_mask_ack(struct irq_data *d) +{ + struct gpio_chip *gc =3D irq_data_get_irq_chip_data(d); + struct jhb100_gpio_bank *bank =3D jhb100_gc_to_bank(gc); + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + struct starfive_pinctrl_regs *pinctrl_regs =3D sfp->info->regs; + irq_hw_number_t gpio =3D irqd_to_hwirq(d); + unsigned int offset =3D 4 * bank->id; + void __iomem *ien; + void __iomem *ic; + unsigned long flags; + u32 value; + u32 mask; + + ien =3D sfp->base + pinctrl_regs->irq_en + offset; + ic =3D sfp->base + pinctrl_regs->irq_clr + offset; + mask =3D BIT(gpio); + + raw_spin_lock_irqsave(&sfp->lock, flags); + value =3D readl_relaxed(ien) & ~mask; + writel_relaxed(value, ien); + + value =3D readl_relaxed(ic) & ~mask; + writel_relaxed(value | mask, ic); + value =3D readl_relaxed(ic) & ~mask; + writel_relaxed(value, ic); + raw_spin_unlock_irqrestore(&sfp->lock, flags); +} + +static void jhb100_irq_unmask(struct irq_data *d) +{ + struct gpio_chip *gc =3D irq_data_get_irq_chip_data(d); + struct jhb100_gpio_bank *bank =3D jhb100_gc_to_bank(gc); + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + struct starfive_pinctrl_regs *pinctrl_regs =3D sfp->info->regs; + irq_hw_number_t gpio =3D irqd_to_hwirq(d); + unsigned int offset =3D 4 * bank->id; + void __iomem *ien; + unsigned long flags; + u32 value; + u32 mask; + + ien =3D sfp->base + pinctrl_regs->irq_en + offset; + mask =3D BIT(gpio); + + gpiochip_enable_irq(gc, d->hwirq); + + raw_spin_lock_irqsave(&sfp->lock, flags); + value =3D readl_relaxed(ien) | mask; + writel_relaxed(value, ien); + raw_spin_unlock_irqrestore(&sfp->lock, flags); +} + +static int jhb100_irq_set_type(struct irq_data *d, unsigned int trigger) +{ + struct gpio_chip *gc =3D irq_data_get_irq_chip_data(d); + struct jhb100_gpio_bank *bank =3D jhb100_gc_to_bank(gc); + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + struct starfive_pinctrl_regs *pinctrl_regs =3D sfp->info->regs; + irq_hw_number_t gpio =3D irqd_to_hwirq(d); + unsigned int offset =3D 4 * bank->id; + void __iomem *base; + u32 irq_type, edge_both, polarity, mask; + unsigned long flags; + + base =3D sfp->base + offset; + mask =3D BIT(gpio); + + switch (trigger) { + case IRQ_TYPE_EDGE_RISING: + irq_type =3D mask; /* 1: edge triggered */ + edge_both =3D 0; /* 0: single edge */ + polarity =3D mask; /* 1: rising edge */ + break; + case IRQ_TYPE_EDGE_FALLING: + irq_type =3D mask; /* 1: edge triggered */ + edge_both =3D 0; /* 0: single edge */ + polarity =3D 0; /* 0: falling edge */ + break; + case IRQ_TYPE_EDGE_BOTH: + irq_type =3D mask; /* 1: edge triggered */ + edge_both =3D mask; /* 1: both edges */ + polarity =3D 0; /* 0: ignored */ + break; + case IRQ_TYPE_LEVEL_HIGH: + irq_type =3D 0; /* 0: level triggered */ + edge_both =3D 0; /* 0: ignored */ + polarity =3D mask; /* 1: high level */ + break; + case IRQ_TYPE_LEVEL_LOW: + irq_type =3D 0; /* 0: level triggered */ + edge_both =3D 0; /* 0: ignored */ + polarity =3D 0; /* 0: low level */ + break; + default: + return -EINVAL; + } + + if (trigger & IRQ_TYPE_EDGE_BOTH) + irq_set_handler_locked(d, handle_edge_irq); + else + irq_set_handler_locked(d, handle_level_irq); + + raw_spin_lock_irqsave(&sfp->lock, flags); + irq_type |=3D readl_relaxed(base + pinctrl_regs->irq_trigger) & ~mask; + writel_relaxed(irq_type, base + pinctrl_regs->irq_trigger); + + edge_both |=3D readl_relaxed(base + pinctrl_regs->irq_both_edge) & ~mask; + writel_relaxed(edge_both, base + pinctrl_regs->irq_both_edge); + + if (irq_type & mask) { /* edge polarity */ + polarity |=3D readl_relaxed(base + pinctrl_regs->irq_edge) & ~mask; + writel_relaxed(polarity, base + pinctrl_regs->irq_edge); + } else if (irq_type =3D=3D 0) { /* level polarity */ + polarity |=3D readl_relaxed(base + pinctrl_regs->irq_level) & ~mask; + writel_relaxed(polarity, base + pinctrl_regs->irq_level); + } + raw_spin_unlock_irqrestore(&sfp->lock, flags); + return 0; +} + +static int jhb100_irq_set_wake(struct irq_data *d, unsigned int enable) +{ + struct gpio_chip *gc =3D irq_data_get_irq_chip_data(d); + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + int ret =3D 0; + + if (enable) + ret =3D enable_irq_wake(sfp->wakeup_irq); + else + ret =3D disable_irq_wake(sfp->wakeup_irq); + if (ret) + dev_err(sfp->dev, "failed to %s wake-up interrupt\n", + enable ? "enable" : "disable"); + + return ret; +} + +static void jhb100_irq_print_chip(struct irq_data *d, struct seq_file *p) +{ + struct gpio_chip *gc =3D irq_data_get_irq_chip_data(d); + struct jhb100_gpio_bank *bank =3D jhb100_gc_to_bank(gc); + + seq_printf(p, "%s-%d", gc->label, bank->id); +} + +static const struct irq_chip jhb100_irq_chip =3D { + .irq_ack =3D jhb100_irq_ack, + .irq_mask =3D jhb100_irq_mask, + .irq_mask_ack =3D jhb100_irq_mask_ack, + .irq_unmask =3D jhb100_irq_unmask, + .irq_set_type =3D jhb100_irq_set_type, + .irq_set_wake =3D jhb100_irq_set_wake, + .irq_print_chip =3D jhb100_irq_print_chip, + .flags =3D IRQCHIP_SET_TYPE_MASKED | + IRQCHIP_IMMUTABLE | + IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND | + IRQCHIP_MASK_ON_SUSPEND | + IRQCHIP_SKIP_SET_WAKE, + GPIOCHIP_IRQ_RESOURCE_HELPERS, +}; + +static irqreturn_t jhb100_gpio_irq_handler(int irq, void *dev_id) +{ + struct jhb100_gpio_bank *bank =3D dev_id; + struct gpio_chip *gc =3D &bank->gc; + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + struct gpio_irq_chip *girq =3D &gc->irq; + struct starfive_pinctrl_regs *pinctrl_regs =3D sfp->info->regs; + unsigned int irq_status =3D pinctrl_regs->irq_status + bank->id * 4; + unsigned long is; + unsigned int gpio; + + is =3D readl_relaxed(sfp->base + irq_status); + if (!is) + return IRQ_NONE; + + for_each_set_bit(gpio, &is, gc->ngpio) + generic_handle_domain_irq(girq->domain, gpio); + + return IRQ_HANDLED; +} + +static int field_compare(const void *a, const void *b) +{ + const struct field_info *fa =3D (const struct field_info *)a; + const struct field_info *fb =3D (const struct field_info *)b; + + if (fa->shift < fb->shift) + return -1; + + if (fa->shift > fb->shift) + return 1; + + return 0; +} + +static int check_crl_desc(struct jhb100_pinctrl *sfp, unsigned int index, + const struct config_reg_layout_desc *desc) +{ + struct device *dev =3D sfp->dev; + struct field_info *fields; + int field_cnt =3D 0; + int num, i; + + num =3D sizeof(struct config_reg_layout_desc) / sizeof(struct reg_layout_= field); + + fields =3D kcalloc(num, sizeof(struct field_info), GFP_KERNEL); + if (!fields) + return -ENOMEM; + + #define COLLECT_FIELD(field) \ + do { \ + if (desc->field.width > 0) { \ + fields[field_cnt].name =3D #field; \ + fields[field_cnt].shift =3D desc->field.shift; \ + fields[field_cnt].width =3D desc->field.width; \ + fields[field_cnt].end =3D desc->field.shift + desc->field.width; \ + field_cnt++; \ + } \ + } while (0) + + /* same as struct config_reg_layout_desc filed except for pin_start and p= in_cnt */ + COLLECT_FIELD(debounce_width); + COLLECT_FIELD(drive_strength_2bit); + COLLECT_FIELD(drive_strength_3bit); + COLLECT_FIELD(function); + COLLECT_FIELD(input_enable); + COLLECT_FIELD(vsel); + COLLECT_FIELD(mode_select); + COLLECT_FIELD(open_drain_pull_up_sel); + COLLECT_FIELD(pull_down); + COLLECT_FIELD(pull_up); + COLLECT_FIELD(reserved); + COLLECT_FIELD(retention_signal_bus); + COLLECT_FIELD(schmitt_trigger_select); + COLLECT_FIELD(slew_rate); + + #undef COLLECT_FIELD + + sort(fields, field_cnt, sizeof(struct field_info), field_compare, NULL); + + for (i =3D 0; i < field_cnt; i++) { + if (fields[i].end > 32) { + dev_err(dev, + "layout %d: field %s exceeds 32bit [shift=3D%u, width=3D%u, end=3D%u]\= n", + index, fields[i].name, + fields[i].shift, fields[i].width, fields[i].end); + goto failed; + } + + if (i < field_cnt - 1) { + if (fields[i].end > fields[i + 1].shift) { + dev_err(dev, + "layout %d: field overlap: %s[%u:%u] with %s[%u:%u]\n", + index, fields[i].name, fields[i].end - 1, + fields[i].shift, fields[i + 1].name, + fields[i + 1].end - 1, fields[i + 1].shift); + goto failed; + } + } + } + + if (desc->reserved.width > 0) { + unsigned int used_mask =3D 0; + unsigned int reserved_mask =3D 0; + + for (i =3D 0; i < field_cnt; i++) { + if (strcmp(fields[i].name, "reserved")) + used_mask |=3D GENMASK(fields[i].end - 1, fields[i].shift); + else + reserved_mask |=3D GENMASK(fields[i].end - 1, fields[i].shift); + } + + if ((used_mask | reserved_mask) !=3D 0xFFFFFFFF) { + dev_err(dev, + "layout %d: reserved field not cover all unused bits\n", + index); + dev_err(dev, + "used mask: 0x%08X, reserved mask: 0x%08X, combined: 0x%08X\n", + used_mask, reserved_mask, used_mask | reserved_mask); + } + } + + kfree(fields); + return 0; + +failed: + kfree(fields); + return -EINVAL; +} + +static int check_layout_pin_range(struct jhb100_pinctrl *sfp, + const struct config_reg_layout_desc *descs, + unsigned int num_desc) +{ + struct device *dev =3D sfp->dev; + + if (descs[num_desc - 1].pin_start + descs[num_desc - 1].pin_cnt > sfp->np= ins) { + dev_err(dev, "layout %u pin_start[%u] + pin_cnt[%u] exceeds pin number[%= u]\n", + num_desc - 1, descs[num_desc - 1].pin_start, + descs[num_desc - 1].pin_cnt, sfp->npins); + return -EINVAL; + } + + for (int i =3D 0; i < num_desc; i++) { + if (descs[i].pin_start =3D=3D 0xff) + break; + + if (i < num_desc - 1) { + if (descs[i].pin_start + descs[i].pin_cnt > descs[i + 1].pin_start) { + dev_err(dev, "pin range: [%u-%u] overlaps with [%u-%u]\n", + descs[i].pin_start, descs[i].pin_cnt, + descs[i + 1].pin_start, descs[i + 1].pin_cnt); + return -EINVAL; + } + + if (descs[i].pin_start + descs[i].pin_cnt < descs[i + 1].pin_start) { + dev_err(dev, "pin range: [%u-%u] -> [%u-%u] has gap\n", + descs[i].pin_start, descs[i].pin_cnt, + descs[i + 1].pin_start, descs[i + 1].pin_cnt); + return -EINVAL; + } + } + } + + return 0; +} + +static int check_pinctrl_layouts(struct jhb100_pinctrl *sfp, + const struct config_reg_layout_desc *layouts) +{ + struct device *dev =3D sfp->dev; + int i =3D 0, err_cnt =3D 0, ret; + + if (!layouts) { + dev_err(dev, "layout pointer is NULL\n"); + return -EINVAL; + } + + while (layouts[i].pin_start !=3D 0xff) { + ret =3D check_crl_desc(sfp, i, &layouts[i]); + if (ret) { + dev_err(dev, "layout %d check failed\n", i); + err_cnt++; + } + + if (++i > 100) { + dev_err(dev, "too many layouts or missing 0xff for end\n"); + return -EINVAL; + } + } + + if (!err_cnt) { + ret =3D check_layout_pin_range(sfp, layouts, i); + if (ret) + err_cnt++; + } + + if (err_cnt) { + dev_err(dev, "pinctrl layout check finish with %d error(s)\n", err_cnt); + return -EINVAL; + } + + dev_info(dev, "pinctrl layout check completed!\n"); + return 0; +} + +static +struct pinctrl_pin_desc *devm_create_pins_from_pld(struct device *dev, + const struct jhb100_pin_layout_desc *desc, + const char *prefix, + unsigned int *total_pins, + unsigned int *total_gpios, + s8 **gpio_func_sel_arr) +{ + struct pinctrl_pin_desc *pins =3D NULL; + unsigned int i, j, ngpios =3D 0, npins =3D 0, pin_index =3D 0; + unsigned int same_name_found =3D 0; + s8 *arr; + + if (!dev || !desc || !prefix) { + dev_err(dev, "Invalid parameters: desc=3D%p, prefix=3D%s\n", + desc, prefix); + return ERR_PTR(-EINVAL); + } + + for (i =3D 0; desc[i].pin_start !=3D 0xff; i++) { + if (!desc[i].pin_cnt) { + dev_err(dev, "Invalid pin cnt\n"); + return ERR_PTR(-EINVAL); + } + + npins +=3D desc[i].pin_cnt; + } + + if (npins =3D=3D 0) { + dev_err(dev, "No pins defined\n"); + return ERR_PTR(-EINVAL); + } + + dev_dbg(dev, "Total pins to create: %d\n", npins); + + pins =3D devm_kcalloc(dev, npins, sizeof(*pins), GFP_KERNEL); + if (!pins) + return ERR_PTR(-ENOMEM); + + arr =3D devm_kzalloc(dev, npins, GFP_KERNEL); + if (!arr) + return ERR_PTR(-ENOMEM); + + for (i =3D 0; desc[i].pin_start !=3D 0xff; i++) { + same_name_found =3D 0; + + for (j =3D 0; j < i; j++) { + if (!strcmp(desc[j].name, desc[i].name)) { + same_name_found =3D 1; + break; + } + } + + for (j =3D 0; j < desc[i].pin_cnt; j++) { + char *name =3D NULL; + int pin_num =3D desc[i].pin_start + j; + + pins[pin_index].number =3D pin_num; + if (same_name_found) { + name =3D devm_kasprintf(dev, GFP_KERNEL, "%s_%s_%d", + prefix, desc[i].name, + desc[i].pin_start + j); + } else { + if (desc[i].pin_cnt > 1) + name =3D devm_kasprintf(dev, GFP_KERNEL, "%s_%s_%d", + prefix, desc[i].name, j); + else + name =3D devm_kasprintf(dev, GFP_KERNEL, "%s_%s", + prefix, desc[i].name); + } + + if (!name) { + dev_err(dev, "Failed to allocate pin name for pin %d\n", + pin_num); + return ERR_PTR(-ENOMEM); + } + + if (!strcmp(desc[i].name, "gpio") || desc[i].gpio_func_sel !=3D -1) + ngpios++; + + pins[pin_index].name =3D name; + arr[pin_index] =3D desc[i].gpio_func_sel; + pin_index++; + } + } + + *total_pins =3D npins; + *total_gpios =3D ngpios; + *gpio_func_sel_arr =3D arr; + + return pins; +} + +static bool starfive_of_node_instance_match(struct gpio_chip *gc, unsigned= int i) +{ + struct jhb100_pinctrl *sfp =3D gpiochip_get_data(gc); + + if (i >=3D sfp->num_banks) + return false; + + return (gc =3D=3D &sfp->banks[i].gc); +} + +int jhb100_pinctrl_probe(struct platform_device *pdev) +{ + struct device *dev =3D &pdev->dev; + struct gpio_irq_chip *girq; + const struct jhb100_pinctrl_domain_info *info; + struct jhb100_pinctrl *sfp; + struct pinctrl_desc *jhb100_pinctrl_desc; + struct starfive_pinctrl_regs *pinctrl_regs; + struct reset_control *rst; + struct clk *clk; + int ret; + int irq; + + info =3D of_device_get_match_data(&pdev->dev); + if (!info) + return -ENODEV; + + pinctrl_regs =3D info->regs; + + sfp =3D devm_kzalloc(dev, sizeof(*sfp), GFP_KERNEL); + if (!sfp) + return -ENOMEM; + + sfp->base =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(sfp->base)) + return PTR_ERR(sfp->base); + + clk =3D devm_clk_get_optional_enabled(dev, NULL); + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), "could not get & enable clock\n"= ); + + rst =3D devm_reset_control_array_get_optional_shared(dev); + if (IS_ERR(rst)) + return dev_err_probe(dev, PTR_ERR(rst), "could not get reset control\n"); + + /* + * we don't want to assert reset and risk undoing pin muxing for the + * early boot serial console, but let's make sure the reset line is + * deasserted in case someone runs a really minimal bootloader. + */ + ret =3D reset_control_deassert(rst); + if (ret) + return dev_err_probe(dev, ret, "could not deassert reset\n"); + + irq =3D platform_get_irq(pdev, 0); + if (irq < 0) + return irq; + + sfp->pins =3D devm_create_pins_from_pld(dev, info->pl_desc, info->name, + &sfp->npins, &sfp->ngpios, + &sfp->gpio_func_sel_arr); + if (IS_ERR(sfp->pins)) + return PTR_ERR(sfp->pins); + + jhb100_pinctrl_desc =3D devm_kzalloc(&pdev->dev, + sizeof(*jhb100_pinctrl_desc), + GFP_KERNEL); + if (!jhb100_pinctrl_desc) + return -ENOMEM; + + jhb100_pinctrl_desc->name =3D dev_name(dev); + jhb100_pinctrl_desc->pctlops =3D &jhb100_pinctrl_ops; + jhb100_pinctrl_desc->pmxops =3D &jhb100_pinmux_ops; + jhb100_pinctrl_desc->confops =3D &jhb100_pinconf_ops; + jhb100_pinctrl_desc->owner =3D THIS_MODULE; + jhb100_pinctrl_desc->pins =3D sfp->pins; + jhb100_pinctrl_desc->npins =3D sfp->npins; + + sfp->info =3D info; + sfp->dev =3D dev; + platform_set_drvdata(pdev, sfp); + + raw_spin_lock_init(&sfp->lock); + mutex_init(&sfp->mutex); + + ret =3D devm_pinctrl_register_and_init(dev, jhb100_pinctrl_desc, + sfp, &sfp->pctl); + if (ret) + return dev_err_probe(dev, ret, + "could not register pinctrl driver\n"); + + ret =3D pinctrl_enable(sfp->pctl); + if (ret) + return ret; + + sfp->num_banks =3D DIV_ROUND_UP(sfp->ngpios, JHB100_NR_GPIOS_PER_BANK); + + for (unsigned int i =3D 0; i < sfp->num_banks; i++) { + if (sfp->ngpios > (i + 1) * JHB100_NR_GPIOS_PER_BANK) + sfp->banks[i].gc.ngpio =3D (i + 1) * JHB100_NR_GPIOS_PER_BANK; + else + sfp->banks[i].gc.ngpio =3D sfp->ngpios - i * JHB100_NR_GPIOS_PER_BANK; + + sfp->banks[i].id =3D i; + + sfp->banks[i].gc.parent =3D dev; + sfp->banks[i].gc.label =3D dev_name(dev); + sfp->banks[i].gc.owner =3D THIS_MODULE; + sfp->banks[i].gc.request =3D pinctrl_gpio_request; + sfp->banks[i].gc.free =3D pinctrl_gpio_free; + sfp->banks[i].gc.get_direction =3D jhb100_gpio_get_direction; + sfp->banks[i].gc.direction_input =3D jhb100_gpio_direction_input; + sfp->banks[i].gc.direction_output =3D jhb100_gpio_direction_output; + sfp->banks[i].gc.get =3D jhb100_gpio_get; + sfp->banks[i].gc.set =3D jhb100_gpio_set; + sfp->banks[i].gc.set_config =3D gpiochip_generic_config; + sfp->banks[i].gc.base =3D -1; + sfp->banks[i].gc.of_gpio_n_cells =3D 3; + sfp->banks[i].gc.of_node_instance_match =3D starfive_of_node_instance_ma= tch; + + girq =3D &sfp->banks[i].gc.irq; + girq->handler =3D handle_simple_irq; + + gpio_irq_chip_set_chip(girq, &jhb100_irq_chip); + + /* mask all GPIO interrupts */ + writel_relaxed(0U, sfp->base + pinctrl_regs->irq_en + 4 * i); + /* clear all interrupts */ + writel_relaxed(~0U, sfp->base + pinctrl_regs->irq_clr + 4 * i); + writel_relaxed(0U, sfp->base + pinctrl_regs->irq_clr + 4 * i); + + ret =3D devm_request_irq(dev, irq, jhb100_gpio_irq_handler, IRQF_SHARED, + sfp->banks[i].gc.label, &sfp->banks[i]); + if (ret < 0) + return dev_err_probe(dev, ret, "failed to register IRQ\n"); + + ret =3D devm_gpiochip_add_data(dev, &sfp->banks[i].gc, sfp); + if (ret) + return dev_err_probe(dev, ret, "could not register gpiochip\n"); + } + + dev_info(dev, "StarFive JHB100 GPIO chip registered %d GPIOs\n", + sfp->ngpios); + + ret =3D check_pinctrl_layouts(sfp, info->crl_desc); + if (ret) + return ret; + + return 0; +} +EXPORT_SYMBOL_GPL(jhb100_pinctrl_probe); + +MODULE_DESCRIPTION("Pinctrl driver for the StarFive JHB100 SoC"); +MODULE_AUTHOR("Alex Soo "); +MODULE_LICENSE("GPL"); diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jhb100.h b/drivers/p= inctrl/starfive/pinctrl-starfive-jhb100.h new file mode 100644 index 000000000000..529b358abbbe --- /dev/null +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jhb100.h @@ -0,0 +1,152 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Pinctrl / GPIO driver for StarFive JHB100 SoC + * + * Copyright (C) 2024 StarFive Technology Co., Ltd. + * Author: Alex Soo + * + */ + +#ifndef __PINCTRL_STARFIVE_JHB100_H__ +#define __PINCTRL_STARFIVE_JHB100_H__ + +#include +#include +#include + +#define JHB100_MAX_BANKS 2 + +struct jhb100_pin_layout_desc { + unsigned int pin_start; + unsigned int pin_cnt; + const char *name; + s8 gpio_func_sel; +}; + +struct jhb100_gpio_bank { + struct gpio_chip gc; + unsigned int id; +}; + +struct jhb100_pinctrl { + struct device *dev; + struct jhb100_gpio_bank banks[JHB100_MAX_BANKS]; + unsigned int num_banks; + struct pinctrl_gpio_range gpios; + raw_spinlock_t lock; + const char *iodomain_name; + void __iomem *base; + struct pinctrl_dev *pctl; + /* register read/write mutex */ + struct mutex mutex; + const struct jhb100_pinctrl_domain_info *info; + /* wakeup */ + int wakeup_irq; + struct irq_domain *irq_domain; + const struct pinctrl_pin_desc *pins; + unsigned int npins; + unsigned int ngpios; + s8 *gpio_func_sel_arr; +}; + +struct pinvref_desc { + unsigned int range; + u32 pin_grp[32]; + u32 num_pins; +}; + +struct pinvref_reg { + unsigned int reg; + const struct pinvref_desc *pv_desc; + u32 num_pv; +}; + +struct gpio_irq_reg { + unsigned int reg; + unsigned int width_per_pin; +}; + +struct starfive_pinctrl_regs { + struct pinvref_reg vref; + struct gpio_irq_reg func_sel; + unsigned int config; + unsigned int output; + unsigned int output_en; + unsigned int gpio_status; + unsigned int irq_en; + unsigned int irq_status; + unsigned int irq_clr; + unsigned int irq_trigger; + unsigned int irq_level; + unsigned int irq_both_edge; + unsigned int irq_edge; +}; + +struct reg_layout_field { + unsigned char shift; + unsigned char width; +}; + +#define RL_DESC_SUPPORTED(crl_desc, field) ({ \ + typeof(crl_desc) _desc =3D (crl_desc); \ + (_desc && _desc->field.width > 0); \ +}) + +#define RL_DESC_SHIFT(crl_desc, field) ({ \ + typeof(crl_desc) __desc =3D (crl_desc); \ + __desc->field.shift; \ +}) + +#define RL_DESC_GENMASK(crl_desc, field) ({ \ + typeof(crl_desc) __desc =3D (crl_desc); \ + RL_DESC_SUPPORTED(__desc, field) ? \ + GENMASK(__desc->field.shift + __desc->field.width - 1, __desc->field.shif= t) : 0; \ +}) + +struct config_reg_layout_desc { + unsigned int pin_start; + unsigned int pin_cnt; + + struct reg_layout_field debounce_width; + struct reg_layout_field drive_strength_2bit; + struct reg_layout_field drive_strength_3bit; + struct reg_layout_field function; + struct reg_layout_field input_enable; + struct reg_layout_field vsel; + struct reg_layout_field mode_select; + struct reg_layout_field open_drain_pull_up_sel; + struct reg_layout_field pull_down; + struct reg_layout_field pull_up; + struct reg_layout_field reserved; + struct reg_layout_field retention_signal_bus; + struct reg_layout_field schmitt_trigger_select; + struct reg_layout_field slew_rate; +}; + +struct funcsel_reg_layout_desc { + unsigned int pin_start; + unsigned int pin_cnt; + unsigned int width; +}; + +#define JHB100_FUNC_MAPS_MAX_PIN(n) ((n) + 1) + +struct jhb100_pinctrl_func_maps { + char *func; + unsigned char val; + u32 max_pin; +}; + +struct jhb100_pinctrl_domain_info { + const char *name; + const struct pinctrl_pin_desc *pins; + const struct jhb100_pin_layout_desc *pl_desc; + const struct jhb100_pinctrl_func_maps *fmaps; + u32 num_maps; + struct config_reg_layout_desc *crl_desc; + struct starfive_pinctrl_regs *regs; +}; + +int jhb100_pinctrl_probe(struct platform_device *pdev); + +#endif /* __PINCTRL_STARFIVE_JHB100_H__ */ --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2123.outbound.protection.partner.outlook.cn [139.219.17.123]) (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 3C8293E51F4; Wed, 3 Jun 2026 06:09:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.123 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466968; cv=fail; b=mgbOU2Q8uoIvSiVfHAQema71J6bs4tKMF+X9W+D8w348yC6a0lKRZGjHWP5I3Vrfz3gcd5xeoc1KwdCMw0UkRBSDA6RH+Ppn7JVQ6lqeW3j17fvZ8izSnHJIbpK8JFF8JwVtUFMCqvD6rFcl2BOg/iKnmqiGMrv0EJWREv/kynE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466968; c=relaxed/simple; bh=Svw8WZuirqshkSbeedLHyDrrXkrNMLNs2Ot3Db5LANk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=VSmEmDv2/dTgbIdH1PhEJme+GTBblCBldT3QaS0mcGfYUtwVYjFiT+/l2fvFDDCJo9XgZplXbpxI5z+EHhIXzwBszaxv4gbEBaW1mkqzKjMdBW6VRGwgkNcYvtCVTsQvn4GjdPcp8h73stRuUHzwgschbtzePTy0JgSZTmkYkHQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.123 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WYAnHpXwjiRYlzw7iweAnoJQXtYGYlmAXoa2Eue5/ZV7wWyyZG1hMYWvzc60s4KWKEr+CQxUBbLR3iXNywEvz5CEUVNvRPoi/8MhEuPI0vE0f4IbGZtE+5hypVxCyb/rjNCwNBwtQHouisQZv3+vwjIn+x601vHN9nb3ccg8WZ4RM+uhFAnQX4h1wbgk116hh+cf7qrrHGOfuQ4CNYbe0ivHAxwZQihj3XEcCt06eduSc15WQOVgh/dN+cFBt5xIfq5rdXmECKrQ2VBsOjCAOxZ68jqVGCInURDYRlBPTaA1XOZwcL2cg+sZXo/WunZAZfs0ZBs9e4lsfzlj9Cxwtg== 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=lR12FA8mBkbeXarDA05DPP6Sj/wRGvQF43wUD/Wb60E=; b=AOO1HVbop9rqoAxXySa7uOE8JalvQufdTXmdhEUyP3XuiUWdqFAfSyntKzWV/H4t4eEsVxwtPeWeHPAOUxH+QPlsA/MR5L7NfMqrFQFuhF988uZc8U+EBSpiBQAdVzOvSymnQt0SE3TgpstslbXMBj6xmdVMF+SKLPyP8e8APQcMO4ehQfgFZdWAijsy5Z1fl7aM7CqMqAyshW0mw8WjNRwTsVIodlPqs9p3pIufp4gJ86RYP+DAtJhLk6B0HIKRGV4XBScdD8+3HHxZ0YewUUfAHBTdY/83DopiUJbqX+0umD/wAJ/dsrSnK1ZPIg8u8EAYmxjb1URxFpKmgbQAzg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:06 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:06 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 05/21] dt-bindings: pinctrl: Add starfive,jhb100-sys0h-pinctrl Date: Tue, 2 Jun 2026 22:53:31 -0700 Message-Id: <20260603055347.66845-6-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: d32c3b80-8786-460f-e271-08dec1348642 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: eaFD5XWuI9aBsKHnI29oMcVva98kMWYY769CEEVXHEVyNqc7abFMWjCcEXGWvN2itTl8zPk5pet4+3EVRXJ/VMb/WozvOlDFXzG377uAcsilq4/O/qR70NfMzJf8WYu5thi5aBnyEdN6EVSAhaobTFQLpgouMy07kIOPTjyN6qTABDzfeEZQV3SwBtjoRaQh12OF9Jec1v7FmHzN/ot+NEdjn6rD9G2IMHudHXsf6uSG18T+dZSZZRbKpYL3D/ZV6Ks1F1OHdijkarIHOaPomZn2KbXsYBlxOvswH0IyRhEnc0mGwE8z9C0e/5uW8RA6jPNEpQdAo2keeyPHOPquQ5/rYHS1NkBQYHznR5lfmHDqcfeJE79lQOAmlsHrWEwPUeemJzjJ+YX4C3UcVYKF7l0PZD1CH91P6qKK9L4wyAFhir3Xl6ZMeJuJU2vshEK+c552vibbWYBfII61j0sNb1whIjdDM9mr133bNf8fPDSD0w2FHpWwFlwhHtCKXo9IHp3lqo5WbNg4a39tQRK7sLi4/hv1I092/eqIaK+/X9k465I7lTjoPEO74TJpHyvXD34InPAtFXaix9eGGUHLxA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?V06n/gFpCO2uNaJ48FS6dqNw9T7dqkj2B1JrcvAskA852H1uA0mdqxzRFwzp?= =?us-ascii?Q?tvX5fZ+0RhrGlTh05iyQwZ8dSiAIVZFGJ+IIaOu0+NGXlWSJPDCb2zLj9xCl?= =?us-ascii?Q?6HDdh8G4eT2Ap3vj7dP+oPihAuUSGoXomnQMXAGpkmcpK5fsIk/CQnarAmJD?= =?us-ascii?Q?cJFur6EaOxgieA/zuGL738tS2WGbZvjD5/C06ll1aEP6SyzJmVqxGOL8iflV?= =?us-ascii?Q?QaFIem7ObzyIN4+iVbMX/Ou2mQtUCobtNCaMX+oR0GaP/RS9G4VDR2ZbfeTN?= =?us-ascii?Q?CKo9VoPgIXVPZjSM9V2AtAKFb0KZ9bnf6jSCdngvjtqHnDVlEi3m6FpaRd46?= =?us-ascii?Q?OoR5NmAE5JWd8x95c0KABMslf4BELtnp8jQWp6Kn0DFl4X+ytNHlc3T4ksEF?= =?us-ascii?Q?VuGj6ilPjFnv3knEjeRXLCY9T8Z6UqAnyrg9z1PgYtSz5f+M8lbTvt2oCHbl?= =?us-ascii?Q?3WQ10vnjUqQA3NZOnoDoQtTbazatggM2OtXHZ6bNyEkQMUMq00SBK0ACQiyP?= =?us-ascii?Q?Gc/4vhGGfIcPr4uubCLW2+4MOjeoOg2sJEXsqc1UFzPaq2cr1WouTKWCEoiw?= =?us-ascii?Q?G9mi93RX/w/GnD117zCKD4pmiTCzqylK1SZhVJ+k5sFiNliA+geCaD+UwDiA?= =?us-ascii?Q?eA4DItPlXPVIPI/cG3t+sRV2CPMls0Y/KO4taXYCxQoccuy3jjRYz/j/4JDd?= =?us-ascii?Q?UarqgfYTQKxasiEyIVmsi1ULLmhDin45KLiEK5+3sDiTHclzPop1Xwwop9LC?= =?us-ascii?Q?1PqvI1khEphXRsdxs+DpjUBd1Z+FSsTmL123x7/z5VnxcW8XUGbcjAlzu/aC?= =?us-ascii?Q?EIekolPlp5mEDe+TtnPaoCMxDAdGSAwmPizJaXG01fF50fYkWqzmvjs4RVpz?= =?us-ascii?Q?0TcEvajo95L0z/eUx3a3W6pcbWNn0aAjtaYFztGN7BYH7483dxj5BYuNUFJ+?= =?us-ascii?Q?M/yX/rd830uU4NDG6b53bHKIU4mHU0bmorMiliF/VEvEN2qy2b3Cfh4ArX9P?= =?us-ascii?Q?pO3qbrUly+fCEhTIoIdzB8zPsvxjyFqLXSKBeLlCNdTJuM23bodI7vlaB7wo?= =?us-ascii?Q?LdufRfvtjG5M+Be0qeNEAiZ05YOiox95NpxMyJxquIm4PvNGJB8B29ao4ebR?= =?us-ascii?Q?Xwa2FqGhyHClgMArlDcvBIOS/KHfdjAijSbdxaMflJnFFkH66Bfm73WypTrA?= =?us-ascii?Q?cae98WoT8LuNwi+76vZX7SD9A+fLRuEi462VsiOTpvd7KosMw5yK63VZ+7G/?= =?us-ascii?Q?ycZwk3w4VBVMreeT/QWaoX9B1FlSeMPmMJlMf8eqdtGtV/Qgpp0Jfl2HVkPr?= =?us-ascii?Q?SsiB01fvjf+6LcPaGIOnOQvaKAkl0knllScVmORq/Rq7Xro8wQUC1ESu9F4w?= =?us-ascii?Q?WA09rqoj9izEuWgxJZdVDA6l3peKpVlxnn9iJIgMhAdcd8c54AtVZ2NNfW2X?= =?us-ascii?Q?Uxw/iLfzVgJgz/vf2PhDKQCvA4hlBg7yx3vDXTJNRIGTLpVSz9ZCWuMWsS8q?= =?us-ascii?Q?JOYYYGS4rEqGJE6EblowQe7N23IT2rqxYEKcMWf5OUfNuljcgyn4uVFn3Cfu?= =?us-ascii?Q?IYi2x7F/ryN2gj/x4i58U6XlIgwy8AsU57ns2L0IpBuOWbDzBxMcXnW3dnu/?= =?us-ascii?Q?XiEk47/MHXEFWSjb8OKxQpUUnMHR9XP72wZ9gaDBNTDlcSaWvGnX59QG2VP7?= =?us-ascii?Q?Q/ktfAlraACqTedRjzYGkvs7y0L2a/0GrWZ9oU1087wHyfzrLvEogtpB1TuS?= =?us-ascii?Q?wCUqKDPsdv+Go+BlcwiLPBwCML6L1Ue+D9SR00kP1jZ/4c5+5hYw?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: d32c3b80-8786-460f-e271-08dec1348642 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:06.8736 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: kIiIDXzZMDwxQcxqxolVnV2Oxk3TNpme57OeRWwO6lbO1HcCLDeyAgTMN64GR5Ykucc8/kC2spdpAxVApRuSFQX6a83Hi00rKSn3bhsqdqeH/VO5KBpI9EH3V68OkW7h X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl bindings for StarFive JHB100 SoC System-0 host(sys0h) pinctrl controller. Signed-off-by: Changhuang Liang --- .../starfive,jhb100-sys0h-pinctrl.yaml | 160 ++++++++++++++++++ .../pinctrl/starfive,jhb100-pinctrl.h | 14 ++ 2 files changed, 174 insertions(+) create mode 100644 Documentation/devicetree/bindings/pinctrl/starfive,jhb1= 00-sys0h-pinctrl.yaml diff --git a/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-sys0= h-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-= sys0h-pinctrl.yaml new file mode 100644 index 000000000000..7e704401dbeb --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-sys0h-pinct= rl.yaml @@ -0,0 +1,160 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/starfive,jhb100-sys0h-pinctrl.y= aml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: StarFive JHB100 System-0 Host Pin Controller + +description: | + Pinctrl bindings for JHB100 RISC-V SoC from StarFive Technology Ltd. + + The JHB100 SoC has 13 pinctrl domains - sys0, sys0h, sys1, sys2, per0, p= er1, + per2, per2pok, per3, adc0, adc1, emmc, and vga. + This document provides an overview of the "sys0h" pinctrl domain. + + The "sys0h" domain has a pin controller which provides + - function selection for GPIO pads. + - GPIO pad configuration. + - GPIO interrupt handling. + + In the SYS0H Pin Controller, there are 12 multi-function GPIO_PADs. Each= of + them can be multiplexed to different hardware blocks through function + selection. Each iopad has a maximum of up to 3 functions - 0, 1, 2, and = 3. + Function 0 is the default function which is generally the GPIO function + (or occasionally, it can be a peripheral signal). + Functions 1, 2, and 3 are the alternate functions or peripheral signals = that + can be routed to the iopad. The function selection can be carried out by + writing the function number to the iopad function select register. + + Each iopad is configurable with parameters such as input-enable, internal + pull-up/pull-down bias, drive strength, schmitt trigger, slew rate, input + debounce nanoseconds. + +maintainers: + - Changhuang Liang + +properties: + compatible: + items: + - const: starfive,jhb100-sys0h-pinctrl + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + resets: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-controller: true + + '#interrupt-cells': + const: 3 + + gpio-controller: true + + '#gpio-cells': + const: 3 + + gpio-ranges: true + + gpio-line-names: true + +patternProperties: + '-grp$': + type: object + additionalProperties: false + patternProperties: + '-pins$': + type: object + description: | + A pinctrl node should contain at least one subnode representing = the + pinctrl groups available in the domain. Each subnode will list t= he + pins it needs, and how they should be configured, with regard to + function selection, bias, input enable/disable, input schmitt + trigger enable/disable, slew-rate, input debounce nanoseconds and + drive-strength. + allOf: + - $ref: /schemas/pinctrl/pincfg-node.yaml + - $ref: /schemas/pinctrl/pinmux-node.yaml + additionalProperties: false + + properties: + pins: + description: + The list of IOs that properties in the pincfg node apply to. + + function: + description: + A string containing the name of the function to mux for these + pins. + enum: [ espi, espi_reset, espi0_vw, espi1_vw, gpio, scap_trigg= er ] + + bias-disable: true + + bias-pull-down: + type: boolean + + bias-pull-up: + type: boolean + + drive-strength: + enum: [ 2, 4, 8, 12 ] + + drive-strength-microamp: + enum: [ 2000, 4000, 8000, 12000 ] + + input-debounce-ns: + minimum: 0 + maximum: 4294967295 + + input-disable: true + + input-enable: true + + input-schmitt-enable: true + + input-schmitt-disable: true + + slew-rate: + enum: [ 0, 1 ] + default: 0 + description: | + 0: slow (half frequency) + 1: fast +required: + - compatible + - reg + - resets + - interrupts + - interrupt-controller + - '#interrupt-cells' + - gpio-controller + - '#gpio-cells' + - gpio-ranges + +additionalProperties: false + +examples: + - | + soc { + #address-cells =3D <2>; + #size-cells =3D <2>; + + pinctrl_sys0h: pinctrl@13080800 { + compatible =3D "starfive,jhb100-sys0h-pinctrl"; + reg =3D <0x0 0x13080800 0x0 0x800>; + resets =3D <&sys0crg 3>; + interrupts =3D <57>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_sys0h 0 0 0 12>; + }; + }; diff --git a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h b/includ= e/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h index 6d8f5516a178..38d5a94e92e3 100644 --- a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h +++ b/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h @@ -14,4 +14,18 @@ #define PADNUM_SYS0_GPIO_A2 2 #define PADNUM_SYS0_GPIO_A3 3 =20 +/* sys0h pad numbers */ +#define PADNUM_SYS0H_GPIO_A4 0 +#define PADNUM_SYS0H_GPIO_A5 1 +#define PADNUM_SYS0H_GPIO_A6 2 +#define PADNUM_SYS0H_GPIO_A7 3 +#define PADNUM_SYS0H_GPIO_A8 4 +#define PADNUM_SYS0H_GPIO_A9 5 +#define PADNUM_SYS0H_GPIO_A10 6 +#define PADNUM_SYS0H_GPIO_A11 7 +#define PADNUM_SYS0H_GPIO_A12 8 +#define PADNUM_SYS0H_GPIO_A13 9 +#define PADNUM_SYS0H_GPIO_A14 10 +#define PADNUM_SYS0H_GPIO_A15 11 + #endif --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2132.outbound.protection.partner.outlook.cn [139.219.17.132]) (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 775EB3F4DD4; Wed, 3 Jun 2026 05:55:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.132 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466122; cv=fail; b=awNVRuBzGOd4H998/YDcQGG39D7d7TOvShjcU6frm1qiUuG/RYoR2Vt7I1BHbDMYQ+lfSzzg4ruV1Ptk9mJLC1KBmdbSL6SRzSBII3MCJYQ1gjGAI2/AADzFyt9fyTCktW20fhRfKunhJcaR+n4MsaCHQgM8YHYwg/00zKJ0O+o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466122; c=relaxed/simple; bh=md29tVv4vRLLBQsnYuOXar90il4HPZ+i/NrWElOuQWc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=d0WqXpP8FaxsEc/hifddaWSomzEIqe2HnGL3HXePLNRu32PAfFPQ1zW58TbQhaXbasdplhhwKTMoY+puwxY80rLwiQHWR6oGzOU9mZD6oRcDuv+s7w+JQmrwzD6ceLxPKawCiAvAco9kHpY2SVxvEmXu7hDMoViP3TarhrgKj+0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.132 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EhZXhPjVS8rbpwAdZFhe3wLTGo7FmONrgODvGIFOM/c5ofu1kB73Wk15XD4k57iSXVffWM1Kiw5vJ00xOXn5sprpL/D9EAq2Cz7zZCcFr/teBGmLbh9kxEtLSRa7KIFD+fgyYUDFh8/McF4QsnXH2kPR577uzbIQROZVgZJR6r3Ko7bXBMeHcoIEUSEzS5+kZnwLCSI3vas/0oMciMT7mWv80lQlSksKA9LJRhbsO67B2krQor3YjnvbOqC3yZfo6K99XHLJExLZz2DLTxNcriKPX3POOQ2J2oLtOT/CkCfFkuCbLxcVMOF6PiPkmvvxpe7xuwTrGT0CR0Zblag96A== 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=29ZgbLHy/2gAn69JEEWbm0PmDO9AP9/w56jCKRRe/Wc=; b=cW9zhvUW1bCzYYxTvIQC+6cHy7FQgnnR4JllprGXLOgT2PoTFvUHCH9DdBCj5C33SGoy03n37WwqDld+iovFCqS8giP5XraInHppYNeB1id008t5BQQOVc7fW7Ja3a2ejESw/EVNwuR13fs4zMebluRWAzxgiM6w8t75Tb/sJ0toAXCx4NrM9FYUW7K2tnC3PqCHNANiXfBdRid3kdg0fMc1sfC3mLEkIY8jsvlFf0JPpGjtn1Q7XCRMYE5Yk8wWhWAAP3BUCeejcRJbH6a6wMF5VMYx/vPVh/7ji+NnZVVue3cSo7tQY9ohcYQlZOF9utsgB4sjW6Grc0DbnxqJbg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:08 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:08 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 06/21] pinctrl: starfive: Add StarFive JHB100 sys0h controller driver Date: Tue, 2 Jun 2026 22:53:32 -0700 Message-Id: <20260603055347.66845-7-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: 344d1de7-9a48-452d-5a20-08dec13486fc X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|5023799004|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: Fl7hFcerg9RuBIdwU/gbvlTY5vWWHgjdAu8+0/Dr75zMesaVY2nFDEBiNfZ/CTvlcO/nGMJJrm1WSCC3ctLjYH6aNqfwVByT+DjsEQFmHuQpuS0LnBy8TwUNHkFESRKxmwnqL7FvfT3HxFfo6a/35F1L8dNFVd9jcrku4zQuywjZRxNjwHhmrus/u4aMMtoERMYgEjw2U0vnfSj8BCjwJFxxYAoqy6QLf+mhxOZxoiH9sW/0Dzb6KlwPHhIpmGs8/vXjxZJxm4jVZloMpkEf9VYJPhc6l01gjk60uEZwFqla3iINqtCn8GqUS+KHCAxettPXG6yOWGDUXKroH1uFcHbrKHzzh08AOthBg7VhKvkoRVWbLb/ebJV0uOMcoN2M8A63k6YbGXVLmKcDP6h5ubFk0W+jto0ISdiVT+XS1sPlyEjXwF7RBPDAGia8SJGg0+aG9TO/f5achzUhzvcTGRd8LIgJUwmVPvlU4P+qJjUwNMTBc1WrHUu06G/hBJ8LxY+8ToItnVbkRkTH6rHdkV1y2qjVTC77pLqr5iyX6ImhvwriqLYh2zKUq/uY2bd0hR3/Vu3EiLUukSgwBPXUKA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(5023799004)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?jHDfJJf/aiMgeYOf5LXqsFd01fdLPzN7653M5/urE05d/SiPAEUZGD6KQD+J?= =?us-ascii?Q?qQ1D3goRzl6qeoIPfQK/N6B1EnWod/aX3abfZySbwxwRqkbc6LyAx4igciF7?= =?us-ascii?Q?DwT8ZXtxt34zAiPEEXjaJvULD74rqP7FbwZr51Gc1ZNSRA6ajl/f2XQEsaTZ?= =?us-ascii?Q?ZNfUEXxMyqSmvKuN7gEErU+gdN9ZudUAuieZG0cU9eTScQhImkVRqXDg+u+O?= =?us-ascii?Q?SpeWr0SWouMdaxU4ImlmhUayznC2iJImzfQfQyMXrV3bEiTw2vPVRj7xpd3R?= =?us-ascii?Q?I0kNrAIrIvhqaXSZFhxH44f5xrdk7onwi9XYa+X4WfU0W7c7Fc0DOnLYjEC2?= =?us-ascii?Q?2Hq0Ld224RP73p+9ncyp9rqjm660W02n3ToULtS7llxXc6I4J+nvnuz1hsrJ?= =?us-ascii?Q?+/+ZAcDZ/3wGQEGTJ8zc5sRqRI30fhQOY5l/koo/rsx0PGlyMtRKlK1Z5Zr+?= =?us-ascii?Q?KQkX0dgqE9HtOHJt/bBRWKyaAwhkjQKg8VzIa670QqzYxGJTKrwajaje/KvU?= =?us-ascii?Q?OFFtJu+aVG+pjFn4+ZuyzTVT38ogr5Wds+AsrLBKsWgVMxAUp/L+jf4j9xI4?= =?us-ascii?Q?YO5BN6toP0/EBweo2/SQPNNpH8v53iwWVdTK7evDK2UBAH5fmh+LGrfbq+UK?= =?us-ascii?Q?OIHdFNf902gi1GLVUmRuO81Jvp28B5ycUESty4qKB2sAfDli29B7HswPIU+X?= =?us-ascii?Q?5e+wjc6HeP6G5nfnFfJlRCI8tXPwMttQgGZwKhy807qf5KTAsLU+bER2/ri2?= =?us-ascii?Q?YKYtTi5LfS1pvEvEv0ttIfMC77JwauIcCgm8vu+xTiiuv2FqQttfET1qkNvZ?= =?us-ascii?Q?TcFwD8igEQQbHrY9+6tg+Mzv4+5iCw48TZ6Cw/h1ka3MYOqoReHINltp9IAI?= =?us-ascii?Q?wMwKiTI0oikRVeoXBSEdHM1wqTYuW4RxfeW+CSJf7ls7aC9LOAGAJlFkOD4n?= =?us-ascii?Q?L+Tl1SmAvV9nBrRr424otLJIdtC/sqx1neioxEN/Gp2E4S2XoqarZh4XRIfg?= =?us-ascii?Q?POA+zDHDNYckisZcGg44pt/X9awrODbVVyQXYnzC0ooI2TWSurBG9N5rAwrf?= =?us-ascii?Q?ptgrEggQ7A409H4UU6uQX0baWCbqIm1FB6g5KefaR1yYrYNKQHuDRuUQR7Sg?= =?us-ascii?Q?EV7akTYCctKN2XE83IQANIJlSVUsLW1CMOpj/+HJ/U25cdl7Ro68AyyhTa0c?= =?us-ascii?Q?IUQCFw1V+fQGG8CkfXQ0Y0L5+g03vBI8DMiFrU8KOmO3D3dbkfSzDkmFizR+?= =?us-ascii?Q?KSYA/5qzuRMeFaI6YhetSRcEEG3tsfm1lor7Z59egENhXNLLQUn1A/03aG+B?= =?us-ascii?Q?64W/EckW0/8HoMzSkFe9VcdKcg2tZw92xrjr80umXJwyG3EvrueftvIUj5aa?= =?us-ascii?Q?OSdzj0fYLIR744VRbEH61+EmA4s42d6bu+Kt97FFRCr4xF5A36bUXzk4n/ws?= =?us-ascii?Q?xU6KYu6LQnpR1WePqk7jJbqSnctubsyIgrnOGjwI/ldgrI69MlL7KAxsWDkh?= =?us-ascii?Q?OCKUcjPzI5X2X02TKPQiH43lxpmrlVzrtrTmvmPhMV5Q54mKYXs2tZodNtIf?= =?us-ascii?Q?wup1Eq8NOY4tqofVQJ1EX9bOzrr5UvSSkkFe2WKFzh/lMyPEPtMSVorb/OpK?= =?us-ascii?Q?h+4KqMQWCudO19FcATlm4v5oWNi7Mex5HallGucwBL4jYciECwja2daJgX6s?= =?us-ascii?Q?8YCKyReH35zfRh0/KeVy4+8EWfUx32u2jjWjNf14dyRP4kQwEd7tBGFeiZKY?= =?us-ascii?Q?AE7XZnbwXbuQt/B4R47NX0SZQy2UWtKPVJNmx1o5k2CMRDPIoVi9?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 344d1de7-9a48-452d-5a20-08dec13486fc X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:08.1095 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jvwDVQADW4pPBW8LIb0WK5EkU3iwh9i0F2SIjEV3q7aM4ONfgQFk0pfJv4+vd8hFbOKm3fQrjVijqk78dJlWFn0e+zwd1TwF0MFZ0T46ex9C67wNHwQO6SFkBoDBLhMT X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl driver for StarFive JHB100 SoC System-0 Host(sys0h) pinctrl controller. Co-developed-by: Lianfeng Ouyang Signed-off-by: Lianfeng Ouyang Signed-off-by: Changhuang Liang --- drivers/pinctrl/starfive/Kconfig | 12 +++ drivers/pinctrl/starfive/Makefile | 1 + .../starfive/pinctrl-starfive-jhb100-sys0h.c | 97 +++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 drivers/pinctrl/starfive/pinctrl-starfive-jhb100-sys0h.c diff --git a/drivers/pinctrl/starfive/Kconfig b/drivers/pinctrl/starfive/Kc= onfig index 548a1b133f81..1c87f64830ed 100644 --- a/drivers/pinctrl/starfive/Kconfig +++ b/drivers/pinctrl/starfive/Kconfig @@ -66,3 +66,15 @@ config PINCTRL_STARFIVE_JHB100_SYS0 This also provides an interface to the GPIO pins not used by other peripherals supporting inputs, outputs, configuring pull-up/pull-down and interrupts on input changes. + +config PINCTRL_STARFIVE_JHB100_SYS0H + tristate "StarFive JHB100 SoC System-0 Host pinctrl and GPIO drive= r" + depends on ARCH_STARFIVE || COMPILE_TEST + depends on OF + select PINCTRL_STARFIVE_JHB100 + default ARCH_STARFIVE + help + Say yes here to support System-0 Host pin control on the StarFiv= e JHB100 SoC. + This also provides an interface to the GPIO pins not used by oth= er + peripherals supporting inputs, outputs, configuring pull-up/pull= -down + and interrupts on input changes. diff --git a/drivers/pinctrl/starfive/Makefile b/drivers/pinctrl/starfive/M= akefile index c0d368f413bc..b26156a6d0eb 100644 --- a/drivers/pinctrl/starfive/Makefile +++ b/drivers/pinctrl/starfive/Makefile @@ -8,3 +8,4 @@ obj-$(CONFIG_PINCTRL_STARFIVE_JH7110_AON) +=3D pinctrl-star= five-jh7110-aon.o =20 obj-$(CONFIG_PINCTRL_STARFIVE_JHB100) +=3D pinctrl-starfive-jhb100.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0) +=3D pinctrl-starfive-jhb100-sy= s0.o +obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0H) +=3D pinctrl-starfive-jhb100-s= ys0h.o diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-sys0h.c b/dri= vers/pinctrl/starfive/pinctrl-starfive-jhb100-sys0h.c new file mode 100644 index 000000000000..80dc35321a95 --- /dev/null +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-sys0h.c @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Pinctrl / GPIO driver for StarFive JHB100 SoC System-0 host domain + * + * Copyright (C) 2024 StarFive Technology Co., Ltd. + * Author: Alex Soo + * + */ + +#include +#include +#include + +#include "pinctrl-starfive-jhb100.h" + +static const struct jhb100_pin_layout_desc jhb100_sys0h_pl_desc[] =3D { + { .pin_start =3D 0, .pin_cnt =3D 7, .name =3D "gpio", .gpio_func_sel =3D = 0 }, + { .pin_start =3D 7, .pin_cnt =3D 1, .name =3D "espi0_reset", .gpio_func_s= el =3D 1 }, + { .pin_start =3D 8, .pin_cnt =3D 4, .name =3D "gpio", .gpio_func_sel =3D = 0 }, + { 0xff }, +}; + +static struct config_reg_layout_desc jhb100_sys0h_pinctrl_rl_desc[] =3D { + { + .pin_start =3D 0, + .pin_cnt =3D 12, + .drive_strength_2bit =3D { .shift =3D 0, .width =3D 2 }, + .input_enable =3D { .shift =3D 2, .width =3D 1 }, + .pull_down =3D { .shift =3D 3, .width =3D 1 }, + .pull_up =3D { .shift =3D 4, .width =3D 1 }, + .slew_rate =3D { .shift =3D 5, .width =3D 1 }, + .schmitt_trigger_select =3D { .shift =3D 6, .width =3D 1 }, + .reserved =3D { .shift =3D 7, .width =3D 8 }, + .debounce_width =3D { .shift =3D 15, .width =3D 17 }, + }, + { 0xff }, +}; + +struct starfive_pinctrl_regs jhb100_sys0h_pinctrl_regs =3D { + .func_sel =3D { .reg =3D 0x40, .width_per_pin =3D 2 }, + .config =3D 0x04, + .output =3D 0x34, + .output_en =3D 0x38, + .gpio_status =3D 0x3c, + .irq_en =3D 0x44, + .irq_status =3D 0x48, + .irq_clr =3D 0x4c, + .irq_trigger =3D 0x50, + .irq_level =3D 0x54, + .irq_both_edge =3D 0x58, + .irq_edge =3D 0x5c, +}; + +static const struct jhb100_pinctrl_func_maps jhb100_func_maps_sys0h[] =3D { + { .func =3D "espi", .val =3D 1 }, + { .func =3D "espi_reset", .val =3D 0 }, + { .func =3D "espi0_vw", .val =3D 1 }, + { .func =3D "espi1_vw", .val =3D 2 }, + { .func =3D "gpio", .val =3D 0, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_SYS0H_GPIO_A10) }, + { .func =3D "gpio", .val =3D 1, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_SYS0H_GPIO_A11) }, + { .func =3D "gpio", .val =3D 0, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_SYS0H_GPIO_A15) }, + { .func =3D "scap_trigger", .val =3D 3 }, +}; + +static struct jhb100_pinctrl_domain_info jhb100_sys0h_pinctrl_info =3D { + .name =3D "jhb100-sys0h", + .pl_desc =3D jhb100_sys0h_pl_desc, + .crl_desc =3D jhb100_sys0h_pinctrl_rl_desc, + .regs =3D &jhb100_sys0h_pinctrl_regs, + .fmaps =3D jhb100_func_maps_sys0h, + .num_maps =3D ARRAY_SIZE(jhb100_func_maps_sys0h), +}; + +static const struct of_device_id jhb100_sys0h_pinctrl_of_match[] =3D { + { + .compatible =3D "starfive,jhb100-sys0h-pinctrl", + .data =3D &jhb100_sys0h_pinctrl_info, + }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, jhb100_sys0h_pinctrl_of_match); + +static struct platform_driver jhb100_sys0h_pinctrl_driver =3D { + .probe =3D jhb100_pinctrl_probe, + .driver =3D { + .name =3D "starfive-jhb100-sys0h-pinctrl", + .of_match_table =3D jhb100_sys0h_pinctrl_of_match, + }, +}; +module_platform_driver(jhb100_sys0h_pinctrl_driver); + +MODULE_DESCRIPTION("Pinctrl driver for StarFive JHB100 SoC System-0 host d= omain"); +MODULE_AUTHOR("Alex Soo "); +MODULE_LICENSE("GPL"); --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2097.outbound.protection.partner.outlook.cn [139.219.17.97]) (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 8937F3F5BD1; Wed, 3 Jun 2026 05:55:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.97 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466123; cv=fail; b=VBn9awYBT2tiXxuPve5Ba+Wq6RDDMri1k0FbZWMfCNdfutMw6Z9Wdotxc7hbxd4PbnwzaMz8CBxWaVNBvs8cm8J+fbLI/FMl+GWz2r7myV2KpSf2tBre4C4OziiVxopVL5GJhM2jXodek4xHzHN8Is6wYFsEOvVfmBKFFzfbbvk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466123; c=relaxed/simple; bh=WcaeBVZ+anQdNVRJvzRgJY0Mos+n656WVnBU0YbKTEY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=J+Mu6DKAtbrThIG5rGPiRbDjXN/jvIqX58keksAPODikB0Vmk2rxWDLacGtqLJr7E8mQ1ZqmPjSmFGb3KvuKRTtuBHMukYBu52T4Y2yDyfEYk++zjgotuin4CVZMWycWCOvl4wWfR7YLkK3pfqOhXb4usyypLekcmSXdI/eRx8k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ap18XXOlBcNwLRgFBRmlaV31K8xGXb6yPPyXHuDvTi7C9XRCMf/FOOKWwJaMzKNtyclWWvF/eUvk5ZrQsFjQbF28YDSRTMef0+zecxpRLgMnhGBo5Qtb+NaHw02QvdYt0hDIZz8L6YJf8w0AIaFXW2Zef18r88QJUG/4/FsMDzb/Vh+6+YUrfGaDXGnkZlrY3FFRlz7zlDGSfkyKqTL44cDSrKU37VdqWV6OTQ348B7R/HFaW/0q8qMIzljkt3xZoL7PYldbDE2MDm/06fbZ0dHIrd/sflluQSDuZm2nBQoomXwIfrcvcX6qNAe35piJxTvmIT9VpRQyn6fAxCVbeg== 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=P5Vz/tqPBf7eBDlhCEzjV9yQK6baBKgeG2863hMfo14=; b=P/IsSnyWnWCXGMBnw2vpL7LIz0Qb+TYthGzb9hKQvV0+0HSXtmf3eJLn+lL5FYGaeeew8tcEezX65uNyfPFY4S8R02zpAtNlZlfc15X9hEcndVqTly+OuKSaeYsCaJ9pr47t67+yngShSO9y9fPxORPzbdzuB+iQdC5+UYhcU46Ua7+xLkI4YJ5yXPoEZQ6xuWUbLe4C33Lm1Ucn9yRW8IQc7O5Ob/ObelgkEWCjYlC0muLd9pwB8jcl3pIHzkKAKT7M0Pb9xGVXIFHm+ShoKrQhiI0571kKmLk5dYzxVvkCs/gV1LjOMViMB4DCSKCGkDgZYSbLGlr2CQfqp0xhvg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:09 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:09 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 07/21] dt-bindings: pinctrl: Add starfive,jhb100-sys1-pinctrl Date: Tue, 2 Jun 2026 22:53:33 -0700 Message-Id: <20260603055347.66845-8-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: 9c23c643-1bac-40e8-3546-08dec13487b8 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: kQ2ri6br/3h/K8+MoP7DksCM7QXNE9QNXQ/A4NVCU7egDKhy1GdvHWvRgQj52nMBUE7C6uIZaguPjeXE0zy5vfVdp9aRqtO2Fb5C8rMA5DhnrVFAvF36MMyZ/AH2B8pgcLlAB6mA4i9oMZUTL88SvSVOfvGkaIo2ibGj26hn5gZazcymGq/bvGQ4R40V3rCrjwwwaTklneuVKo6dEhxIMV6MrrOpXMSH94JXe+PVx5u2HAZBfuqwiGtEYXOrAipZfsPAMmo+34uBApPV0DyVHAkKmzuS5bMMciumL9q7hX65RHXdSVTiPkn7s/jJAevjvlKG9JmhJowUGpxeG/ulDktGg2LTjXx0u+2z/dAifMDSraKTa+UD1gwvQqiT2I5IEuUDdg5pN5AH5FT79Ppbyr1KgvqUSr17gHx6ks+6e5PWuTKjjMQOlChiZLXi2qeNbvyEmW54jcUW6Uv+uguF2tw9UpG6MJpzP5V+qzI+HfnmFmoU8ujVGXXlb55WbuXjJBuwifz9H7cbjLhBHhAUamEbBnZpLEsOyaQISwbI7Mwvtk9QlWUBPjh2eq2hwPpWgubgjiA5Ucb/u36KT/avBg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9Ue4k4guNG8dEb85fEE7gO0S6uV49kkaIYB67ZzlrLeaiuM0X/5oZtZVjWrY?= =?us-ascii?Q?Lc90eaqmBjfrbtycIpJ9WPHSJKlOuyolrJLk4HXyhfjLxnYYuHH+OhHjFj1p?= =?us-ascii?Q?C02+QFcpi5fzq3salw5pr0VMkWm+alorP3+kZV7FisDbA5QIAFc3Yl3kwDec?= =?us-ascii?Q?uvPh/fq/14KOWr/Ksn9QYAZ/CnnV8zahHLaZ8ZvwsyXsLOzYldsXCnOl78AS?= =?us-ascii?Q?Hp5mEnDLONfunf+74ACWpawI79duI8iJyAU4AAjG+mgGCLcsC40qJyybiMsm?= =?us-ascii?Q?UZJep20K5UPFgA6XJ0rhhaQ39NlP0PtyA4dkaN3Vn3KSve4ExzNbs+ypoJCx?= =?us-ascii?Q?mwxrDpB7+ft6CQ/FvbngVrbQR9Qa2cXjdq0lZTnJqcFzqWmQd1KkwAbS2wNh?= =?us-ascii?Q?2R6YBjFRed0qI1Ml6nsfL8iSV4165EmWlLvcVkinCk3roUXym3eulGSxYzhe?= =?us-ascii?Q?jRR+wkCF6WYbIyW+02XoZLSWpAlGM+xh5RcDBwBxGInSdKcO9xzmmJZrcVBO?= =?us-ascii?Q?CBatGY8/tmC3hXwvEeaDPJF900gKnG7G2qMeeWUfl+FZFqZeoCqH78m04MZJ?= =?us-ascii?Q?dpOzKN4JnFTOFAFwiA8d660X0o2YCt5WUfZuUZiu3/YlJkFG05bqZBDk49xs?= =?us-ascii?Q?9L9CWUvttzznFmOvHB+P4HZ6AT5dvGO27LSeCk1Rbt6ilmgEjPTXGWmjC79O?= =?us-ascii?Q?YCrFRk5fRdp1gJXby3Hq6gF5L9G58/gruab+kVGU0ek/8z14coLQzDrDp2ql?= =?us-ascii?Q?uuk7HnYGC0u8Z8lZI5z43hJhI4n2idD8mQINRk+puogoPHm/2YFZ9cXqNNYo?= =?us-ascii?Q?ayl2E02ox3PJbzunb4T79CxCeMY0YzfvayPhveFM8AvWDJtLBXNCY3Tw5Gqe?= =?us-ascii?Q?qAzdUY0AcQIgZike4Ac6QQfLCJnAg3NbR+0bfaVobk3jixad4697nv4iOv0P?= =?us-ascii?Q?M2YbRcyni3Qd9hPcUmJ6ZxQmlphurvYbeVQ7MpoYbeHaE6+E8lYfcaHKP00A?= =?us-ascii?Q?Vf4qXO1gHznzwDMkhN1DNktXAE16pFnY9cdBOo3N6W5uYaTMYwdTpvRKNhS2?= =?us-ascii?Q?LvJ5KF1Y8mThgjvynd/lty9lr2tjUl4jSNJ4E1YHhs2qzhvCkeMihYVqj/pR?= =?us-ascii?Q?b8D0QR6DWl+HwJm815Hx1d8UteYv+QwKaZYg9OCXozMRE+4PlFlCbuypcMum?= =?us-ascii?Q?pDmuQK37RAW2xp2WuM4M2WwafkIkR6FzLqz5dIKuM5I66VPytEtv+4WT3uiV?= =?us-ascii?Q?sjpwCIJm2lH1YFzcUNgivnPqfNwqszUUxjoTFnk9S2D/llAjFi1aol8NJ+iu?= =?us-ascii?Q?bKNpe1lfzsKtmPHwYqThafgPBdmlZ/aOFZyD6/zbH3MDpw4W6WDfYfTT/rEM?= =?us-ascii?Q?b6dE7vjfwElZgejYmJO/j8U3bvUtNvKuKWGPeZqmwrRC8MGT/Pz+N5t9mc9U?= =?us-ascii?Q?MUwhEwtYaVSLRv0vOGd28SKS/pTVvh3a1JZnkXuDsrLQ1FmgVTMaVWA+qkQ4?= =?us-ascii?Q?ed4mw2bzOcxjXJH4kM/eAA8bcfV6xseTzeAIkOCO0GYcLlN/2uZW2GBYZLRY?= =?us-ascii?Q?rQwyfFdGTxxXHGuCkzqS3QdNNIZdpYSPQ02Wzy+uM9g3omeMgrIQe3f9bwxe?= =?us-ascii?Q?2o5m8EXAvuB0ijYu++mW2WkfQjlbhOV8PGeXhJFKI9RMHyVGmGfVmJJgglFu?= =?us-ascii?Q?Ln0A7QKAe+lwz1128rpbKZZ9e+FI2y256mqOVynzp5rmGrqeP9T+Ls8Zm8G2?= =?us-ascii?Q?E0VIDLv4oscUXxm+HnRQrFRFShpskjx8iFG3kg139ma1TBppuYW2?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9c23c643-1bac-40e8-3546-08dec13487b8 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:09.3534 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SLzJor+PhP6zDIBjf9Yk4BMMKN8NGk9kL0Di8Mu1LCGzMx6JTJQzk/F+BYBAucWBEq+ZTc9x8Bt2TLxK8t5JNFVT4DBmfn840B5rhg/7gl7MdP4HOIVWQ+BGMES7u/Kg X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl bindings for StarFive JHB100 SoC System-1(sys1) pinctrl controller. Signed-off-by: Changhuang Liang --- .../pinctrl/starfive,jhb100-sys1-pinctrl.yaml | 161 ++++++++++++++++++ .../pinctrl/starfive,jhb100-pinctrl.h | 10 ++ 2 files changed, 171 insertions(+) create mode 100644 Documentation/devicetree/bindings/pinctrl/starfive,jhb1= 00-sys1-pinctrl.yaml diff --git a/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-sys1= -pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-s= ys1-pinctrl.yaml new file mode 100644 index 000000000000..54e7f4b795bc --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-sys1-pinctr= l.yaml @@ -0,0 +1,161 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/starfive,jhb100-sys1-pinctrl.ya= ml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: StarFive JHB100 System-1 Pin Controller + +description: | + Pinctrl bindings for JHB100 RISC-V SoC from StarFive Technology Ltd. + + The JHB100 SoC has 13 pinctrl domains - sys0, sys0h, sys1, sys2, per0, p= er1, + per2, per2pok, per3, adc0, adc1, emmc, and vga. + This document provides an overview of the "sys1" pinctrl domain. + + The "sys1" domain has a pin controller which provides + - function selection for GPIO pads. + - GPIO pad configuration. + - GPIO interrupt handling. + + In the SYS1 Pin Controller, there are 8 multi-function GPIO_PADs. Each of + them can be multiplexed to different hardware blocks through function + selection. Each iopad has a maximum of up to 4 functions - 0, 1, 2, and = 3. + Function 0 is the default function which is generally the GPIO function + (or occasionally, it can be a peripheral signal). + Function 1, 2, and 3 are the alternate functions or peripheral signals t= hat + can be routed to the iopad. The function selection can be carried out by + writing the function number to the iopad function select register. + + Each iopad is configurable with parameters such as input-enable, internal + pull-up/pull-down bias, drive strength, schmitt trigger, slew rate, input + debounce nanoseconds. + +maintainers: + - Changhuang Liang + +properties: + compatible: + items: + - const: starfive,jhb100-sys1-pinctrl + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + resets: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-controller: true + + '#interrupt-cells': + const: 3 + + gpio-controller: true + + '#gpio-cells': + const: 3 + + gpio-ranges: true + + gpio-line-names: true + +patternProperties: + '-grp$': + type: object + additionalProperties: false + patternProperties: + '-pins$': + type: object + description: | + A pinctrl node should contain at least one subnode representing = the + pinctrl groups available in the domain. Each subnode will list t= he + pins it needs, and how they should be configured, with regard to + function selection, bias, input enable/disable, input schmitt + trigger enable/disable, slew-rate, input debounce nanoseconds + and drive-strength. + allOf: + - $ref: /schemas/pinctrl/pincfg-node.yaml + - $ref: /schemas/pinctrl/pinmux-node.yaml + additionalProperties: false + + properties: + pins: + description: + The list of IOs that properties in the pincfg node apply to. + + function: + description: + A string containing the name of the function to mux for these + pins. + enum: [ espi, espi_reset, gpio, host0_port80, host1_port80 ] + + bias-disable: true + + bias-pull-down: + type: boolean + + bias-pull-up: + type: boolean + + drive-strength: + enum: [ 2, 4, 8, 12 ] + + drive-strength-microamp: + enum: [ 2000, 4000, 8000, 12000 ] + + input-debounce-ns: + minimum: 0 + maximum: 4294967295 + + input-disable: true + + input-enable: true + + input-schmitt-enable: true + + input-schmitt-disable: true + + slew-rate: + enum: [ 0, 1 ] + default: 0 + description: | + 0: slow (half frequency) + 1: fast + +required: + - compatible + - reg + - resets + - interrupts + - interrupt-controller + - '#interrupt-cells' + - gpio-controller + - '#gpio-cells' + - gpio-ranges + +additionalProperties: false + +examples: + - | + soc { + #address-cells =3D <2>; + #size-cells =3D <2>; + + pinctrl_sys1: pinctrl@13081000 { + compatible =3D "starfive,jhb100-sys1-pinctrl"; + reg =3D <0x0 0x13081000 0x0 0x1000>; + resets =3D <&sys1crg 2>; + interrupts =3D <58>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_sys1 0 0 0 8>; + }; + }; diff --git a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h b/includ= e/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h index 38d5a94e92e3..30704a5a3418 100644 --- a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h +++ b/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h @@ -28,4 +28,14 @@ #define PADNUM_SYS0H_GPIO_A14 10 #define PADNUM_SYS0H_GPIO_A15 11 =20 +/* sys1 pad numbers */ +#define PADNUM_SYS1_GPIO_A16 0 +#define PADNUM_SYS1_GPIO_A17 1 +#define PADNUM_SYS1_GPIO_A18 2 +#define PADNUM_SYS1_GPIO_A19 3 +#define PADNUM_SYS1_GPIO_A20 4 +#define PADNUM_SYS1_GPIO_A21 5 +#define PADNUM_SYS1_GPIO_A22 6 +#define PADNUM_SYS1_GPIO_A23 7 + #endif --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-SH0-obe.outbound.protection.partner.outlook.cn (mail-sh0chn02on2104.outbound.protection.partner.outlook.cn [139.219.146.104]) (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 332AC3DBD7E; Wed, 3 Jun 2026 05:54:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.146.104 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466059; cv=fail; b=WcSJcTKGc7VVxfD8HKL26RlWtfe/cjW7/xz606y/5UiDJ8JHOOaWtvCoisoYiOOuoA0oSXHdC4cRUOPM0Imcy0zOd1gelD36U/srsI7KHG5aUfPvI2CMny9sEwR5NcD5AOizguO0ttWhde6Nl2z/edpbJtmLq8UMqbwI2x7osTQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466059; c=relaxed/simple; bh=F4vbJY2+YJoKdPGbx1nMzDrjyICIBLzk32IR3peYn5w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=LKQCQPdgMniFk6Yn13ecarqABzGNJjPDfGjvnDJJHVKYvtkmfnWZuFIqasqliF0CJ8QaKEL6mUfkXcM+g4R1eztV7fjTPUDCTEL/H5x9uW+bHcIC7FBjiUWDWcOwMh6/bi3btqX9RyJBmFWnsrxqMaW4iG0VAGmxk8QiVbKK3us= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.146.104 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iq0qoeipr7VomSEAhlX7TQSuR3emBoL6iVG78s/skV4Tqc29d1oiQgLbNsDmTN8VRGmej0RC+aBoOGvx8+XmJS4Xu5lf6LWnjvoh+DtsAEO4wMtsP9chgDA07CXaET8Y9+wRFu9L7aAWmY10oM3F6BMZ75jqK68JPqQncSRuxf1dNXsxJpPCBkf8Jiry4mTLYBE4LWJSq99xVxj6TZGSKk+HKY7gkF7/6UFWrBN6NMNBw9glFl9J402WJT415JeZKhFM/z1/WNIodEZNP/lIz3CFgNn5w0/+1dDfUk2KLtpFLJyNuKlxGkTYEgrxUFBoqmuTm7klqUbjt1WNj7T7hw== 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=TaiK0NzSTsBPYbh5UO1oKYlNcqAfuenMhYOrL1wMAWQ=; b=U5GijybmLYYF68KXqX3HATXtMXIaW/IzDPypYzh4xjyBz8Kf0jS24UlpnR/7ipfiMmEEbDffpIZ77+MuAQ9kK3Tj+BayWRlh12B6TkTGDflrc5ZAvrV+LCeXcQMLJFq5Fs5Kfp5MeTYJVOe0fAotcU2mvRcmr5B1VwnaDD9jKZadbZnVk5pUmaGtpTlCPx0XXaPxnzjxhYOqFG4bfWYqsQyS5BkwiJV7DN02uDGDEOJluVAJacB7AyYd/NilqCHBI9n6QUtRuGJKgjXORUh9uJ6AYuzpHhryGWCODm3KuK3tfwIyLRuHQCPAYPEAWTpVwpOD8qHOGtjZdWaZ+mVwoA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1171.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:15::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:10 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:10 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 08/21] pinctrl: starfive: Add StarFive JHB100 sys1 controller driver Date: Tue, 2 Jun 2026 22:53:34 -0700 Message-Id: <20260603055347.66845-9-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1171:EE_ X-MS-Office365-Filtering-Correlation-Id: 50873460-0aba-42cb-cf48-08dec134887e X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|52116014|7416014|1800799024|366016|56012099006|5023799004|6133799003|18002099003|22082099003|3023799007|921020|38350700014; X-Microsoft-Antispam-Message-Info: fkXmnIr34mx4IFaG9oR/FKjBFHbx7F0X/vx1H0rga58pFnt0fhT2nb/cMB5gzrcBzRPd8iFIIBgscEhaxHnt8zQMOsy7xES5s18xNxQDybgdRaOP36WSHlQqK87DzqMj6PnQMRFdpZ9fWx1Eckvy1W6PmSxoBtFYbaJxB5XSabuD8jDms7Mr3PPEQ9g2eWbYkWq5/c8OuKRWbIB5qjHv1kQwJVs0hLO/Ww1/ljKSGl1UC+fGUVLtxnTzenoqgZM2LeCtBuAEPPhrC3C0nxDp+YLqRMtS+5abwFKpAg8QjX0OOjP0a+yO7WpD+UkEDoFwdUfltcWE0gHkobgbGe4k1z35ubU8+TkcnO6CWff4VmtR4pTAJlDLYUlhvRCMDe0C5V1bIQOWhskCfu+e1gCxV03HVIZrC2EhvUyTAEkWoyrdbKX/6yFwOzN9xwBLKi/8Texqhv6Lke3fuiQ2RmbbYJBP7adqcdRYL+NOcTOGfMVV1MxPzZy2y9098v7x9JJcY9odPHQZ6F8dAppM+FQSM5kd1pqh8j2KgkqzgQ+NdTloWOwqe9/v0u71tmu7b0omYwNACMTw2YipaqrEPAxzvQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(1800799024)(366016)(56012099006)(5023799004)(6133799003)(18002099003)(22082099003)(3023799007)(921020)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?0Cds0Yu7yzlPqsBmXto8dtLe7Bk5xzqqRveLGbUzMne+rSpXdsLR3REoSjxO?= =?us-ascii?Q?87uRshL4Y8UQq2GeS2aIvlaea3TJEKucFcKJBLoydm7cHJUXnX4ERK4+4nkf?= =?us-ascii?Q?wkOWYkfRRVs3jGjDyD5X29fdYeUduYYEDvbYyZp7ddL7RWJnnGkHhtB9LSjq?= =?us-ascii?Q?8TwIVEavCSsurOHqYKHJbUZZksDiBKmNP3sOMy7nO1X5NkfLuJMAYQwmz5r2?= =?us-ascii?Q?Gm3azUOd4bfmoJpRbvjfBTSOMs6sdusA1xxg9p007ZMmMCmr3BfsDwkf3jw9?= =?us-ascii?Q?/zB7B+cW8w2HZ70o6Pyy4zu/o2TYQiGPjkQJ3upI+4hF3xT/P7+UA14W5Byw?= =?us-ascii?Q?USr6HN8yqUR6IC7sFLoYffA8V73ZNaAcE50OjzwSKVjGSOVjNtFcwJitMt3o?= =?us-ascii?Q?ZyOqaEtrV2Z8zRhB1DiCgp9DGTPFba7ZQKjf+7A9sRpadHYhLLYv9HuhYEXY?= =?us-ascii?Q?BhuKY1w7id8SEcXbFu5bMRBSj9iiF8cz+fLg+sKvUP06uoZw5fuQc+5XcsMr?= =?us-ascii?Q?+IwYPPWorMqsecCU7+cRanjdG7nNUIQmdzeQAxZsmQP2wOhWix9/5vsrXy4q?= =?us-ascii?Q?zlFCBVBLRw5zkfV1oZgVKytpLluMS1Y4lta1nE0gPFUtyhUr9gUKzQUg1tX4?= =?us-ascii?Q?6JrRg21WrgM/WKbTZ+OBxgPxDuem466xl9gRfHe66XAuuHST6u1PPTLJOwcc?= =?us-ascii?Q?uMI6eXtcgYPhqVmBSTofGoAXTb8OcdeHCl613dJ/p/wLi6dXMnx8TlzHRi/0?= =?us-ascii?Q?CXkQtb3welRTzN159HyvRtEcL4KnbqxyNhl8Dz1TLaGaKyLTzTZ8ijFV4gLh?= =?us-ascii?Q?tFNUKWvLKoqEdQgmcHbYCEy8QqBsGK+VpE6EUkkGqw9IRsH/YDZ9gBdi3wqU?= =?us-ascii?Q?UBBL0+hgUk4maqYmzq5zC3g89hAsxX0JLxDy9KOPhOrXQFSZFox5TBOZlMej?= =?us-ascii?Q?LNwZm5i0doKFpmZTGiatcofbMgKOGVLwcn7QcMHVShbIzO5K2RySLOPpCNDF?= =?us-ascii?Q?GSkB5TxofP92RaPjxKnzt9cvTtc/fCWEgL79PskawhdfE7AC/z46smJI4gEc?= =?us-ascii?Q?PNDKFL9i6KmyBX/9BR2nIscubC2RXQoVwtohinEy6MBczAfTA4ezBMcXmsW3?= =?us-ascii?Q?KB8p+HdCsKqfefGkJoYU0gsda4MLTSuvZmfn7fEifpF7xlljngz9LnKEuB96?= =?us-ascii?Q?rIp8U0g7AwK/iToR9nodTOVUkbwbhxwvIP4CgPHGw5qMPROijIJrkCccxESa?= =?us-ascii?Q?kSQeQnUJ+RKJf3tHfoQZVRmY780x3yr4ij4cruWsgFkAGRtGuA/NIgff/Kd5?= =?us-ascii?Q?Fd5WGx06vHEIUjP7AP0+zJWt3B3oIT8x9CrKI+U+6j4aIDYTIWq/7rn6icjw?= =?us-ascii?Q?0/MlCLMToGoGMDWdAi6Z+NEE/suPDx4IMFHQWrTV1po9EgIVV2W6xDVhPMkJ?= =?us-ascii?Q?umcxfwEMeXje3qkbFzJbRBqLjPxzTaqh6UGrRYrLPxK0vNsSMgXVF1IiGf2M?= =?us-ascii?Q?QdKz1aA2IjPH+2UabloGapGQRnQzazj+KO0ud3wxdtRIIT+GnixPuSrJXo1Z?= =?us-ascii?Q?3ew3qMy3ZbHTuDPOCRG9J9NXuWekgMr+mXBQoTckhZjURuvKw/1EmLiHTqzS?= =?us-ascii?Q?yA2sBuu0rNVgdpJsinyc80pZ9+PbT2m2gc7y/dw2i6x4Rep9pFADTt5q8B3t?= =?us-ascii?Q?uRgjm5P8TQIds/G+DYeKCq6iuxdgdIJGcQTqXfJQ9Nvq+OegBLnizgT0Iypc?= =?us-ascii?Q?3WAdebNM8RMZGE9octG+cPJsbVMUR60Z5aZOuodGmRvJ6y8lYfpo?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 50873460-0aba-42cb-cf48-08dec134887e X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:10.6595 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iu5G3DNbfVCIrcZwA8uZl0hK0b7eK2mpkH66+7fNiGQf8VAtyTMwQj0+G8iDaf2gNyMGUhhzL/pQ/QyaEXwPR/4Ieg2MUx4lyi5z3s/RFHcRlPLhwazgXzsWkws3j3e9 X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1171 Content-Type: text/plain; charset="utf-8" Add pinctrl driver for StarFive JHB100 SoC System-1(sys1) pinctrl controller. Co-developed-by: Lianfeng Ouyang Signed-off-by: Lianfeng Ouyang Signed-off-by: Changhuang Liang --- drivers/pinctrl/starfive/Kconfig | 12 +++ drivers/pinctrl/starfive/Makefile | 1 + .../starfive/pinctrl-starfive-jhb100-sys1.c | 93 +++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 drivers/pinctrl/starfive/pinctrl-starfive-jhb100-sys1.c diff --git a/drivers/pinctrl/starfive/Kconfig b/drivers/pinctrl/starfive/Kc= onfig index 1c87f64830ed..882d621eaf57 100644 --- a/drivers/pinctrl/starfive/Kconfig +++ b/drivers/pinctrl/starfive/Kconfig @@ -78,3 +78,15 @@ config PINCTRL_STARFIVE_JHB100_SYS0H This also provides an interface to the GPIO pins not used by oth= er peripherals supporting inputs, outputs, configuring pull-up/pull= -down and interrupts on input changes. + +config PINCTRL_STARFIVE_JHB100_SYS1 + tristate "StarFive JHB100 SoC System-1 pinctrl and GPIO driver" + depends on ARCH_STARFIVE || COMPILE_TEST + depends on OF + select PINCTRL_STARFIVE_JHB100 + default ARCH_STARFIVE + help + Say yes here to support System-1 pin control on the StarFive JHB100 SoC. + This also provides an interface to the GPIO pins not used by other + peripherals supporting inputs, outputs, configuring pull-up/pull-down + and interrupts on input changes. diff --git a/drivers/pinctrl/starfive/Makefile b/drivers/pinctrl/starfive/M= akefile index b26156a6d0eb..8d96cf80d377 100644 --- a/drivers/pinctrl/starfive/Makefile +++ b/drivers/pinctrl/starfive/Makefile @@ -9,3 +9,4 @@ obj-$(CONFIG_PINCTRL_STARFIVE_JH7110_AON) +=3D pinctrl-star= five-jh7110-aon.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100) +=3D pinctrl-starfive-jhb100.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0) +=3D pinctrl-starfive-jhb100-sy= s0.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0H) +=3D pinctrl-starfive-jhb100-s= ys0h.o +obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS1) +=3D pinctrl-starfive-jhb100-sy= s1.o diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-sys1.c b/driv= ers/pinctrl/starfive/pinctrl-starfive-jhb100-sys1.c new file mode 100644 index 000000000000..84ca7b33a5a4 --- /dev/null +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-sys1.c @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Pinctrl / GPIO driver for StarFive JHB100 SoC System-1 domain + * + * Copyright (C) 2024 StarFive Technology Co., Ltd. + * Author: Alex Soo + * + */ + +#include +#include +#include + +#include "pinctrl-starfive-jhb100.h" + +static const struct jhb100_pin_layout_desc jhb100_sys1_pl_desc[] =3D { + { .pin_start =3D 0, .pin_cnt =3D 7, .name =3D "gpio", .gpio_func_sel =3D = 0 }, + { .pin_start =3D 7, .pin_cnt =3D 1, .name =3D "espi1_reset", .gpio_func_s= el =3D 1 }, + { 0xff }, +}; + +static struct config_reg_layout_desc jhb100_sys1_pinctrl_rl_desc[] =3D { + { + .pin_start =3D 0, + .pin_cnt =3D 8, + .drive_strength_2bit =3D { .shift =3D 0, .width =3D 2 }, + .input_enable =3D { .shift =3D 2, .width =3D 1 }, + .pull_down =3D { .shift =3D 3, .width =3D 1 }, + .pull_up =3D { .shift =3D 4, .width =3D 1 }, + .slew_rate =3D { .shift =3D 5, .width =3D 1 }, + .schmitt_trigger_select =3D { .shift =3D 6, .width =3D 1 }, + .reserved =3D { .shift =3D 7, .width =3D 8 }, + .debounce_width =3D { .shift =3D 15, .width =3D 17 }, + }, + { 0xff }, +}; + +struct starfive_pinctrl_regs jhb100_sys1_pinctrl_regs =3D { + .func_sel =3D { .reg =3D 0x30, .width_per_pin =3D 2 }, + .config =3D 0x04, + .output =3D 0x24, + .output_en =3D 0x28, + .gpio_status =3D 0x2c, + .irq_en =3D 0x34, + .irq_status =3D 0x38, + .irq_clr =3D 0x3c, + .irq_trigger =3D 0x40, + .irq_level =3D 0x44, + .irq_both_edge =3D 0x48, + .irq_edge =3D 0x4c, +}; + +static const struct jhb100_pinctrl_func_maps jhb100_func_maps_sys1[] =3D { + { .func =3D "espi", .val =3D 1 }, + { .func =3D "espi_reset", .val =3D 0 }, + { .func =3D "gpio", .val =3D 0, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_SYS1_GPIO_A22) }, + { .func =3D "gpio", .val =3D 1, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_SYS1_GPIO_A23) }, + { .func =3D "host0_port80", .val =3D 2 }, + { .func =3D "host1_port80", .val =3D 3 }, +}; + +static const struct jhb100_pinctrl_domain_info jhb100_sys1_pinctrl_info = =3D { + .name =3D "jhb100-sys1", + .pl_desc =3D jhb100_sys1_pl_desc, + .crl_desc =3D jhb100_sys1_pinctrl_rl_desc, + .regs =3D &jhb100_sys1_pinctrl_regs, + .fmaps =3D jhb100_func_maps_sys1, + .num_maps =3D ARRAY_SIZE(jhb100_func_maps_sys1), +}; + +static const struct of_device_id jhb100_sys1_pinctrl_of_match[] =3D { + { + .compatible =3D "starfive,jhb100-sys1-pinctrl", + .data =3D &jhb100_sys1_pinctrl_info, + }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, jhb100_sys1_pinctrl_of_match); + +static struct platform_driver jhb100_sys1_pinctrl_driver =3D { + .probe =3D jhb100_pinctrl_probe, + .driver =3D { + .name =3D "starfive-jhb100-sys1-pinctrl", + .of_match_table =3D jhb100_sys1_pinctrl_of_match, + }, +}; +module_platform_driver(jhb100_sys1_pinctrl_driver); + +MODULE_DESCRIPTION("Pinctrl driver for StarFive JHB100 SoC System-1 domain= "); +MODULE_AUTHOR("Alex Soo "); +MODULE_LICENSE("GPL"); --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2132.outbound.protection.partner.outlook.cn [139.219.17.132]) (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 E0E76380FC5; Wed, 3 Jun 2026 05:55:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.132 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466120; cv=fail; b=a4iGUqMVuymQDh8SPY6oZycUEiNVZOl2xdPLOwUnOzjvA8e/jxdz/v+xD9wlWJVHSfT07eSgDPTGjYVuKmSFP4qN3X+pXoBYJ8tWb/yrRg6klbqqr6BdSzL1dJstCIOCyTieIughVrnV3I5RfOHeNFuGwlBxqThfUBDa/VIwB4g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466120; c=relaxed/simple; bh=UcbNpd0ufCQTOOZevm/DgMaGiURh/LdXFe6zgMnPKjU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=cZe9LHzFVsvrZbavMvzuG4ROc0LOrgBmWkcnQTabzGNGdNWpRBHsYuPtXbhA64CcGpfNywH+tw6GBnqAcXLDgQNzhPdmNdbY5r6rHHhDbk6FhuwxryQ6FB2qlVr1U1EOScPfDdgt+z1QcEzJq2qN75mWBzb0WKxcrEgYIk0OOFo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.132 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OQJ6VyjEirlWjP0YAZkq6k0ALEJJBQEk53QLEP91XwYoGrFBE+lgtLx6/oUeIDzDHSc32lT508F2xmu8agr3b9M7WOXdHAzrJdc4TOvXMl7m6dyIFvKPzq0nOYZJwWQFMLLBagc/1EwTYAaDc/Ks5SzsxVtLIfWfoQMEy8u4w0Ru6HeiWYcLjA96TyzV+748J/B6yUs1x7eHx1cg/ycow0OG1/ObpV8qtrqhJ6mwKyUbW3fu+fgSzGyJo4QHQRDGN9sFgGoR0HmciiJWYmgkFFBEKzciQiqCogFuENt6wvlTjnr3MCqc3JHJ5dR9kDIeaDwXJUePGHaeKkxNrJBFZw== 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=0cYHrF9pKJPZJL5rgWDQPJmpqhdHwBwLl49Vt01Ntug=; b=XFVyWkcj3cilm5SLaKfzuryb7o1qTJvUXigcfNclfVVjekdnXDxW/3OFXj+j0Q1EFj8vZyjXwMGm5ZfD9MvEgRE8fFSetF4zxKus4ATAVcdI7GdzFqC7YRhqJf7VA+B2iJJVleSE85iip1rAb39pEndKx8nSFDZtBS75EoiA32h+i/779Ap95XLZY7FtY3UAJ1rjeZk4KJrraErzPdG8kAlLVRXZ2OI9j8OlF4vBJNaVvOQBH/G5R+NPwzzk8wmSXxk/uNih97EOij439gMWonue8HvLIKQ8eeqVLTB7V0Z5ofrAkWhLRKZ+qgPIHu8W5uodpvXss1WEQybETEvkeQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:12 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:12 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 09/21] dt-bindings: pinctrl: Add starfive,jhb100-sys2-pinctrl Date: Tue, 2 Jun 2026 22:53:35 -0700 Message-Id: <20260603055347.66845-10-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: 45ecab0e-ce03-4ffe-92bf-08dec1348944 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: RyB0wflfhpcPo63hi4zOC6TgmRPusn6jAc7fayi8q6OQdEIkyUM2Nqz2w/GGiQ1KEQ7aB0HA2Ez03aix31Q0TZ8rH2ok1Lxu/919n4DlW3f6XzCucGsIDJPuuv6dP7VyfmofOH2ELqXZU+jAjGFFj8+UIfkAvxhUI2h8QXk9uAtTYcCJeLA8OXwUb2Utk8UjYykvvutvhQKNb/GNZw/85PPsL2jGDrkRHHftnSyjpKX2K15UBkggqzf3eQQFIAVGWCgbrzHm1jQVEOqSikbc+lBrZPoU1cDqoW6DSRss76PPECzYb3ewBve2dvKrX2km/2St27AD8FCbZtNK3pdeyIOtJYrcpt/l5556aV+GOV2zSlXoIbQn5nmPldrLWxWWdO+4ZqySRHmSy5VO05QRJr8Ik2vOUBXGM26cSHAx23epPXL4SKgd5+xKOB45V9SDbMbNxbGYQDid9OXfdu+yZ94MmEEiXKzuFiZzasONlNF8y8NAsg1afeZMrkpybPedK9OpeNqZL/guQxv85OdcKiUOmKzUHwakRI4O0CDpK1di1cpjDGyV7RMjeIz/3SGT8OrNlISK5ExrbRfM6QpGPA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zMTeXBcf8wop9Jl7w5SBBubQUCXGOp163czV9X4bNwJQECaXF6Ts1qFMlORE?= =?us-ascii?Q?nIoX9NVbCJt4Cdtt+xDwFStVUuOaL7qeJMDUAw3bQxf97d54C3838LM1M3Ch?= =?us-ascii?Q?jVi1In/TSgi6DuYy8A0wifaUzr3rfQZnHBWRLOVNmjcXhrP5ulN6guCg2XoI?= =?us-ascii?Q?ob4hLr0j5nTdMiwbCnFduWZgq4uEhKRZzWgHvGXHujNuMPPUzEdKdp63+FKl?= =?us-ascii?Q?tpQFJMwafWN+/kOTzIPDSvnKrn6+DZOBkBAxyMImq+phPAZserggIl+MpBTI?= =?us-ascii?Q?faYen+mqx6k115XDo3yh+ED3tQRR6/wtkJHsikshKIYx03lPhShqI12gnKYz?= =?us-ascii?Q?DkwXlcxfYKOapOykp2UqEUWZBRSB4K/n+VeGRnB1IqXAibCiZIHUt/PnsUqn?= =?us-ascii?Q?MriYij8ThFE2KRMs0cp0s/pXdQpKRmWw6qEDZ9bwoWYQDhYJ4IQk83PBzdEq?= =?us-ascii?Q?i/cB2ISU6Ho0cM6jvePerYmfTz9P67LxdzZjfPvYJLNmUx5dx+3je3HFQMPR?= =?us-ascii?Q?OwOvPP71dRv3+NmskQ1nssgrSk3gvjNSCMGk6k2AhkCwEqZj/YnMcME5iZTZ?= =?us-ascii?Q?Pn6IcVSTy1Vj2FzKUJy75mBKmE5Ymkc4BDEJJCDlZrvxcK8oWeMoSMZdnW63?= =?us-ascii?Q?K6VJgZI0UFM8hBSy4pRKJg5KIkG2iovV3agylrc+4UQYco7e1ZBr4z6vWKik?= =?us-ascii?Q?O2oZ0EJpjlaTZfsoeqBFIzqXZFm8zT/w1eanQ33Ghx0q2bwQjj+atczg01Ha?= =?us-ascii?Q?brBqfBmEclPZDykGNDc+AC03W3/IM5IWw7vOzjCsXxrY+wvEJn28hgssHOOq?= =?us-ascii?Q?sj12pFt+e7R0Vg/vE9ZUcPPMjW5aYzCj//6nEdsggYVwofDMloq6OVD1lLgW?= =?us-ascii?Q?k4wKCSscLveCskG/cO2h6us6Xb//GSyeCJnNOmYt4LkcsGvQ2SiU0s58eUNM?= =?us-ascii?Q?artrvJyhl6e9pJ05O13phJY0pHjyJkkmyh4iERZOmHNAzouTGIm7xclRjsHi?= =?us-ascii?Q?CVZZAcUBia3BuTO0B9Mkjwp8YLrOSAUbkOoXN7KfGMbqm7PsIKAFofHTXADy?= =?us-ascii?Q?GL7XIf6EKlBSmUhX09dOMW2aKAbianV5BWgMX9d+G9Wht7O3asE1scB4Hcym?= =?us-ascii?Q?ctDCqxqnl1xhepKhvr9UKIpZlER16RVUeyXKVcrLYXw41WCnShJp6yiurJ36?= =?us-ascii?Q?1CacnwOaxT90T6BHPL2JWPldeSvYG1062I9+OCFTJvUOl6fAu8PRdo/wt5Bz?= =?us-ascii?Q?BGt4Pq9VRUDVQCPjIAnjJEDgyqCzhbpbwY/ycep20TGv8gPlOPPPsjINeyEY?= =?us-ascii?Q?/cX0jGAzOg5muTxzvq9ONSHATs18bS5K5oOum6aQSJX2eNR69Ba4kIXfpjTZ?= =?us-ascii?Q?zv4F8gSbWPGNb8m5746XINDZyFDotaRAdJsWq8djlLg56vEyy82rpzfNLy59?= =?us-ascii?Q?54JsAkJrnYhzvl/Oy9dQLM1R+J4UB2bPl6cElL5X7nmUSTWORoP1U57/CSJS?= =?us-ascii?Q?RDpYuhuIVy0RTQ9HSCrWrhumdvbSRUg4wLg595o0b7MZ2D+f8aGKSSyCYDBc?= =?us-ascii?Q?fFUkaFWYG+f5mPk/RFZ7LuDUksy11bPjzmqzYeNrh8CMdDtgsVvx36LXLti+?= =?us-ascii?Q?2LRVSKuYl9dQaNh5gv6pPfcRQV8PgdX3wrqjEW0Q++2EJ7zvT9K9dpoNHoFr?= =?us-ascii?Q?pjzPDPxyq0W/j05jzLLQlEASQljtDFlIsa0UJ0N07S7Fu9lt9GS+rhHdq7JO?= =?us-ascii?Q?U50yEhH9iNiVcjXO4RUkeoQkE9GuRcMCqEYOQg7adHXJZK2lSMi1?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 45ecab0e-ce03-4ffe-92bf-08dec1348944 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:11.9387 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: QFESfV9F6u2y2JlAd1aVmIYA+OnCeCQDzIjyRcRdOt8UPk7dwaORB4GNV/LL4buqRWoGhEC2L8Xfhjf5TngtMxozZ4DVtorJEpBC1oqJGwFQu6Kt36P7yD/5qeAZ7mKP X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl bindings for StarFive JHB100 SoC System-2(sys2) pinctrl controller. System-2 domain also supports configuring the pin voltage. Add relevant definitions for power-source configuration. Signed-off-by: Changhuang Liang --- .../pinctrl/starfive,jhb100-sys2-pinctrl.yaml | 169 ++++++++++++++++++ .../pinctrl/starfive,jhb100-pinctrl.h | 44 +++++ 2 files changed, 213 insertions(+) create mode 100644 Documentation/devicetree/bindings/pinctrl/starfive,jhb1= 00-sys2-pinctrl.yaml diff --git a/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-sys2= -pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-s= ys2-pinctrl.yaml new file mode 100644 index 000000000000..e29d8c01b3c4 --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-sys2-pinctr= l.yaml @@ -0,0 +1,169 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/starfive,jhb100-sys2-pinctrl.ya= ml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: StarFive JHB100 System-2 Pin Controller + +description: | + Pinctrl bindings for JHB100 RISC-V SoC from StarFive Technology Ltd. + + The JHB100 SoC has 13 pinctrl domains - sys0, sys0h, sys1, sys2, per0, p= er1, + per2, per2pok, per3, adc0, adc1, emmc, and vga. + This document provides an overview of the "sys2" pinctrl domain. + + The "sys2" domain has a pin controller which provides + - function selection for GPIO pads. + - GPIO pad configuration. + - GPIO interrupt handling. + + In the SYS2 Pin Controller, there are 37 multi-function GPIO_PADs. Each = of + them can be multiplexed to different hardware blocks through function + selection. Each iopad has a maximum of up to 4 functions - 0, 1, 2, and = 3. + Function 0 is the default function which is the GPIO function. + Function 1, 2, and 3 are the alternate functions or peripheral signals t= hat + can be routed to the iopad. The function selection can be carried out by + writing the function number to the iopad function select register. + + Each iopad is configurable with parameters such as input-enable, internal + pull-up/pull-down bias, drive strength, schmitt trigger, slew rate, input + debounce nanoseconds, power source. + +maintainers: + - Changhuang Liang + +properties: + compatible: + items: + - const: starfive,jhb100-sys2-pinctrl + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + resets: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-controller: true + + '#interrupt-cells': + const: 3 + + gpio-controller: true + + '#gpio-cells': + const: 3 + + gpio-ranges: true + + gpio-line-names: true + +patternProperties: + '-grp$': + type: object + additionalProperties: false + patternProperties: + '-pins$': + type: object + description: | + A pinctrl node should contain at least one subnode representing = the + pinctrl groups available in the domain. Each subnode will list t= he + pins it needs, and how they should be configured, with regard to + function selection, bias, input enable/disable, input schmitt + trigger enable/disable, slew-rate, input debounce nanoseconds, + power-source and drive-strength. + allOf: + - $ref: /schemas/pinctrl/pincfg-node.yaml + - $ref: /schemas/pinctrl/pinmux-node.yaml + additionalProperties: false + + properties: + pins: + description: + The list of IOs that properties in the pincfg node apply to. + + function: + description: + A string containing the name of the function to mux for these + pins. + enum: [ gpio, host0_port80, host1_port80, jtag, smbalert, uart= ] + + bias-disable: true + + bias-pull-down: + type: boolean + + bias-pull-up: + type: boolean + + drive-open-drain: true + + drive-push-pull: true + + drive-strength: + enum: [ 2, 4, 8, 12 ] + + drive-strength-microamp: + enum: [ 2000, 4000, 8000, 12000 ] + + input-debounce-ns: + minimum: 0 + maximum: 4294967295 + + input-disable: true + + input-enable: true + + input-schmitt-enable: true + + input-schmitt-disable: true + + power-source: + enum: [ 0, 2 ] + description: | + 0: power supply of 3.3V + 2: power supply of 1.8V + + slew-rate: + enum: [ 0, 1 ] + default: 0 + description: | + 0: slow (half frequency) + 1: fast + +required: + - compatible + - reg + - interrupts + - interrupt-controller + - '#interrupt-cells' + - gpio-controller + - '#gpio-cells' + - gpio-ranges + +additionalProperties: false + +examples: + - | + soc { + #address-cells =3D <2>; + #size-cells =3D <2>; + + pinctrl_sys2: pinctrl@13082000 { + compatible =3D "starfive,jhb100-sys2-pinctrl"; + reg =3D <0x0 0x13082000 0x0 0x1000>; + interrupts =3D <59>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_sys2 0 0 0 32>, + <&pinctrl_sys2 1 0 32 5>; + }; + }; diff --git a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h b/includ= e/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h index 30704a5a3418..e1c6bc8960b7 100644 --- a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h +++ b/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h @@ -38,4 +38,48 @@ #define PADNUM_SYS1_GPIO_A22 6 #define PADNUM_SYS1_GPIO_A23 7 =20 +/* sys2 pad numbers */ +#define PADNUM_SYS2_GPIO_A24 0 +#define PADNUM_SYS2_GPIO_A25 1 +#define PADNUM_SYS2_GPIO_A26 2 +#define PADNUM_SYS2_GPIO_A27 3 +#define PADNUM_SYS2_GPIO_A28 4 +#define PADNUM_SYS2_GPIO_A29 5 +#define PADNUM_SYS2_GPIO_A30 6 +#define PADNUM_SYS2_GPIO_A31 7 +#define PADNUM_SYS2_GPIO_A32 8 +#define PADNUM_SYS2_GPIO_A33 9 +#define PADNUM_SYS2_GPIO_A34 10 +#define PADNUM_SYS2_GPIO_A35 11 +#define PADNUM_SYS2_GPIO_A36 12 +#define PADNUM_SYS2_GPIO_A37 13 +#define PADNUM_SYS2_GPIO_A38 14 +#define PADNUM_SYS2_GPIO_A39 15 +#define PADNUM_SYS2_GPIO_A40 16 +#define PADNUM_SYS2_GPIO_A41 17 +#define PADNUM_SYS2_GPIO_A42 18 +#define PADNUM_SYS2_GPIO_A43 19 +#define PADNUM_SYS2_GPIO_A44 20 +#define PADNUM_SYS2_GPIO_A45 21 +#define PADNUM_SYS2_GPIO_A46 22 +#define PADNUM_SYS2_GPIO_A47 23 +#define PADNUM_SYS2_GPIO_A48 24 +#define PADNUM_SYS2_GPIO_A49 25 +#define PADNUM_SYS2_GPIO_A50 26 +#define PADNUM_SYS2_GPIO_A51 27 +#define PADNUM_SYS2_GPIO_A52 28 +#define PADNUM_SYS2_GPIO_A53 29 +#define PADNUM_SYS2_GPIO_A54 30 +#define PADNUM_SYS2_GPIO_A55 31 +#define PADNUM_SYS2_GPIO_A56 32 +#define PADNUM_SYS2_GPIO_A57 33 +#define PADNUM_SYS2_GPIO_A58 34 +#define PADNUM_SYS2_GPIO_A59 35 +#define PADNUM_SYS2_GPIO_A60 36 + +/* power-source value */ +#define JHB100_PINVREF_3_3V 0 +#define JHB100_PINVREF_2_5V 1 +#define JHB100_PINVREF_1_8V 2 + #endif --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2097.outbound.protection.partner.outlook.cn [139.219.17.97]) (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 E1A6E3E5587; Wed, 3 Jun 2026 05:55:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.97 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466119; cv=fail; b=oR5VibkzccEVjzxxFSl4Z6MMIFGqRdnqqjehL9BLUFrD47yMdIyjLrpp3xqOEWI8YyRxaFfnCG2xXAiDSQ9CyI4qCIe6q0pDOZeaxkForAhuX486tmI3oQWGoTnbv98Yr7hW1VwUf+D2h7sBoMKbH4mAcql8yZmUBRIEQmwogY0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466119; c=relaxed/simple; bh=2y3B6G9+HpZy/K+B93bBE+U9ygwOeTHZ4nGg/OwPqU8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=s3FcIOlP7uDmuVSy3L/NQbq0/7xxc9AQNDKys6ygwWcGDoarooIt/rTEDsly90QeVo/qr0hroiMLa6M5WJ+oXVnUznroZEyHwgRMO16v07bVgFk4HaJArVIII+j4McdFnBlZnuCwZrKU3AWznJzYP/SalOSlEVJ7DVJzYns/Fps= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IZXVp0SYRYqtJcWIK5WoNghUQJ8jZPEvZnKr9ySD9jp7vz0mXeXILT5ObF7mSTKC00vJtDTmjFqg8+DNM+TVzrBBt5ppWXsd/R9KKFYJtjO1nqTMgINnIw81cL7AdkBOFspzhGEcbia1FSxo4BMdddqTBkU8aueGsohwjbAWpbBNGAMv4cPC8skxctMcPGo0k3AGBnmtl0u3x80Z701i8SOs3qtk1Xne0o+FpQwnGBHFb48o3fASLl6yKikV1HFFmpOd8vf9nlXujxP9crq5MPP1oAk9dJMDUBpzaoijWmpFaFv+6n1nPBLSIqEg00gznCfSOSXq/A4L0jfNnb2NkQ== 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=rLphmebkt4QrHzJ5OPSSmxE5M652ge44TBajr50gMNI=; b=ZLcIdKTCyuSSPBb0/X5jIKOL5pSAC6Vli9U+lpvnZatQr9ouLfFGzh0eNFsGC7q+2d2x1NoPJoCJ89i3iiAX68S/q4YD015j2sQGZYXlV2TktoGsOWlAzdH+d7HSbzCCOciaSSBLhgumIYdA/ShgTG362u/idkpnkh+FYKpAngDRCWup/MBGEjf2K7IRfn/nv/TM9JUGDhNxkbM2ZHTcJ6KnzIYQlJB76X/3kxEqocTGvkWqVWpmQMHe2I4zESjuYg+WJVFbs50NewJTthkY0WLsfgNfHxdrzD+lmKpqL7rcLM1qncVNsvmS9nHpOJFacI9D2zZFyIk6gFy/qofwjw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:13 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:13 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 10/21] pinctrl: starfive: Add StarFive JHB100 sys2 controller driver Date: Tue, 2 Jun 2026 22:53:36 -0700 Message-Id: <20260603055347.66845-11-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: fde42834-7bca-4bef-48e0-08dec1348a1e X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|5023799004|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: Ue0M3Fh67P00usXczRXQzPX2Rd8Lx9Oz89rgJ1dgY1pnrw6uMfFr1JFL9PJQKqdAnsj2VTnnNfhjbyuI3DyK8O3IVPAQfp1WevQ3ShN2zXXTLoW4kdBFUBo8KH29YqM6b9+1o9uZkqNH/vmhq9GJGzGzBYZvRI2kwzO8zYRYCp5OrXRbVAnOYj2li+KAbGu6YeKmVgI9yaTh694jLrhDQXdIjfi/l8+s97ycmfoSe8wGBBfxKMdV98EkvEvRDI4g59jMqGmBLjMweuV6vdVLmghQDvwN38qpNJn398kdOjuWY7Yem9Us3rllzuiGF3IBV2pVJQRylqn/lbl+eooMStAN/t5X6I2C9B1RuHUi0x/JblP9KdaSEyBk1oe0DJGsxsK0YFAyw0fR6z5nZThVoNxYzzylY36YI/8jO4Vz//qXjRqoLl3PntSGXNp0vNA1tbgWxW4qT9LI7LC8N6rW9I+LYAnoJsQrM2bfGPhSvOvifgPjQZZ/obZxWcieJIhAHtfjVvMKow3KwMphVEQWowKt6ZsaLhr18flEHUL+50L2LajwE3y4m/nu3hAsrNdiBDe1H6M5BCeShg02Ke3l6Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(5023799004)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zBSh9i2p14DF63h8yjHltfeDLUcRMX2MVk36yd67RFL7ZwqKSS8AhO4i36Ri?= =?us-ascii?Q?UrySIeQgqm4oVNSqZ9ol2zCcYLnldPrKwsDd6fgq9hGwona52hvG41nk8Nu8?= =?us-ascii?Q?nD6sF7payWgrw/4vhrx8EbKbVWlZcF2/hAMiW67UH2xqQTHJW4lJDIDsPdQs?= =?us-ascii?Q?TbkQHsGt6823sG4W1Y0KwgpPfGcchW6ioZJChQVBcx65u/wTTcHSZjDQeLk3?= =?us-ascii?Q?Nl84YykB0ONNhpTbwqsknqOb0Tn7HVpAz/TIt600UJAgs8SJtP2XH0fQgUP2?= =?us-ascii?Q?E6vvIazbQblWwUcohTlH8S3S1ATM/6I+2wYpneXxj/jYobg/KAKMmnQ7XDc2?= =?us-ascii?Q?WX5XeRoSF4h7DW+8eNeR7MOFCOrsEskopHR0EdZ2bnhJFKYtFyBr2CLCv0Jp?= =?us-ascii?Q?h8xDB332iimlxo/I+N9fPbQump6wLD2ZHXlFMgTVuyxn9eUgtLMhIJA0EJYC?= =?us-ascii?Q?DGpfizK9Lsag0LH17V+7RVynlMfUc6FSSGOrbu9T38y9IU6GTQv9E7VD8UIr?= =?us-ascii?Q?XV2ZgRprocd4soUjwfjD+Nw3VOaXNFytlmSehnrw+HhKeOK277BkAAbYfD11?= =?us-ascii?Q?QCzOVjVniTXRy8J/2OfV7McCvI8TA5dQzIXuCVefwc+YhsBqfbusHwctGo1W?= =?us-ascii?Q?c8bu7oQLQaU2PJwkbafs6yKsWaa4O/MRn5qvwr+PccZZU4z5DJV6MTZDVnVB?= =?us-ascii?Q?jNwnWBeu8Bj9HmL1Gtaiw3CBkmbF+ce2y9WJPJpKHV5Qh0HKqNaGEyx5urWs?= =?us-ascii?Q?WgBiiBak/tlP/a+7SDV283T9zV8nibNiZ8TuPwPJpO6+Pnrp8i0eq/j6um/6?= =?us-ascii?Q?Tw0sE5u/BLtpxZWqoC/XjrA7nLEOdsGtf9wqNJAzOfUe3kqbCx478c8zDqZd?= =?us-ascii?Q?BS7qNqolrek+o2rRwY8L4eeihsBPmEA0eWAQANeaXXpSCvV9WjYODI2lkpqn?= =?us-ascii?Q?IEloszBx8JvW3OPewJEKWMmLOaBXs6e7B/nvadT94x6B04sXLXZ9v3xJN6Rb?= =?us-ascii?Q?jjus/6PNpjPjdyyK+DasjkkkR8lVtQllN4kRdzAPKm6iAJTsjJ4JDJE2tLsw?= =?us-ascii?Q?XVSgpxlk0JYioM9vto6i9tFKiUd51Ks9gmidjmqZTKNZUF10XuzTziIqgHF7?= =?us-ascii?Q?Wd7HOz7NGPYwbALalBsqXNqdODUwWL0Mzn+FXAXTx4oFDShHgWs2biPZ6O6n?= =?us-ascii?Q?lmmr9zaTrHNyMQXpXPRNuajHLR4M1BtA6W+oJ7l2eGMtXXvFGOBZ9Se4yJGQ?= =?us-ascii?Q?xRC01s4svbMo9Px68+hkJDGOanuUbaIOO1mTkReITzAJ6osIGv6/kkAQCELT?= =?us-ascii?Q?/6isfMiwiHsjz4Bnm4/bpVQvG9AS5kqii5T4lBCVFjVkSTA+W2pFrqiiQ/Ib?= =?us-ascii?Q?3eNjwXmaCIIGD7KNlQRNdfA8xzVBP6kzM1/96It4wVb84BVzUNm5ifyaXKql?= =?us-ascii?Q?nCKPo4MHM/orGc2mDywwcQ6IuvFVxqZ0riwPxvALQul5YXqZNi4q/wflXIvL?= =?us-ascii?Q?pFxW/TNOK5lFBJ8XMnMIRvmb8E58nvea7rtY81y4GmrIAKFtai5ZeAdHNwtA?= =?us-ascii?Q?r7yk3t7koSAHTR6pcj/zweDHiCK4Cb0pqN7MFTI1UNyUAPAq3m/fPihufyWC?= =?us-ascii?Q?u+6PJjLLVNs4G0sey4izUo1k/UfgBiqzr5RiYgyGY7DpARSx0zdxCvWGtnaG?= =?us-ascii?Q?g2CoeMV8kOjTgr6j5uJjBvJ+u9D5arQzCnBZReIuJbBSXv9wmjbvLnug6+Ft?= =?us-ascii?Q?oqv7HEfqrC7+hCX1taFGT7ZQSlS40RBaw3xRrCrqQf2VK6fTFxXe?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: fde42834-7bca-4bef-48e0-08dec1348a1e X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:13.3504 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: oRi1KuTR0e3UJlcxUTcYAtxmxOCu6XJwgJ3lj35hmbzFKrUPQafuRfgd6hl53XksmkspRWp32+LnTRXnM2ZLKMd22/sfm7r77oc9FaLqyD4/Ul2yEFHOzI+dXDCrvEVg X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl driver for StarFive JHB100 SoC System-2(sys2) pinctrl controller. Co-developed-by: Lianfeng Ouyang Signed-off-by: Lianfeng Ouyang Signed-off-by: Changhuang Liang --- drivers/pinctrl/starfive/Kconfig | 12 ++ drivers/pinctrl/starfive/Makefile | 1 + .../starfive/pinctrl-starfive-jhb100-sys2.c | 134 ++++++++++++++++++ 3 files changed, 147 insertions(+) create mode 100644 drivers/pinctrl/starfive/pinctrl-starfive-jhb100-sys2.c diff --git a/drivers/pinctrl/starfive/Kconfig b/drivers/pinctrl/starfive/Kc= onfig index 882d621eaf57..da11d486779a 100644 --- a/drivers/pinctrl/starfive/Kconfig +++ b/drivers/pinctrl/starfive/Kconfig @@ -90,3 +90,15 @@ config PINCTRL_STARFIVE_JHB100_SYS1 This also provides an interface to the GPIO pins not used by other peripherals supporting inputs, outputs, configuring pull-up/pull-down and interrupts on input changes. + +config PINCTRL_STARFIVE_JHB100_SYS2 + tristate "StarFive JHB100 SoC System-2 pinctrl and GPIO driver" + depends on ARCH_STARFIVE || COMPILE_TEST + depends on OF + select PINCTRL_STARFIVE_JHB100 + default ARCH_STARFIVE + help + Say yes here to support System-2 pin control on the StarFive JHB100 SoC. + This also provides an interface to the GPIO pins not used by other + peripherals supporting inputs, outputs, configuring pull-up/pull-down + and interrupts on input changes. diff --git a/drivers/pinctrl/starfive/Makefile b/drivers/pinctrl/starfive/M= akefile index 8d96cf80d377..b817ad93b91d 100644 --- a/drivers/pinctrl/starfive/Makefile +++ b/drivers/pinctrl/starfive/Makefile @@ -10,3 +10,4 @@ obj-$(CONFIG_PINCTRL_STARFIVE_JHB100) +=3D pinctrl-starf= ive-jhb100.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0) +=3D pinctrl-starfive-jhb100-sy= s0.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0H) +=3D pinctrl-starfive-jhb100-s= ys0h.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS1) +=3D pinctrl-starfive-jhb100-sy= s1.o +obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS2) +=3D pinctrl-starfive-jhb100-sy= s2.o diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-sys2.c b/driv= ers/pinctrl/starfive/pinctrl-starfive-jhb100-sys2.c new file mode 100644 index 000000000000..59ea9bdaa078 --- /dev/null +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-sys2.c @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Pinctrl / GPIO driver for StarFive JHB100 SoC System-2 domain + * + * Copyright (C) 2024 StarFive Technology Co., Ltd. + * Author: Alex Soo + * + */ + +#include +#include +#include + +#include "pinctrl-starfive-jhb100.h" + +static const struct jhb100_pin_layout_desc jhb100_sys2_pl_desc[] =3D { + { .pin_start =3D 0, .pin_cnt =3D 37, .name =3D "gpio", .gpio_func_sel =3D= 0 }, + { .pin_start =3D 37, .pin_cnt =3D 1, .name =3D "jtag_tck", .gpio_func_sel= =3D -1 }, + { .pin_start =3D 38, .pin_cnt =3D 1, .name =3D "jtag_tresetn", .gpio_func= _sel =3D -1 }, + { .pin_start =3D 39, .pin_cnt =3D 1, .name =3D "jtag_tmc", .gpio_func_sel= =3D -1 }, + { .pin_start =3D 40, .pin_cnt =3D 1, .name =3D "jtag_tdi", .gpio_func_sel= =3D -1 }, + { .pin_start =3D 41, .pin_cnt =3D 1, .name =3D "jtag_tdo", .gpio_func_sel= =3D -1 }, + { .pin_start =3D 42, .pin_cnt =3D 1, .name =3D "jtag_hpd", .gpio_func_sel= =3D -1 }, + { 0xff }, +}; + +static struct config_reg_layout_desc jhb100_sys2_pinctrl_rl_desc[] =3D { + { + .pin_start =3D 0, + .pin_cnt =3D 37, + .drive_strength_2bit =3D { .shift =3D 0, .width =3D 2 }, + .input_enable =3D { .shift =3D 2, .width =3D 1 }, + .pull_down =3D { .shift =3D 3, .width =3D 1 }, + .pull_up =3D { .shift =3D 4, .width =3D 1 }, + .slew_rate =3D { .shift =3D 5, .width =3D 1 }, + .schmitt_trigger_select =3D { .shift =3D 6, .width =3D 1 }, + .reserved =3D { .shift =3D 7, .width =3D 8 }, + .debounce_width =3D { .shift =3D 15, .width =3D 17 }, + }, + { + .pin_start =3D 37, + .pin_cnt =3D 6, + .drive_strength_2bit =3D { .shift =3D 0, .width =3D 2 }, + .input_enable =3D { .shift =3D 2, .width =3D 1 }, + .pull_down =3D { .shift =3D 3, .width =3D 1 }, + .pull_up =3D { .shift =3D 4, .width =3D 1 }, + .slew_rate =3D { .shift =3D 5, .width =3D 1 }, + .schmitt_trigger_select =3D { .shift =3D 6, .width =3D 1 }, + .reserved =3D { .shift =3D 7, .width =3D 25 }, + }, + { 0xff }, +}; + +static const struct pinvref_desc pinvref_desc_sys2[] =3D { + { + /* gpiow */ + .pin_grp =3D { + PADNUM_SYS2_GPIO_A36, + PADNUM_SYS2_GPIO_A37, + PADNUM_SYS2_GPIO_A38, + PADNUM_SYS2_GPIO_A39 + }, + .num_pins =3D 4, + .range =3D BIT(JHB100_PINVREF_1_8V) | BIT(JHB100_PINVREF_3_3V) + }, + { + /* gpiow-inner */ + .pin_grp =3D { + PADNUM_SYS2_GPIO_A40, + PADNUM_SYS2_GPIO_A41, + PADNUM_SYS2_GPIO_A42, + PADNUM_SYS2_GPIO_A43 + }, + .num_pins =3D 4, + .range =3D BIT(JHB100_PINVREF_1_8V) | BIT(JHB100_PINVREF_3_3V) + }, +}; + +struct starfive_pinctrl_regs jhb100_sys2_pinctrl_regs =3D { + .vref =3D { .reg =3D 0x000, .pv_desc =3D pinvref_desc_sys2, + .num_pv =3D ARRAY_SIZE(pinvref_desc_sys2) }, + .func_sel =3D { .reg =3D 0x0d4, .width_per_pin =3D 2 }, + .config =3D 0x010, + .output =3D 0x0bc, + .output_en =3D 0x0c4, + .gpio_status =3D 0x0cc, + .irq_en =3D 0x0e0, + .irq_status =3D 0x0e8, + .irq_clr =3D 0x0f0, + .irq_trigger =3D 0x0f8, + .irq_level =3D 0x100, + .irq_both_edge =3D 0x108, + .irq_edge =3D 0x110, +}; + +static const struct jhb100_pinctrl_func_maps jhb100_func_maps_sys2[] =3D { + { .func =3D "gpio", .val =3D 0 }, + { .func =3D "host0_port80", .val =3D 2 }, + { .func =3D "host1_port80", .val =3D 3 }, + { .func =3D "jtag", .val =3D 2 }, + { .func =3D "smbalert", .val =3D 2 }, + { .func =3D "uart", .val =3D 1 }, +}; + +static const struct jhb100_pinctrl_domain_info jhb100_sys2_pinctrl_info = =3D { + .name =3D "jhb100-sys2", + .pl_desc =3D jhb100_sys2_pl_desc, + .crl_desc =3D jhb100_sys2_pinctrl_rl_desc, + .regs =3D &jhb100_sys2_pinctrl_regs, + .fmaps =3D jhb100_func_maps_sys2, + .num_maps =3D ARRAY_SIZE(jhb100_func_maps_sys2), +}; + +static const struct of_device_id jhb100_sys2_pinctrl_of_match[] =3D { + { + .compatible =3D "starfive,jhb100-sys2-pinctrl", + .data =3D &jhb100_sys2_pinctrl_info, + }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, jhb100_sys2_pinctrl_of_match); + +static struct platform_driver jhb100_sys2_pinctrl_driver =3D { + .probe =3D jhb100_pinctrl_probe, + .driver =3D { + .name =3D "starfive-jhb100-sys2-pinctrl", + .of_match_table =3D jhb100_sys2_pinctrl_of_match, + }, +}; +module_platform_driver(jhb100_sys2_pinctrl_driver); + +MODULE_DESCRIPTION("Pinctrl driver for StarFive JHB100 SoC System-2 domain= "); +MODULE_AUTHOR("Alex Soo "); +MODULE_LICENSE("GPL"); --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2097.outbound.protection.partner.outlook.cn [139.219.17.97]) (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 AF1353F0ABE; Wed, 3 Jun 2026 05:55:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.97 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466121; cv=fail; b=TT7hBQIW5cfNSkCJ04Q6v+tY2REFP5jbDnsJffEfTyY5exL7zixd6XBaIm3fTrVZR3USHBICXNDF/IfYDNJ2RUI4KWb0qF96btaQhWaUdgxW4nIPTSH3Ob7MzaA1eeRFGKMiqh6rcE8mSsO8hDKgRJ+hfSksJOX20X35RwOQfrA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466121; c=relaxed/simple; bh=v95grIL32ptvjKD7NQlgLENkFZRq3KU1Z/vfHLtUHfA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=R0s/pM9hJqDlq95r55gIGNofoAgoI92kkV+vFMaOVuJUVZWwBQZf49No7ZYX8+w8kEFQfdrw1Bn+UdxBVOPGnyo7230DKCgG/Sz+kdDL1FrC388BchmXCPhBMSLKWLm1A1hHxPzVgeyUWxzl9wn3gLrJLPzmZlUH5PdgGEiVZXE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L60mn26DIgDkQ7y7yHp7RZbVspKiWf8upJOFV6arrtqeg+TpUNobehCd2QTbgua99Tw66q2nAu9o1/Mwiqx1v447SJVvY63YDE2C4216gbGBVoHmYXTLKvufpY36I9lkX3J5Txl64D7EYfA4RMA4j28hvoMBeRRiaGpYILEuCPTk4du2SuZmggUyf1++D/ipTO+edjeIz/p0hZpnX3C/bBkn0QBntAb6uXq/JyxGOze3mKBjydhSNTp6V5d5kn2sBwhDRbjwtRXHL5ifCY4exl9cfRyrQ/x6E/XjEXHxJKdxGLSz/ew/mh8j1Qu+B3WkNZEq5afWyFGMudzyO1SPxw== 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=a3v0W3BrfASvrZ/lpRmCLFnBiX8GOzNfG/n37cNjMVQ=; b=IE8hfTFYKUG5XCYru/qbyhXksAsjzAt55Xucx8AbeYmKxCRlrS8GmjnPpPi25TftGvtbqqYXx5f8OV2R/RiKjfHPElDqPvH8FMA4xlsbVqKSJzaEHzzxoNwkulZoDH3hdpCLk47GvdsTSjJtjj+pab5kB0YggWDUWLgtOcSVy7vHIZrmm+jIntn4e7W69E776zYWEGWysPnDgW3fsEsoNcJ8HHwnHK+cYG1QBiRE/zrx+eNEtyNa/VIhs8hd3cUs1FGpk5SmpMZtNDrfNObxdD1fCS/m/0NJZRpCkMBxSp0Pxz42VVYljYBxkmC/pOHLz7EYlV4cQP+UycHfq4bVfw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:14 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:14 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 11/21] dt-bindings: pinctrl: Add starfive,jhb100-per0-pinctrl Date: Tue, 2 Jun 2026 22:53:37 -0700 Message-Id: <20260603055347.66845-12-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: c072c046-3709-434f-0cf8-08dec1348ada X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: J1+aDyPwpqZchUiO0+GhECGo0d0fqSJA5TtUHXyYCl82YSKrt6rhnkU3BvEW75uGgVeZYr9nVUFQky3IfI+5051JSmKi1JFap6faGr4klNcuO9Ue6Xidfv3Rr+gHjPO8zhAVdSuEAyLWhVlqcJeH3aL1lEbUp7JwnQmoxqN5OREYaB5UuPdAQIZZBvwHPeIvnCm+ZxmxGrpR24lJYof37NSsPKLZOx83OA5GTXgMPeXr/RgTFYPYAY8EeuWMdg9L5QXdGh3A0IL1uiBouCgZPfWExTRpbn3bgV2lVWxFapX7BspSONuplZ6K7SoBz6seVT9OSXw53NrgDwMcK0Ok2PB1NAlB0Z/2LwsOZf8NVgVFVcJiKZV+JvE5wSolIg0xewXwInsILy0hwZNe65ZF4E1a3YTtzMDn5jhLLh5KI8AY6RDCYKF2DnNhV//la5Rt1soC2NnTVcEbKoNJwPyri/DWLYPzh0vY7KDknZrTl8KzY4h6w1uRh0rINiYN0e9b+sj4BRiY1y+SjOMM0vc/VwVzveKVDbi3K1fxc14hiKaai91F5cFBCoPqbzwk9SM+XKwDaE4pQkWNPHehhcRJkA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?D2sV9F2FfumHSIu1BRrNT/h7cWnoRqRachbuVPIQEjiS+pC0vDk+9qi0gUdg?= =?us-ascii?Q?Fb7InVr6YU0VnZGgkeCCOByNoQIc2lTe5zjiwDHE35iqF6Zb0t5chjb7fDJb?= =?us-ascii?Q?+cmB5ciPdrD4V0Fg5LVbT70ukecSG6WKrAQWUFL/Ohp1vKh1UQ+MuAU2TaoU?= =?us-ascii?Q?RmEhZXWv7x/FEf1I5ZeaCyLulNHfPsCBNFn7Z2tKpwydoNc+BM9QFnWdMQJB?= =?us-ascii?Q?yzCrFMUsxL89CvU6iuMRsAJXesqpVBjVk9Mt08v9LJCnLy/J2jOBWTWkoLhv?= =?us-ascii?Q?gqIqMkLaLBhogsy3lituyTfZSVXEXoSeUDhehaQRvcKUVqEvOMWhUjdDT27n?= =?us-ascii?Q?B8KSvQ0Mngh+bJmQXyBbbou509pUHsjj0FSPtIhnxlZhfLLcIxuLcybziMgP?= =?us-ascii?Q?5Q5nToBiyp5dIVmJ7AGb5rvoda/w9kJ59SQVKsORZjjZYhX0Ag3OsQEXgx0G?= =?us-ascii?Q?VaSAMQ5NToxh1Rt3K8HRKaKKmXbpikaU8xCQ2vgN7AS7UvSaOSBrT59UYMr5?= =?us-ascii?Q?dfx7/3HjMDuujy+7YIlxqkIeNlfXRcQzpJzO9nWRbnKTbcjxMxFTV4Nb2TnQ?= =?us-ascii?Q?nmnJI/WKIRnUApXNaTzfU2CpUQI1zXx8XFnYyfWle37ogCzjSwKjI9JR6fKA?= =?us-ascii?Q?QtX174kuQCkMEQccQ1lCWwhKonEj09+DzUQowO3G4AkgEnfNhTCFVV7G2vD6?= =?us-ascii?Q?5FGgtvqf5UxC13NHz/RaACbi6wMqVzNVJJZtHNXynr+8NWyQPwv/A4HNEQhY?= =?us-ascii?Q?XdqM6b/+qSkpHefYMmeKmOYcj2IzQdpgMRDQRboH7jj5KLh4m1WCfgNpw6AP?= =?us-ascii?Q?5S9hxrHkfIRNaHdRNUEKWbAAdbNluWMj0kwQjdkRe6FzCLL2AybolUce01Ik?= =?us-ascii?Q?k4IsRWqaigSBSpbFhcf4Uk8JSR2u6ENzVdzqFHA8GupPWq8BOaYB3hVv+t6w?= =?us-ascii?Q?A/G6p+D9H7L1f+CvDeXz3siOnxH5PA4CcBHFhyBCSIEG13HInfTMqLcP94ET?= =?us-ascii?Q?aX8rZHwuEaNbai+cZPcU1aUxOOsCKZP3G5a/RQZLDcCl4z5xs+xtZkBx4XQT?= =?us-ascii?Q?2uUFok+RUAqzITdyDiBv6tyR2BWP1zehSoDsbdTsun0xe2yEdlulINukh/17?= =?us-ascii?Q?J09B7DOVgplxjQJzo475pTnfCcX2wOkdXmd4aGtzZPuWKtKFAEGCbTI8dzSD?= =?us-ascii?Q?Wc1aWy15dREW/Yxf+hVMf4GL2yCzdPiPjWAMBJ4FybfQ0jaziYlBMA+kxgwO?= =?us-ascii?Q?Ybo0QdRrK3WQNx85VgmtXdrYBosnar3iTSh0B4rF3FvZ4j0dPuVywJvKVLSn?= =?us-ascii?Q?x/9ae0W86w0JF2zhbvRvoeMFqydvdg/ezEaLBCtm8altbybPGYJoncAwh+Ki?= =?us-ascii?Q?g35Td2lO+w46ptePH0b+P/Aw8pS21YZBLHdmv0QIXiuE6v0vQA0IGpuboEEv?= =?us-ascii?Q?c8EbwTM6b9r7AaOZnwetNbZbPlexwKdk9BLdmWzvJ37J7+ttZWjH4doJ9YEk?= =?us-ascii?Q?0HO+msMxaT3YAuTiHG+c29w4seFdeHL2CnIAgx5untPVKw0u9I7usGaWf/6S?= =?us-ascii?Q?H1PO7gExGrHV+okLU2Jb22M1uj9je8naZRkXQIhJYRV5spcdq8k8UwHQIU1U?= =?us-ascii?Q?Z/3cTnKUGwxSvTPgS4a2apyCe97PDarS1eHnZ5Fz9CzKwkKYSxRyw984hiuV?= =?us-ascii?Q?VjuwLe6waM3V5iQJrJgR5BqUtPHfCiFIusJEIISjLN1ym/9ejykfm9X4N7ng?= =?us-ascii?Q?aeJPV9gl9DrOjow63qylzu7pOXsRhp6vvwvc06yH82LUxuM3JViO?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: c072c046-3709-434f-0cf8-08dec1348ada X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:14.5989 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: pzHfEjqZLE/oGcdIA0YPZfMw/9Br6ihEIE0i7oCc1PAZx/j6qAnRjqCpoBfrBRZIgIniN/4r8fMnJsRIbbf2Mq0iAywUxg+Cwv6ONUqwSSSYc+VcAfvd14PCxBIP1DSU X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl bindings for StarFive JHB100 SoC Peripheral-0(per0) pinctrl controller. Signed-off-by: Changhuang Liang --- .../pinctrl/starfive,jhb100-per0-pinctrl.yaml | 179 ++++++++++++++++++ .../pinctrl/starfive,jhb100-pinctrl.h | 62 ++++++ 2 files changed, 241 insertions(+) create mode 100644 Documentation/devicetree/bindings/pinctrl/starfive,jhb1= 00-per0-pinctrl.yaml diff --git a/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-per0= -pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-p= er0-pinctrl.yaml new file mode 100644 index 000000000000..f83801325348 --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-per0-pinctr= l.yaml @@ -0,0 +1,179 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/starfive,jhb100-per0-pinctrl.ya= ml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: StarFive JHB100 Peripheral-0 Pin Controller + +description: | + Pinctrl bindings for JHB100 RISC-V SoC from StarFive Technology Ltd. + + The JHB100 SoC has 13 pinctrl domains - sys0, sys0h, sys1, sys2, per0, p= er1, + per2, per2pok, per3, adc0, adc1, emmc, and vga. + This document provides an overview of the "per0" pinctrl domain. + + The "per0" domain has a pin controller which provides + - function selection for GPIO pads. + - GPIO pad configuration. + - GPIO interrupt handling. + + In the Peripheral-0 Pin Controller, there are 60 multi-function GPIO_PA= Ds. + Each of them can be multiplexed to several hardware blocks through funct= ion + selection. Each iopad has a maximum of up to 3 functions - 0, 1, and 2. + Function 0 is the default function which is generally the GPIO function. + Function 1 and 2 are the alternate function or signal of an iopad. The + function 1 and function 2 are other optional functions or peripheral + signals that can be routed to an iopad. The function selection can be ca= rried + out by writing the function number to the iopad function select register. + + Each iopad is configurable with parameters such as input-enable, internal + pull-up/pull-down bias, drive strength, schmitt trigger, slew rate, input + debounce nanoseconds, power source and drive type (open-drain or push-pu= ll). + +maintainers: + - Changhuang Liang + +properties: + compatible: + items: + - const: starfive,jhb100-per0-pinctrl + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + resets: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-controller: true + + '#interrupt-cells': + const: 3 + + gpio-controller: true + + '#gpio-cells': + const: 3 + + gpio-ranges: true + + gpio-line-names: true + +patternProperties: + '-grp$': + type: object + additionalProperties: false + patternProperties: + '-pins$': + type: object + description: | + A pinctrl node should contain at least one subnode representing = the + pinctrl groups available in the domain. Each subnode will list t= he + pins it needs, and how they should be configured, with regard to + function selection, bias, input enable/disable, input schmitt + trigger enable/disable, slew-rate, input debounce nanoseconds, + drive-open-drain, drive-push-pull, power-source and drive-streng= th. + allOf: + - $ref: /schemas/pinctrl/pincfg-node.yaml + - $ref: /schemas/pinctrl/pinmux-node.yaml + additionalProperties: false + + properties: + pins: + description: + The list of IOs that properties in the pincfg node apply to. + + function: + description: + A string containing the name of the function to mux for these + pins. + enum: [ gmac_mdio, gpio, i2c, i3c, smbalert, wdt ] + + bias-disable: true + + bias-pull-down: + type: boolean + + bias-pull-up: + oneOf: + - type: boolean + - enum: [ 600, 900, 1200, 2000 ] + description: Pull up RSEL type resistance values (in ohms) + description: + For normal pull up type there is no need to specify a resist= ance + value, hence this can be specified as a boolean property. + For RSEL pull up type a resistance value (in ohms) can be ad= ded. + + drive-open-drain: true + + drive-push-pull: true + + drive-strength: + enum: [ 2, 4, 8, 12 ] + + drive-strength-microamp: + enum: [ 2000, 4000, 8000, 12000 ] + + input-debounce-ns: + minimum: 0 + maximum: 4294967295 + + input-disable: true + + input-enable: true + + input-schmitt-enable: true + + input-schmitt-disable: true + + power-source: + enum: [ 0, 2 ] + description: | + 0: power supply of 3.3V + 2: power supply of 1.8V + + slew-rate: + enum: [ 0, 1 ] + default: 0 + description: | + 0: slow (half frequency) + 1: fast + +required: + - compatible + - reg + - resets + - interrupts + - interrupt-controller + - '#interrupt-cells' + - gpio-controller + - '#gpio-cells' + - gpio-ranges + +additionalProperties: false + +examples: + - | + soc { + #address-cells =3D <2>; + #size-cells =3D <2>; + + pinctrl_per0: pinctrl@11a0a000 { + compatible =3D "starfive,jhb100-per0-pinctrl"; + reg =3D <0x0 0x11a0a000 0x0 0x1000>; + resets =3D <&per0crg 0>; + interrupts =3D <60>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_per0 0 0 0 32>, + <&pinctrl_per0 1 0 32 28>; + }; + }; diff --git a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h b/includ= e/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h index e1c6bc8960b7..4fc54b9990d3 100644 --- a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h +++ b/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h @@ -77,6 +77,68 @@ #define PADNUM_SYS2_GPIO_A59 35 #define PADNUM_SYS2_GPIO_A60 36 =20 +/* per0 pad numbers */ +#define PADNUM_PER0_GPIO_B0 0 +#define PADNUM_PER0_GPIO_B1 1 +#define PADNUM_PER0_GPIO_B2 2 +#define PADNUM_PER0_GPIO_B3 3 +#define PADNUM_PER0_GPIO_B4 4 +#define PADNUM_PER0_GPIO_B5 5 +#define PADNUM_PER0_GPIO_B6 6 +#define PADNUM_PER0_GPIO_B7 7 +#define PADNUM_PER0_GPIO_B8 8 +#define PADNUM_PER0_GPIO_B9 9 +#define PADNUM_PER0_GPIO_B10 10 +#define PADNUM_PER0_GPIO_B11 11 +#define PADNUM_PER0_GPIO_B12 12 +#define PADNUM_PER0_GPIO_B13 13 +#define PADNUM_PER0_GPIO_B14 14 +#define PADNUM_PER0_GPIO_B15 15 +#define PADNUM_PER0_GPIO_B16 16 +#define PADNUM_PER0_GPIO_B17 17 +#define PADNUM_PER0_GPIO_B18 18 +#define PADNUM_PER0_GPIO_B19 19 +#define PADNUM_PER0_GPIO_B20 20 +#define PADNUM_PER0_GPIO_B21 21 +#define PADNUM_PER0_GPIO_B22 22 +#define PADNUM_PER0_GPIO_B23 23 +#define PADNUM_PER0_GPIO_B24 24 +#define PADNUM_PER0_GPIO_B25 25 +#define PADNUM_PER0_GPIO_B26 26 +#define PADNUM_PER0_GPIO_B27 27 +#define PADNUM_PER0_GPIO_B28 28 +#define PADNUM_PER0_GPIO_B29 29 +#define PADNUM_PER0_GPIO_B30 30 +#define PADNUM_PER0_GPIO_B31 31 +#define PADNUM_PER0_GPIO_B32 32 +#define PADNUM_PER0_GPIO_B33 33 +#define PADNUM_PER0_GPIO_B34 34 +#define PADNUM_PER0_GPIO_B35 35 +#define PADNUM_PER0_GPIO_B36 36 +#define PADNUM_PER0_GPIO_B37 37 +#define PADNUM_PER0_GPIO_B38 38 +#define PADNUM_PER0_GPIO_B39 39 +#define PADNUM_PER0_GPIO_B40 40 +#define PADNUM_PER0_GPIO_B41 41 +#define PADNUM_PER0_GPIO_B42 42 +#define PADNUM_PER0_GPIO_B43 43 +#define PADNUM_PER0_GPIO_B44 44 +#define PADNUM_PER0_GPIO_B45 45 +#define PADNUM_PER0_GPIO_B46 46 +#define PADNUM_PER0_GPIO_B47 47 +#define PADNUM_PER0_GPIO_B48 48 +#define PADNUM_PER0_GPIO_B49 49 +#define PADNUM_PER0_GPIO_B50 50 +#define PADNUM_PER0_GPIO_B51 51 +#define PADNUM_PER0_GPIO_B52 52 +#define PADNUM_PER0_GPIO_B53 53 +#define PADNUM_PER0_GPIO_B54 54 +#define PADNUM_PER0_GPIO_B55 55 +#define PADNUM_PER0_GPIO_B56 56 +#define PADNUM_PER0_GPIO_B57 57 +#define PADNUM_PER0_GPIO_B58 58 +#define PADNUM_PER0_GPIO_B59 59 + /* power-source value */ #define JHB100_PINVREF_3_3V 0 #define JHB100_PINVREF_2_5V 1 --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2132.outbound.protection.partner.outlook.cn [139.219.17.132]) (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 691E53F8886; Wed, 3 Jun 2026 05:55:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.132 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466125; cv=fail; b=hIl5ENuKkgeXT4avCjA33qHumQtM9Szsvh5bioOzuWMAUg0A9ZyJWqq18DdyosSRSZ28Fo4nPn3fT8oDMCW7O21t5tigC1R82L6J96mvwL1zE2HRdISvLBsY92TS97EYc4mbqiztT/QeXGtqpkOl6WqVyjVgGmh41J2GVSNusa0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466125; c=relaxed/simple; bh=UDrafPNuqszk9i5Aux5Hc9Dx2GUJf/pkVgo+63pHkAs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=k4rpUhm98QJfhxrwbNcDh99gRRascU0Iy7v+v8LbRyrK4xyyIrk4Eptrx1A8uv3/CPuhBSsKzF1/apw04wtug71O1kRv9j7GNa1isOdGFG8sMyFZ6rnfu9QCQWQ5f2TyEg+shj4lRy9FxpUCrawtP938wBMrncOjfJ1UEmXrV5w= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.132 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VsJZBySoubCWYX9plLjtAMJIuwzdnq/5o6v+snb2aJLNOyFjbCzryiYtgAmUv3Fowu1+/wQgEbxhpStM672z4BszlMZLbnzKZ/RnTv5cKqDWpjqBK43XnszyzsO+pejNljjYCBNDAHRl4POk030lMM7PtRWzgLbcvW2FHNL08mBw5qvqjWfAB/OqLPBSxoZDrVoCOyAvWU48q0QqjZzyj8EkWYGOXVZZ3fzJBCB+mWh0XHQgHyDle3nkt8O3EFs2PA+X7+N0C1cf3SqWB/kCeL5v1kPrNDqtZzYRnsqPtBj5Aekpwp8QHzgx4EXRYSWyLkk1IWWuGJy17TMEVBQYdw== 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=fYGTMjaqBIMNhKOvw2HqCUJk86v61ZO0dOpqvFT0XbU=; b=chq9PpC5FyDQCkPAd8MK9ZPbJeRS2A1BLeSqo6qq81FaFMC8XBZv0gLizOzhFWiB+W2QXCjRf3nrMXqHEmEp1fih7KSXrdWlAmzl5pDF/Q/1S7RQpvSNuslX7Oi5hMdzQ/KV2WU8RM1+1ZI9Oxc630KVc/WC+C3J5LGk6JOVqx0kVCqnOof77UCAiTwSORCmAfyEx0u37CLgugDpQcIXSg8wZwLl6Pd2Kpk9awQFuC6b35BrOuHORPBuEiLQ2TkxbFumQe3iZS709vsu299jutfvVNvtW5uIj3r0OGdisx+q1byRSJd1Yx8W3eIY/MCarCgfHmxUaDKAjatqvPFj+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:15 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:15 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 12/21] pinctrl: starfive: Add StarFive JHB100 per0 controller driver Date: Tue, 2 Jun 2026 22:53:38 -0700 Message-Id: <20260603055347.66845-13-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: fd16638e-d7ce-43df-96b3-08dec1348b96 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|5023799004|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: eyjCfpwQ+uXus1AMq3RLLmQUGyHMr2p4h0vfNAsnx78BI1/J/cDEQ1OEJBKE92LB5+iDXamzmAUgnjMD8Ith1ParZiIFqGp3sbLW6H14eadkOBBCD2Clax2fVoV3IJGmyuUSmeuip0Q7vVz4A4cdLYqCAtwEVmkO7t956emk1ZgdkDnDBxWg8cH3MrLy1UDQ5OQhh2gnQ/OwFKAPkDpCzdrC8AJzDtFlJBkwXJGIipcdhLFhiv8z8kuLz3BIFfvNW85zEQ0/5wMFVRv3o4AVp9rbwfcNZb2f7O/mIPltMcnpe/zTsqKTnr0rTOqYFtS1X7ueJZd1yk3UXKHq4+vbLkvaEpIlT+OHW1gkDDTupZLU4VMUHzyLxcJJy4h4QIgKhv0CJt35ePOyATISuHgFF1LCg7Wg3wdKyR5JvrRNLBqcE/pnE7eGt6/6aPFehHEMzP2B+/Xxf9ZF8VY2NPP38OvY6ApPdw42xxNxON9TVl9srELht74EWVQ1NJjxWsX/5YwmoA+Qe4Iu4GMQAntNXYRHM3reH5peiJg4OHkk7BvY2euJ1fOSCq1Ep6kCOzaN735dIievmnweEETq6/Fg1Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(5023799004)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dGQhZ2avArjIKhzuNnsmeE3/Uwrhj4yLD7gfNnAvfNcCGO30q8dUy2ismu6U?= =?us-ascii?Q?u3s8+PE5ybzPNWoUj3wbWtdGn5jeLm7fNOvJpKN1nyNP8qY2iH41mG/bUR1H?= =?us-ascii?Q?UVoPBfqq48AYeEJjnZYHq5U40VLjxQxfVWdw9rUAswZ2qu/sOlm1AaA2hLax?= =?us-ascii?Q?R1cvWctEXdzX9MCS2Q8okBI//ziheUWBjKyO2S/XB6nLA9dRrxylnTZkS+aO?= =?us-ascii?Q?xA7IMaC8Dguetg7WZfDOnJNfa39/Q5lpVFX+p5rYwCcfVixa7ka0B5X5DuK9?= =?us-ascii?Q?+bD7/Kw9jEbMUhdwfGTU3vHqWHT4koQIvNfXu4oYt1UpsxtmsV6d1c6eCA7z?= =?us-ascii?Q?nNsRh5hNgB98WNKVFniBhCwpVM0aL1jT0QzHVDKv/WML7rsypjC74Fya0sEY?= =?us-ascii?Q?YHvaTY15zKoySJnzKwIpToegA3ANPOOQJC8u+h3p5p7oDZgoBZjjT1jH51YE?= =?us-ascii?Q?Vguh7kIKQwRFoeGAAokaTtKqqsWyFTKfQv4kq660HLBe1u/efrjgjy4kDJJU?= =?us-ascii?Q?rXj3FBX9ZKRJn2GQSHAyIi5EDP0z0KR+vXhjCN+JU9ltHLX4Vp3xJmyEPAfV?= =?us-ascii?Q?4UZCXvI/JwVTITuh9A79m1dSlGuX6f2cLEIa6qE4XeDALh6/uoEdtqpHJWsw?= =?us-ascii?Q?nceRD91UpTW+d8m6b5UZ3giCon0+9bX4YgoGUb4dR7b5kWmg12Wgmg39N8w7?= =?us-ascii?Q?OBXBL7G0fkHFN3r4RC8BgaFf87dO5qeZyNBW5JPEFIi6aBuO9IjUkyN/smtj?= =?us-ascii?Q?phANDhMGzw7ApSBQwGTjP1a9UMi3RZ846Y7h9+57oaPqvAnGU5zS6zNaCU6z?= =?us-ascii?Q?dhsNtpHzEajcnCnchVJUWKU6BoAfW6Q4Ee0j7MmSyhcAMakFT7AIw+Xh88VZ?= =?us-ascii?Q?wPKlfp/AhmhkGnHYU1BXRel7atw1IEScMhxNNdyZNTGwxYYgFk0I81owDf80?= =?us-ascii?Q?4V2KEz6Fkp5QIZKtpOoUaE1D0kaQEjssrthdi7lLPOKVcm7jQTCuWyEbSthy?= =?us-ascii?Q?i3mDuBnT11zr2kRulufdDO3+YKJj9K0urB7T8kP/tEt4ZsdiTUzXTOhXH6q1?= =?us-ascii?Q?76D/MzLODFuB+/8h+DB0Pau5+W6GWiLwMTsCotOYuXyX0bj1JhIsVR4v9ZGo?= =?us-ascii?Q?RJB1Lf3jTTanQU51469R6doLFJcig6BRy0zl11XyPfLu+7M5x+Svxpse22S6?= =?us-ascii?Q?77wzi7QQEqvG4lYkauQnJ9hHRK1o7+MVhMM5hGtH5oVszHWW0GA0G8C7A0p2?= =?us-ascii?Q?NRPyUD7TD4MjrPvLQZpxxANKxuOZf8seD97RiwQT2F9YfSI6AH62Huz/MT9r?= =?us-ascii?Q?X4C6csgn/ESAPgvxg/nqvAsQtLT7tozM7208ltghOUuJrcguyd3zrx9kHEVJ?= =?us-ascii?Q?NGi/qRvp5AnfoBiEABRQ+AUVJaCAgqM8RQgDlOqQAygSgJldB1krZ5fMCTgW?= =?us-ascii?Q?mkV3mjk/iszshmeU0yf8S3Tr1FV6eo/c8NOcQtze0Pt1c3YlQWEGQySQ43PG?= =?us-ascii?Q?UTvNPUeDVRANSHT6Jb51jRq5Dutw3GFOtY4Upeehy3i2VflHT16U0bGeg2wC?= =?us-ascii?Q?EnJt0zED2hXvdzpIE+2VfKG4XAwJFQ9ajTv4kPyggmWRZ08sBU8Vc6RFlcKX?= =?us-ascii?Q?QYI6nXuzMMiaghqxlA4jV/zh9JR3Hdu4/eXivDlifRWmae0sSEWW8zmnoXZU?= =?us-ascii?Q?odA/s95u1Duo54+VhgztLD2RXXXLBEuadAE+evt0eQmmVoWmqHiG36ENprkg?= =?us-ascii?Q?t0kODIeMFXGbR70nWw5i+63AF2nw8HrwrhXTwrnszWoxosHv25Wa?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: fd16638e-d7ce-43df-96b3-08dec1348b96 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:15.8325 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zvuMXmETL1Jv0BDfvKTQC2Dtq+kxByojb6guQwmqGM3x56Up+532J/tEfG94eWGLbkMMtipQ8kdQx1VeYJ/sfAhMfveFPO38scFPsH4zvthJSvjA1rjUjzcppJPiQSNl X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl driver for StarFive JHB100 SoC Peripheral-0(per0) pinctrl controller. Co-developed-by: Lianfeng Ouyang Signed-off-by: Lianfeng Ouyang Signed-off-by: Changhuang Liang --- drivers/pinctrl/starfive/Kconfig | 12 ++ drivers/pinctrl/starfive/Makefile | 1 + .../starfive/pinctrl-starfive-jhb100-per0.c | 154 ++++++++++++++++++ 3 files changed, 167 insertions(+) create mode 100644 drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per0.c diff --git a/drivers/pinctrl/starfive/Kconfig b/drivers/pinctrl/starfive/Kc= onfig index da11d486779a..1e1bfdf87c31 100644 --- a/drivers/pinctrl/starfive/Kconfig +++ b/drivers/pinctrl/starfive/Kconfig @@ -55,6 +55,18 @@ config PINCTRL_STARFIVE_JHB100 select GPIOLIB_IRQCHIP select OF_GPIO =20 +config PINCTRL_STARFIVE_JHB100_PER0 + tristate "StarFive JHB100 SoC Peripheral-0 pinctrl and GPIO driver" + depends on ARCH_STARFIVE || COMPILE_TEST + depends on OF + select PINCTRL_STARFIVE_JHB100 + default ARCH_STARFIVE + help + Say yes here to support Peripheral-0 pin control on the StarFive JHB100= SoC. + This also provides an interface to the GPIO pins not used by other + peripherals supporting inputs, outputs, configuring pull-up/pull-down + and interrupts on input changes. + config PINCTRL_STARFIVE_JHB100_SYS0 tristate "StarFive JHB100 SoC System-0 pinctrl and GPIO driver" depends on ARCH_STARFIVE || COMPILE_TEST diff --git a/drivers/pinctrl/starfive/Makefile b/drivers/pinctrl/starfive/M= akefile index b817ad93b91d..f2bb0c35a2a0 100644 --- a/drivers/pinctrl/starfive/Makefile +++ b/drivers/pinctrl/starfive/Makefile @@ -7,6 +7,7 @@ obj-$(CONFIG_PINCTRL_STARFIVE_JH7110_SYS) +=3D pinctrl-star= five-jh7110-sys.o obj-$(CONFIG_PINCTRL_STARFIVE_JH7110_AON) +=3D pinctrl-starfive-jh7110-aon= .o =20 obj-$(CONFIG_PINCTRL_STARFIVE_JHB100) +=3D pinctrl-starfive-jhb100.o +obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER0) +=3D pinctrl-starfive-jhb100-pe= r0.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0) +=3D pinctrl-starfive-jhb100-sy= s0.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0H) +=3D pinctrl-starfive-jhb100-s= ys0h.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS1) +=3D pinctrl-starfive-jhb100-sy= s1.o diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per0.c b/driv= ers/pinctrl/starfive/pinctrl-starfive-jhb100-per0.c new file mode 100644 index 000000000000..d3364dfd9cbe --- /dev/null +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per0.c @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Pinctrl / GPIO driver for StarFive JHB100 SoC Peripheral-0 domain + * + * Copyright (C) 2024 StarFive Technology Co., Ltd. + * Author: Alex Soo + * + */ + +#include +#include +#include + +#include "pinctrl-starfive-jhb100.h" + +static const struct jhb100_pin_layout_desc jhb100_per0_pl_desc[] =3D { + { .pin_start =3D 0, .pin_cnt =3D 60, .name =3D "gpio", .gpio_func_sel =3D= 0 }, + { 0xff }, +}; + +static struct config_reg_layout_desc jhb100_per0_pinctrl_rl_desc[] =3D { + { + .pin_start =3D 0, + .pin_cnt =3D 60, + .input_enable =3D { .shift =3D 0, .width =3D 1 }, + .mode_select =3D { .shift =3D 1, .width =3D 2 }, + .pull_down =3D { .shift =3D 3, .width =3D 1 }, + .pull_up =3D { .shift =3D 4, .width =3D 1 }, + .open_drain_pull_up_sel =3D { .shift =3D 5, .width =3D 2 }, + .schmitt_trigger_select =3D { .shift =3D 7, .width =3D 1 }, + .reserved =3D { .shift =3D 8, .width =3D 7 }, + .debounce_width =3D { .shift =3D 15, .width =3D 17 }, + }, + { 0xff }, +}; + +static const struct pinvref_desc pinvref_desc_per0[] =3D { + { + /* gpioe-i3c0 */ + .pin_grp =3D { + PADNUM_PER0_GPIO_B8, + PADNUM_PER0_GPIO_B9, + PADNUM_PER0_GPIO_B10, + PADNUM_PER0_GPIO_B11, + PADNUM_PER0_GPIO_B32, + PADNUM_PER0_GPIO_B33 + }, + .num_pins =3D 6, + .range =3D BIT(JHB100_PINVREF_1_8V) | BIT(JHB100_PINVREF_3_3V) + }, + { + /* gpioe-i3c1 */ + .pin_grp =3D { + PADNUM_PER0_GPIO_B12, + PADNUM_PER0_GPIO_B13, + PADNUM_PER0_GPIO_B14, + PADNUM_PER0_GPIO_B15, + PADNUM_PER0_GPIO_B34, + PADNUM_PER0_GPIO_B35 + }, + .num_pins =3D 6, + .range =3D BIT(JHB100_PINVREF_1_8V) | BIT(JHB100_PINVREF_3_3V) + }, + { + /* gpioe-i3c2 */ + .pin_grp =3D { + PADNUM_PER0_GPIO_B16, + PADNUM_PER0_GPIO_B17, + PADNUM_PER0_GPIO_B18, + PADNUM_PER0_GPIO_B19, + PADNUM_PER0_GPIO_B20, + PADNUM_PER0_GPIO_B21, + PADNUM_PER0_GPIO_B22, + PADNUM_PER0_GPIO_B23 + }, + .num_pins =3D 8, + .range =3D BIT(JHB100_PINVREF_1_8V) | BIT(JHB100_PINVREF_3_3V) + }, + { + /* gpioe-i3c4 */ + .pin_grp =3D { + PADNUM_PER0_GPIO_B36, + PADNUM_PER0_GPIO_B37, + PADNUM_PER0_GPIO_B38, + PADNUM_PER0_GPIO_B39, + PADNUM_PER0_GPIO_B40, + PADNUM_PER0_GPIO_B41, + PADNUM_PER0_GPIO_B42, + PADNUM_PER0_GPIO_B43 + }, + .num_pins =3D 8, + .range =3D BIT(JHB100_PINVREF_1_8V) | BIT(JHB100_PINVREF_3_3V) + }, +}; + +struct starfive_pinctrl_regs jhb100_per0_pinctrl_regs =3D { + .vref =3D { .reg =3D 0x004, .pv_desc =3D pinvref_desc_per0, + .num_pv =3D ARRAY_SIZE(pinvref_desc_per0) }, + .func_sel =3D { .reg =3D 0x11c, .width_per_pin =3D 2 }, + .config =3D 0x014, + .output =3D 0x104, + .output_en =3D 0x10c, + .gpio_status =3D 0x114, + .irq_en =3D 0x12c, + .irq_status =3D 0x134, + .irq_clr =3D 0x13c, + .irq_trigger =3D 0x144, + .irq_level =3D 0x14c, + .irq_both_edge =3D 0x154, + .irq_edge =3D 0x15c, +}; + +static const struct jhb100_pinctrl_func_maps jhb100_func_maps_per0[] =3D { + { .func =3D "gmac_mdio", .val =3D 2 }, + { .func =3D "gpio", .val =3D 0 }, + { .func =3D "i2c", .val =3D 1 }, + { .func =3D "i3c", .val =3D 2, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_PER0_GPIO_B23) }, + { .func =3D "i3c", .val =3D 1, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_PER0_GPIO_B59) }, + { .func =3D "smbalert", .val =3D 1 }, + { .func =3D "wdt", .val =3D 2 }, +}; + +static const struct jhb100_pinctrl_domain_info jhb100_per0_pinctrl_info = =3D { + .name =3D "jhb100-per0", + .pl_desc =3D jhb100_per0_pl_desc, + .crl_desc =3D jhb100_per0_pinctrl_rl_desc, + .regs =3D &jhb100_per0_pinctrl_regs, + .fmaps =3D jhb100_func_maps_per0, + .num_maps =3D ARRAY_SIZE(jhb100_func_maps_per0), +}; + +static const struct of_device_id jhb100_per0_pinctrl_of_match[] =3D { + { + .compatible =3D "starfive,jhb100-per0-pinctrl", + .data =3D &jhb100_per0_pinctrl_info, + }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, jhb100_per0_pinctrl_of_match); + +static struct platform_driver jhb100_per0_pinctrl_driver =3D { + .probe =3D jhb100_pinctrl_probe, + .driver =3D { + .name =3D "starfive-jhb100-per0-pinctrl", + .of_match_table =3D jhb100_per0_pinctrl_of_match, + }, +}; +module_platform_driver(jhb100_per0_pinctrl_driver); + +MODULE_DESCRIPTION("Pinctrl driver for StarFive JHB100 SoC Peripheral-0 do= main"); +MODULE_AUTHOR("Alex Soo "); +MODULE_LICENSE("GPL"); --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2097.outbound.protection.partner.outlook.cn [139.219.17.97]) (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 2DBE73F99F2; Wed, 3 Jun 2026 05:55:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.97 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466126; cv=fail; b=lHVuDsLmjSyvtUqhqqq7FNChm5G2SHX8n1KeMqjHbU5MLkvA70IE901m+oCy0JFeO+gVu2XylJnsnW4bVcQ7CGbU606nI1YJQgzCJQKxua2JiuzrLWklTi1KNQ1lHI3cuRl/MTchtC08/V8Ea353vX+RaCR/moJ2qte2lANQ4fc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466126; c=relaxed/simple; bh=DgE3Dj822UDDkWRh67SumjzTPpQmwGMJDC7EM3lJ2Q4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=muZSJCJRBQo1ikZGXzPBJfUYVhn6wazfpQ55LZqS36nSCkCkJIxix2lJESgXbOlSD5PEKPFEhSf02zkQnQbGh2aX6/EzhYWJg8kXvquUL2eQnA597nq5NS+DJgbZDbKWYGJbGGV0AilTkoHrmMZq0PH4LpDvipTwybtRpwoJ4Pc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aZihkTXk3dIh7xzZVd9rOqw5KvGtAN3JozpZBc9+fhp19XOcNuFZW6TN+i/tEqD1nUX6zWwv9w8+F2smBlHvklSIsMw7EhHeou13Adhbtqf/eJK/9StfNa6EYJmKAqRS7HSNW2JpbrX4a4GQWHRYZ3VcTHRiEuevsZMVj5UZwz8UjYJueeTjQ2wyXeQfRvGhVgObsJIm3EITX5iuWIozl5HjDfKFmrmKpw3ovkj6QAtp1dJrL9cVsYO5kEwkAB1CtR+zCWAMM1uTz9sNOMNfMnVEq7XStW6pNV24YLHqFlpSkguCYGx755HeOhqgJJxbZRdlcg1N7sU2Q3FrlyaaIw== 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=wyZFoJerrKrDS9WZo+9U4tRPcpB4JzhDYnvuS/rYGxQ=; b=kUlthLiLQAVZ8zNT6AIoZo3HMUcu4u7TTpw5JQAG2OzSmNmkpTNJoSkycyVPeYp2N1sIrhMosvXQagcAoZWed1O9BFWeOjyISo68PdVK5X7ublRbYuxx+GEuqn/GKvM8PM1+9lB6DAqWubjzNQoWUPdO9pJVHKmIyjSR0TG2fCoiAxI1Gdh8l5fvftWH7FwrrW+hDB420gNFTTg/5ZzlBdO5iX2bAb6wVrVBr1RXAZHexhel7YpBdl4zq8AytmP7CjfFfNO8UgtNhJBHAINR+spOyg36oPcvmGSIh+msqC0Cwd9o5wFPJri8qtQwNXobNmVssLVR6CLdG3214rLbfQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:17 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:17 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 13/21] dt-bindings: pinctrl: Add starfive,jhb100-per1-pinctrl Date: Tue, 2 Jun 2026 22:53:39 -0700 Message-Id: <20260603055347.66845-14-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: 0154def9-f60b-4f61-278c-08dec1348c53 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: YjNklTE7AOkw5nbeEob3TsuD4ZxtnFDGEKR4opMqVMggel1Qy8VOnMl1GwTv1CRzgneg+SBjQsxIhxAFjWTT21zdaGqn8O8VK5LuHhmTBnwjhO9oVdAV4VgMx2C21fiu3LKvqR5uB3JD+y079yZ6zQUzI03Vl1WFUQX5hKBoUnQBr+0vNZ34S/8BhsrAA7/lnScQbyONmQi5VnkyEt0dUUOp60WxybRlfZbiTYav8SMnHSu28FOFWUKvOi6HyF/mosOV6++rLpTpIZhvy+P7k10S+hKIzQ9fl4xtpC/oJPeDMDi/3LEZnOd+eMFJNKk2TrZB0bC2CwTJUsAjBmmsZpRFvwj1SD3vYU2NlX7qcTD8oLg1K+vXdB99zZk2kkv1foWWgeMIuH7VMDKC/Ok0aSKu/KoWzfuCIsj8rXZiHjV+dSsqK7Svlv9iizaGyPr0S+9fWE58HszTTIGL4MTgv1TuVcYktQkW/QfRHkQ5WK55Zt5s5d/venpHjXdw0ifTAujF8izyqmE/it97e+AsOfe60Um8GHBOG1UuXwqnZ5noliEB417BToVcRHT3nhU8nLqVCgTb3/5evLnfVeMWYw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vUwLIsyxmogfQ8JYzkCRfrfBb4ewldQxQrh8ZzXtu7p8O9HppKe3Ljz7VOvw?= =?us-ascii?Q?NHljB7q4m0ZP22wNGhrxppgLHT1h7XuvgFWxI14qGX4elxNB+e+pX5gO3qCi?= =?us-ascii?Q?wpujkcjbV2AVPcfM0PElWbJyaditImhpVMXYy+3ru5rhdos9MD71hJtlb44B?= =?us-ascii?Q?vcVl9hv8bJ/CHL461uPwAFSxPwxQDICYHcVIYEn2gT4gfVuKIKisib6l60kf?= =?us-ascii?Q?udM8NwdRj5iNk27Z9ytyQLU4PQ1P/JuNf/Yz2GVOcLclt7PCAAyh61q1fbr+?= =?us-ascii?Q?buNLBrcGbXZX/dFlQvMQikTPu3OwJdKi9F0ds9tvoo2nhiE8IzwjSe7vCXJn?= =?us-ascii?Q?KIUH0w2tGlWl+IN7I63AdRJGSD8RDulZPk7WxWIwHNZlZ0rkP0wNuQjhHieV?= =?us-ascii?Q?QGTuk8QH0k2WyyfcWJlFmmzSVz3wbrnpOLJuZ0NFCVDhzccB2MIoTBe5ms4J?= =?us-ascii?Q?WOaBYcX2OabGBI+5Ar0mhKuMeLUoeAj92AA7sHvxnxyirInFlk328beTr5JC?= =?us-ascii?Q?nQcp+6e81Sg0pQfhi+NGpi4ABVdyfmbZ3Mn8LE9y1ThsW6dVb/p1iP9W0Lj8?= =?us-ascii?Q?RXQWF/GnT2I1FvZHNtypPnIgMvUlfWA5KxTRuK8ziyuKwe598eGEco2x7BQ9?= =?us-ascii?Q?KqbQj4DWQo6LYZ7BAx4JEFoBwOAEZibDwg+C8t6JtkeVA/H0oWjAqAsgClgw?= =?us-ascii?Q?xjpVkWxWnVnkeTLCetBivFguxBg+84jSQ8Q2f2Zp/OxFwgv2yI4aMJ2awWhK?= =?us-ascii?Q?+zzuCzomp87CUWdf4fO4tjPOugPVgU+KnjiLBbo1/kjWFadxO5LZMrU+9ABk?= =?us-ascii?Q?IiqVQ5gp0csQcH9fJ9xdwhNx2udCaKy2rENZtnak0fy3y3qFYpOUZTUianY4?= =?us-ascii?Q?xXkJV3I+sBntvsalvptRRqx4wDFV1E6V3RPmhySuFoDIkjaV7XAgPGQQDnl8?= =?us-ascii?Q?3mZ0wSoI7msPV+vJ+/qUyin6F0Vn2GiCLOLV/rI4uV/BL9kvxNZ4TpiWm6/6?= =?us-ascii?Q?+xDUnvY3ICHZDzFr41/1R2UgiigBkpujVpKlyOqqEDjgF3ziMS9xAEWG3ugn?= =?us-ascii?Q?1ZTLTX5OBSCb/aRFYh9ApQ89Uhm5nobzCCo0fp2KR03q5zVxc019gTVTTlMB?= =?us-ascii?Q?SQm4HlMEIhfAS0EGff40NaDJOhswCvJDfKSANHlPFyA4y3DvwRE5e4tz+gdt?= =?us-ascii?Q?gjpo2ar1qnQlsgf3UOEDKkWGXJhHHqCJ5QSCIBhnpbB23+AoSlxXLALaRrvG?= =?us-ascii?Q?UUtMif+AUR4tMuxxs3o6dDkQ1PNgJkOnSmKxMFiVh4nWG3lpmW4j5ys/Xn5k?= =?us-ascii?Q?7x0SRcmtE1bvafcPMm+Ek8nkHmBOrDdkJOkCKvevSxPNHIQG5PCpZzxw7Hbq?= =?us-ascii?Q?ACMNc19t1+GAjzGlvmlB97giicw8VSyoazn7+jZY0e1VjsRg+wqMaBPum+JA?= =?us-ascii?Q?fBqYGFc0/akXQKFhB/js1PPIvTtu6X1Aib5M5pjlM9thZ3j3HNLZ3CCFjN0/?= =?us-ascii?Q?0+DJ2GdZw0X1Y27icVzbYW1V6JW+P2mXoKAyZpdvB9DqZ5WFtFqasQjYcG6Q?= =?us-ascii?Q?C2h2y5aAS0KynO+bPZDCBiX4W6pSocLK4gxu6mjTcJYZSlWpLleWuY9ZMDEI?= =?us-ascii?Q?FOdygRv/55NgSvx6XsBkDGesEdj/YZrRJ8NyQhN9VQFkJ13u0W66AdQZdUqq?= =?us-ascii?Q?G5BeanCmBWhuN9wGiZANLeZprTs9Are98qBdnPnuUzFywJFZSTUHTCJWH7G3?= =?us-ascii?Q?O87tX9uJVqrymUw43vW1ghZzuEHCeIOXXDTobV5IczbcQFR4pAWB?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0154def9-f60b-4f61-278c-08dec1348c53 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:17.0618 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: swmeO0QrckxXbdQ6bnz8TDty8v+AAGigqGKrHO8zqFGzvVO+JhVl+tVAlrNF0AguCJo4CXaiaPlPmw37qBauLm9AwImK/2XlRaoCeFDJM4VX+in2Q7kJafR3lzC2Ux5t X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl bindings for StarFive JHB100 SoC Peripheral-1(per1) pinctrl controller. Signed-off-by: Changhuang Liang --- .../pinctrl/starfive,jhb100-per1-pinctrl.yaml | 178 ++++++++++++++++++ .../pinctrl/starfive,jhb100-pinctrl.h | 38 ++++ 2 files changed, 216 insertions(+) create mode 100644 Documentation/devicetree/bindings/pinctrl/starfive,jhb1= 00-per1-pinctrl.yaml diff --git a/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-per1= -pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-p= er1-pinctrl.yaml new file mode 100644 index 000000000000..a21bcc0a0391 --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-per1-pinctr= l.yaml @@ -0,0 +1,178 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/starfive,jhb100-per1-pinctrl.ya= ml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: StarFive JHB100 Peripheral-1 Pin Controller + +description: | + Pinctrl bindings for JHB100 RISC-V SoC from StarFive Technology Ltd. + + The JHB100 SoC has 13 pinctrl domains - sys0, sys0h, sys1, sys2, per0, p= er1, + per2, per2pok, per3, adc0, adc1, emmc, and vga. + This document provides an overview of the "per1" pinctrl domain. + + The "per1" domain has a pin controller which provides + - function selection for GPIO pads. + - GPIO pad configuration. + - GPIO interrupt handling. + + In the Peripheral-1 Pin Controller, there are 36 multi-function GPIO_PAD= s. + Each of them can be multiplexed to several peripherals through function + selection. Each iopad has a maximum of up to 3 functions - 0, 1, and 2. + Function 0 is the default function which is generally the GPIO function. + Function 1 and 2 are the alternate functions or peripheral signals that + can be routed to the iopad. The function selection can be carried out by + writing the function number to the iopad function select register. + + Each iopad is configurable with parameters such as input-enable, internal + pull-up/pull-down bias, drive strength, schmitt trigger, slew rate, input + debounce nanoseconds, power source and drive type (open-drain or push-pu= ll). + +maintainers: + - Changhuang Liang + +properties: + compatible: + items: + - const: starfive,jhb100-per1-pinctrl + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + resets: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-controller: true + + '#interrupt-cells': + const: 3 + + gpio-controller: true + + '#gpio-cells': + const: 3 + + gpio-ranges: true + + gpio-line-names: true + +patternProperties: + '-grp$': + type: object + additionalProperties: false + patternProperties: + '-pins$': + type: object + description: | + A pinctrl node should contain at least one subnode representing = the + pinctrl groups available in the domain. Each subnode will list t= he + pins it needs, and how they should be configured, with regard to + function selection, bias, input enable/disable, input schmitt + trigger enable/disable, slew-rate, input debounce nanoseconds, + drive-open-drain, drive-push-pull, power-source and drive-streng= th. + allOf: + - $ref: /schemas/pinctrl/pincfg-node.yaml + - $ref: /schemas/pinctrl/pinmux-node.yaml + additionalProperties: false + + properties: + pins: + description: + The list of IOs that properties in the pincfg node apply to. + + function: + description: + A string containing the name of the function to mux for these + pins. + enum: [ gpio, i2c, sfc, sgpio, spi ] + + bias-disable: true + + bias-pull-down: + type: boolean + + bias-pull-up: + oneOf: + - type: boolean + - enum: [ 600, 900, 1200, 2000 ] + description: Pull up RSEL type resistance values (in ohms) + description: + For normal pull up type there is no need to specify a resist= ance + value, hence this can be specified as a boolean property. + For RSEL pull up type a resistance value (in ohms) can be ad= ded. + + drive-open-drain: true + + drive-push-pull: true + + drive-strength: + enum: [ 2, 4, 8, 12 ] + + drive-strength-microamp: + enum: [ 2000, 4000, 8000, 12000 ] + + input-debounce-ns: + minimum: 0 + maximum: 4294967295 + + input-disable: true + + input-enable: true + + input-schmitt-enable: true + + input-schmitt-disable: true + + power-source: + enum: [ 0, 2 ] + description: | + 0: power supply of 3.3V + 2: power supply of 1.8V + + slew-rate: + enum: [ 0, 1 ] + default: 0 + description: | + 0: slow (half frequency) + 1: fast + +required: + - compatible + - reg + - resets + - interrupts + - interrupt-controller + - '#interrupt-cells' + - gpio-controller + - '#gpio-cells' + - gpio-ranges + +additionalProperties: false + +examples: + - | + soc { + #address-cells =3D <2>; + #size-cells =3D <2>; + + pinctrl_per1: pinctrl@11b42000 { + compatible =3D "starfive,jhb100-per1-pinctrl"; + reg =3D <0x0 0x11b42000 0x0 0x800>; + resets =3D <&per1crg 0>; + interrupts =3D <61>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_per1 0 0 0 32>, + <&pinctrl_per1 1 0 32 4>; + }; + }; diff --git a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h b/includ= e/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h index 4fc54b9990d3..54a900a624a3 100644 --- a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h +++ b/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h @@ -139,6 +139,44 @@ #define PADNUM_PER0_GPIO_B58 58 #define PADNUM_PER0_GPIO_B59 59 =20 +/* per1 pad numbers */ +#define PADNUM_PER1_GPIO_C0 0 +#define PADNUM_PER1_GPIO_C1 1 +#define PADNUM_PER1_GPIO_C2 2 +#define PADNUM_PER1_GPIO_C3 3 +#define PADNUM_PER1_GPIO_C4 4 +#define PADNUM_PER1_GPIO_C5 5 +#define PADNUM_PER1_GPIO_C6 6 +#define PADNUM_PER1_GPIO_C7 7 +#define PADNUM_PER1_GPIO_C8 8 +#define PADNUM_PER1_GPIO_C9 9 +#define PADNUM_PER1_GPIO_C10 10 +#define PADNUM_PER1_GPIO_C11 11 +#define PADNUM_PER1_GPIO_C12 12 +#define PADNUM_PER1_GPIO_C13 13 +#define PADNUM_PER1_GPIO_C14 14 +#define PADNUM_PER1_GPIO_C15 15 +#define PADNUM_PER1_GPIO_C16 16 +#define PADNUM_PER1_GPIO_C17 17 +#define PADNUM_PER1_GPIO_C18 18 +#define PADNUM_PER1_GPIO_C19 19 +#define PADNUM_PER1_GPIO_C20 20 +#define PADNUM_PER1_GPIO_C21 21 +#define PADNUM_PER1_GPIO_C22 22 +#define PADNUM_PER1_GPIO_C23 23 +#define PADNUM_PER1_GPIO_C24 24 +#define PADNUM_PER1_GPIO_C25 25 +#define PADNUM_PER1_GPIO_C26 26 +#define PADNUM_PER1_GPIO_C27 27 +#define PADNUM_PER1_GPIO_C28 28 +#define PADNUM_PER1_GPIO_C29 29 +#define PADNUM_PER1_GPIO_C30 30 +#define PADNUM_PER1_GPIO_C31 31 +#define PADNUM_PER1_GPIO_C32 32 +#define PADNUM_PER1_GPIO_C33 33 +#define PADNUM_PER1_GPIO_C34 34 +#define PADNUM_PER1_GPIO_C35 35 + /* power-source value */ #define JHB100_PINVREF_3_3V 0 #define JHB100_PINVREF_2_5V 1 --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2132.outbound.protection.partner.outlook.cn [139.219.17.132]) (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 8A8D53F0AA4; Wed, 3 Jun 2026 05:55:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.132 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466127; cv=fail; b=b3z3GNs6x96q2MP98XlXf4g7qEtrTFpbrv+rw8tZEnEk4RYll2fcaeou1pIz2gZBZTqf8WVBt9/t7tEC25QAnqv7kS75+iwytNv9npVGb86EyQgWwP+2KZ/fiipX2qbgB8Pu7VI60aB45SKavQrUaCo4Dxluo/oSS5DqvhD8Ga4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466127; c=relaxed/simple; bh=lXv5kZahPDlX3u+rfhqPp5YOetqyaI9jksFmVc+82iE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=MVCDhcwBKtrssba730YGOoNUgO09BXGVW1zX08YVAjJ5A6fZ1fkcsCs73HPngRpdZKin8DK6ie1G4TQZLUN2DyBEi79gyVwzyiq6Gx7iaqJ81rFaPsftZdo8OPJi5yI8RnyQJHlbVKjo7pKVnRMIA7yU8qhqLigbRIzUJOXyjGM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.132 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VAmJmeSa4p/aG0ca6wtKOip478CO2VmCA6owNn+XyFHO8NogEijJwCF0Ij+vvooR7QgOw2/FKEIgwvLgENKeSKtdCTuAb8ly/sOAX//ck9iKm9x4F0vaoF2qHFUUcTK0RSIgiIG8fLWjHdkse9HGrGXE7YDEyln6/PNUDMVRjdChJB6QV8rCNRd7icjFY3RK+LFLTzcxbDVp7xEeroBtQRQ14rDfDXEY612d92pfolzWiU2J8f1jz/ms9gP4zg/av0NHnXRHHKLJAnvNTNfYLDIFtgfp/4v52ULROoAcgtiXgVN6mO0I+dY+iYWIv/8IjesfaS6VqlubJmsmxEyLUg== 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=TyYFTWh7ExATN7isVSKq9GzHnrRsc8f3xPIwknMc000=; b=cfiMXImlijtjegt87e9Z3FAWt0VqRDuDvOq5nNhVuljC8j2pBnigUQbW6zo78jRTgdVscPteWFSTVaKryDBPi6JecpBbNoYJSGU2ZXvBATODu4SqSgHWnowPvOMvtXUhkzCekQWm90A9pY0+T0udLuFCkOmCMoie1JM5HTLjOECU+C14x9dyE8Sf+U3xMo0nAYwmkBtW375isLFRsyLKg9Vjc/jJb3SsqUYhMxImLSJ2EBKSiAVAY44Z7u/h4TRqg06tPxFkQUcLXiMbiYnTwe2KlNESdLlz0owus9bNPLgqIMnIgMWMTYR0zkG+0BeOKU7Ge+itUm+VfMAjpwKHcg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:18 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:18 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 14/21] pinctrl: starfive: Add StarFive JHB100 per1 controller driver Date: Tue, 2 Jun 2026 22:53:40 -0700 Message-Id: <20260603055347.66845-15-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: 33820002-94a4-4129-5208-08dec1348d28 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|5023799004|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: 194e/dJJY4fMI7Ju2tsxpNXVmeWQb4zfHFYRvHpcuFX1lz9msNsv4vQUF7R1QRUoZd52dhsZMgxeL4b60tSO6DHamYQX9GZMoyBWyips25N56prsKmaij2xQc8KwJgoO9CHOrUL/bcZY50c2+Nvyy8mXdOHdaDsgeIYYXfWHh0jRiaoTqi+wRWrCzRP/SQ/maG7UWgXCdaYB2GnL7QANtuoEXy0aMgXegZqK0uhKkN++lIgSedr5CURBvHjQCkVZyrTYzZOF3IOZdhY+y9WIkSyYdq8T1ow+x1+fWS8sBdtgJbhX7xxbR2qCRdWLzrF97+pAEoEjpKThOtrFCAgWWRgdwcfiaRR5SlgdvyWjhlZohbW1blPgZAL3omKq6SlY+upN1FLAQjVkfm3CeKOTPWcy2tiVjZecy3zYmngVFculd/rnzvMXQB17GXb9La4vRu8uamVEsfwVbUWovJ6GK9jz9EiWt165ooPfWdmVs57wa2eM9UWzeISrudzjMf3v5Anj6dLltUaQTYX6B2fjqYiwUbi6Wb92vb3gQIv5r5qzzAIToN1yY2fGfowcmHSa2p1bkT8k9FLDVuP5yKaOnw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(5023799004)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ZL4dwH1yFs5Oyn6NxaKUDCtuIuDfCeY1PFgyMTTd2yAOmS8gfVPU9FSt5SZk?= =?us-ascii?Q?/781gcallRI93RhLTxaV2W9CJL5xZEGJkrVUXGsJPTfaLWQrGu0XHNM467wh?= =?us-ascii?Q?Yv2Wd7IzwwaKxiaf30G+odL75vZ/bvFCD8+vt5wKzNNoIyHyoDr9vh+Et+yB?= =?us-ascii?Q?mX0gDmiDXLJPDsAoNmOyArRhurPrQbWjLvVT/86xE6KCgZJJbZ6kUJrqvj+o?= =?us-ascii?Q?Air8R6YB2h32qUMs/dNl58yJcV+Lsst7GcJ60J9Z+UPiubw9MZNp191bZXps?= =?us-ascii?Q?O2oHuUvztoha4GNW9h540F793yFzJlJHCjzYrSs34/PF6Om/pb2TkHNBPB3+?= =?us-ascii?Q?VA+4sKZu3ioRm1JV52+EuXIOGnFOTFi0IpmIBZkTldUFqQsRHrRa/TEYx3qW?= =?us-ascii?Q?rQS2XK3Qnq0WaW2JsatO320wUBq7dpeZ/SCiV4jY0puDQeV3kTQtkSTRwTOo?= =?us-ascii?Q?t2A4g/ES6YID+nmYje8x4ng04TzlqlrT5F1bXxIKj6rOFMoIaD5beGzXpDX5?= =?us-ascii?Q?iUT9ope0szaiJJSmHQQE3d9QgTw08XX8C6XL40jFqf4qKn0PdlbBVeT+0Nxl?= =?us-ascii?Q?j+9Ebyyy4A5ku3fxrgNW2uJTEgAOwNvAufZMTBv9gzRXjzsyJIDLFsKNV+Yq?= =?us-ascii?Q?48uZ0pMbatqBNGZZb/HgVgRpAd4B1E+ZiXYfwzkOrd4ajF0YotRZRsq5sdT/?= =?us-ascii?Q?eS6X6QSk/CX3q2lUsgGHvMOfT1OrGR78jhjST35Sr3vIwx+lGIg0EWWUOjnE?= =?us-ascii?Q?TQyBa7wKehvmeMTJ1Q5ODiIkjtHjZuXke/5mxbemMjWkuUycnysH0/gmHnn5?= =?us-ascii?Q?yaMHiH9lHIo2ggCrfAzIBdx7cIPsiCY8MNZPM1TEXKO/Vkp3LdjyYL7l3a2X?= =?us-ascii?Q?xcva66jT5xfDgq7lnIBS+JNNzLAwCAb9sBlnRvN1T4R5qiJ7gOuq7tTxCeHw?= =?us-ascii?Q?kZboaMlvnM4jC18OndfvY/A3gwHpzBpJz98utxUUQuYVoDE4CWuHN+NJmwnu?= =?us-ascii?Q?TNZ4hWuTFQUaMx06YUVaNQ9E1Cnr3kCEAoTRg6H9Ca+6dXt7mYpXMm0cunJu?= =?us-ascii?Q?tJ9KbbwQaGgDKqirDQV15b0fmUq/1FRQjrf6s2ijUVK/gkoonDcSGKZebc9C?= =?us-ascii?Q?QHL4kXLojSyR9og28uCkE4/vRsG+N5hjDVYlx5YLfeMuh6hRguO0fkZd8S7P?= =?us-ascii?Q?Pr0bKvlGoOih1LdUCBI9Oq2+2k9SoVVtRpXi0GVlBhrmBUJHmEjVyi/runju?= =?us-ascii?Q?ZoyYsX+YzK9OYTo+AaGIu1yEAM4Ozg3rIN+/n8jyMfSkaVC8pjUNgq7s3880?= =?us-ascii?Q?kB62aJD5BMdyerGBmaFcrxSSFR8ReASwcdoqpWuYcX913r5GOGZF02CAAGV5?= =?us-ascii?Q?00DaQ8eepj/vubzbrgiN+kD+3Ox6aMMzyzcnoc9mB/do+ZUoztIm7cTZsy5h?= =?us-ascii?Q?GRzi5AXj4mdz4IBJeUluUJBXwoCmF942OfkvIni1umDLrp9Sr6FJ+LPSo25B?= =?us-ascii?Q?KNxkfrImH4HSBYnHR3M6HZo/TVEpXpDY38j5/F+y/wvG/wNlBNNLytu44Zg5?= =?us-ascii?Q?odj93SD+sXBFj5OehbN4bpuQZGqBBeWx0ozaXDrb4DlVbs7g6oYKKr6uRINm?= =?us-ascii?Q?7rRAXw/yZNKNXRZq9CqqwY7KlovG5Kghhz9PHrRUjqQwccaAz8EfSfT8/j3P?= =?us-ascii?Q?i2dXLhI54+1ixt4lZdw/gyy+NLbQrwF4fSW0TnnLNEw1rWyrQstvpXIhbkpJ?= =?us-ascii?Q?i2eVPEYjiPS7Y4HL5WeTENyvX/npa0ovTVHCimQkbZfOpy2mrXMy?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 33820002-94a4-4129-5208-08dec1348d28 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:18.4590 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: mzgR7IsjAleHLBWWcyT/yvfFhteKk2iW61Gd4hDoYx/yisB4HTxbKalkrJr/+I77V8WgZvpz3ASX5qCsG2bV9eTCJXDqV3Dh7UN4pLn4WbZAiRdrp3a3reawxbZ55yTI X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl driver for StarFive JHB100 SoC Peripheral-1(per1) pinctrl controller. Co-developed-by: Lianfeng Ouyang Signed-off-by: Lianfeng Ouyang Signed-off-by: Changhuang Liang --- drivers/pinctrl/starfive/Kconfig | 12 ++ drivers/pinctrl/starfive/Makefile | 1 + .../starfive/pinctrl-starfive-jhb100-per1.c | 165 ++++++++++++++++++ 3 files changed, 178 insertions(+) create mode 100644 drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per1.c diff --git a/drivers/pinctrl/starfive/Kconfig b/drivers/pinctrl/starfive/Kc= onfig index 1e1bfdf87c31..c3889a152f6c 100644 --- a/drivers/pinctrl/starfive/Kconfig +++ b/drivers/pinctrl/starfive/Kconfig @@ -67,6 +67,18 @@ config PINCTRL_STARFIVE_JHB100_PER0 peripherals supporting inputs, outputs, configuring pull-up/pull-down and interrupts on input changes. =20 +config PINCTRL_STARFIVE_JHB100_PER1 + tristate "StarFive JHB100 SoC Peripheral-1 pinctrl and GPIO driver" + depends on ARCH_STARFIVE || COMPILE_TEST + depends on OF + select PINCTRL_STARFIVE_JHB100 + default ARCH_STARFIVE + help + Say yes here to support Peripheral-1 pin control on the StarFive JHB100= SoC. + This also provides an interface to the GPIO pins not used by other + peripherals supporting inputs, outputs, configuring pull-up/pull-down + and interrupts on input changes. + config PINCTRL_STARFIVE_JHB100_SYS0 tristate "StarFive JHB100 SoC System-0 pinctrl and GPIO driver" depends on ARCH_STARFIVE || COMPILE_TEST diff --git a/drivers/pinctrl/starfive/Makefile b/drivers/pinctrl/starfive/M= akefile index f2bb0c35a2a0..6beef7e313ef 100644 --- a/drivers/pinctrl/starfive/Makefile +++ b/drivers/pinctrl/starfive/Makefile @@ -8,6 +8,7 @@ obj-$(CONFIG_PINCTRL_STARFIVE_JH7110_AON) +=3D pinctrl-star= five-jh7110-aon.o =20 obj-$(CONFIG_PINCTRL_STARFIVE_JHB100) +=3D pinctrl-starfive-jhb100.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER0) +=3D pinctrl-starfive-jhb100-pe= r0.o +obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER1) +=3D pinctrl-starfive-jhb100-pe= r1.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0) +=3D pinctrl-starfive-jhb100-sy= s0.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0H) +=3D pinctrl-starfive-jhb100-s= ys0h.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS1) +=3D pinctrl-starfive-jhb100-sy= s1.o diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per1.c b/driv= ers/pinctrl/starfive/pinctrl-starfive-jhb100-per1.c new file mode 100644 index 000000000000..26cc48313263 --- /dev/null +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per1.c @@ -0,0 +1,165 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Pinctrl / GPIO driver for StarFive JHB100 SoC Peripheral-1 domain + * + * Copyright (C) 2024 StarFive Technology Co., Ltd. + * Author: Alex Soo + * + */ + +#include +#include +#include + +#include "pinctrl-starfive-jhb100.h" + +static const struct jhb100_pin_layout_desc jhb100_per1_pl_desc[] =3D { + { .pin_start =3D 0, .pin_cnt =3D 36, .name =3D "gpio", .gpio_func_sel =3D= 0 }, + { 0xff }, +}; + +static struct config_reg_layout_desc jhb100_per1_pinctr_rldesc[] =3D { + { + .pin_start =3D 0, + .pin_cnt =3D 32, + .drive_strength_2bit =3D { .shift =3D 0, .width =3D 2 }, + .input_enable =3D { .shift =3D 2, .width =3D 1 }, + .pull_down =3D { .shift =3D 3, .width =3D 1 }, + .pull_up =3D { .shift =3D 4, .width =3D 1 }, + .slew_rate =3D { .shift =3D 5, .width =3D 1 }, + .schmitt_trigger_select =3D { .shift =3D 6, .width =3D 1 }, + .reserved =3D { .shift =3D 7, .width =3D 8 }, + .debounce_width =3D { .shift =3D 15, .width =3D 17 }, + }, + { + .pin_start =3D 32, + .pin_cnt =3D 4, + .input_enable =3D { .shift =3D 0, .width =3D 1 }, + .mode_select =3D { .shift =3D 1, .width =3D 2 }, + .pull_down =3D { .shift =3D 3, .width =3D 1 }, + .pull_up =3D { .shift =3D 4, .width =3D 1 }, + .open_drain_pull_up_sel =3D { .shift =3D 5, .width =3D 2 }, + .schmitt_trigger_select =3D { .shift =3D 7, .width =3D 1 }, + .reserved =3D { .shift =3D 8, .width =3D 7 }, + .debounce_width =3D { .shift =3D 15, .width =3D 17 }, + }, + { 0xff }, +}; + +static const struct pinvref_desc pinvref_desc_per1[] =3D { + { + /* gpioe-spi */ + .pin_grp =3D { + PADNUM_PER1_GPIO_C0, + PADNUM_PER1_GPIO_C1, + PADNUM_PER1_GPIO_C2, + PADNUM_PER1_GPIO_C3, + PADNUM_PER1_GPIO_C4 + }, + .num_pins =3D 5, + .range =3D BIT(JHB100_PINVREF_1_8V) | BIT(JHB100_PINVREF_3_3V) + }, + { + /* gpioe-qspi0 */ + .pin_grp =3D { + PADNUM_PER1_GPIO_C5, + PADNUM_PER1_GPIO_C6, + PADNUM_PER1_GPIO_C7, + PADNUM_PER1_GPIO_C8, + PADNUM_PER1_GPIO_C9, + PADNUM_PER1_GPIO_C10, + PADNUM_PER1_GPIO_C11 + }, + .num_pins =3D 7, + .range =3D BIT(JHB100_PINVREF_1_8V) | BIT(JHB100_PINVREF_3_3V) + }, + { + /* gpioe-qspi1 */ + .pin_grp =3D { + PADNUM_PER1_GPIO_C12, + PADNUM_PER1_GPIO_C13, + PADNUM_PER1_GPIO_C14, + PADNUM_PER1_GPIO_C15, + PADNUM_PER1_GPIO_C16, + PADNUM_PER1_GPIO_C17, + PADNUM_PER1_GPIO_C18, + PADNUM_PER1_GPIO_C19 + }, + .num_pins =3D 8, + .range =3D BIT(JHB100_PINVREF_1_8V) | BIT(JHB100_PINVREF_3_3V) + }, + { + /* gpioe-qspi2 */ + .pin_grp =3D { + PADNUM_PER1_GPIO_C20, + PADNUM_PER1_GPIO_C21, + PADNUM_PER1_GPIO_C22, + PADNUM_PER1_GPIO_C23, + PADNUM_PER1_GPIO_C24, + PADNUM_PER1_GPIO_C25, + PADNUM_PER1_GPIO_C26, + PADNUM_PER1_GPIO_C27 + }, + .num_pins =3D 8, + .range =3D BIT(JHB100_PINVREF_1_8V) | BIT(JHB100_PINVREF_3_3V) + }, +}; + +struct starfive_pinctrl_regs jhb100_per1_pinctrl_regs =3D { + .vref =3D { .reg =3D 0x00, .pv_desc =3D pinvref_desc_per1, + .num_pv =3D ARRAY_SIZE(pinvref_desc_per1) }, + .func_sel =3D { .reg =3D 0xbc, .width_per_pin =3D 2 }, + .config =3D 0x14, + .output =3D 0xa4, + .output_en =3D 0xac, + .gpio_status =3D 0xb4, + .irq_en =3D 0xc8, + .irq_status =3D 0xd0, + .irq_clr =3D 0xd8, + .irq_trigger =3D 0xe0, + .irq_level =3D 0xe8, + .irq_both_edge =3D 0xf0, + .irq_edge =3D 0xf8, +}; + +static const struct jhb100_pinctrl_func_maps jhb100_func_maps_per1[] =3D { + { .func =3D "gpio", .val =3D 0 }, + { .func =3D "i2c", .val =3D 1 }, + { .func =3D "sfc", .val =3D 1 }, + { .func =3D "sgpio", .val =3D 1, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_PER1_GPIO_C31) }, + { .func =3D "sgpio", .val =3D 2, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_PER1_GPIO_C35) }, + { .func =3D "spi", .val =3D 1 }, +}; + +static const struct jhb100_pinctrl_domain_info jhb100_per1_pinctrl_info = =3D { + .name =3D "jhb100-per1", + .pl_desc =3D jhb100_per1_pl_desc, + .crl_desc =3D jhb100_per1_pinctr_rldesc, + .regs =3D &jhb100_per1_pinctrl_regs, + .fmaps =3D jhb100_func_maps_per1, + .num_maps =3D ARRAY_SIZE(jhb100_func_maps_per1), +}; + +static const struct of_device_id jhb100_per1_pinctrl_of_match[] =3D { + { + .compatible =3D "starfive,jhb100-per1-pinctrl", + .data =3D &jhb100_per1_pinctrl_info, + }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, jhb100_per1_pinctrl_of_match); + +static struct platform_driver jhb100_per1_pinctrl_driver =3D { + .probe =3D jhb100_pinctrl_probe, + .driver =3D { + .name =3D "starfive-jhb100-per1-pinctrl", + .of_match_table =3D jhb100_per1_pinctrl_of_match, + }, +}; +module_platform_driver(jhb100_per1_pinctrl_driver); + +MODULE_DESCRIPTION("Pinctrl driver for StarFive JHB100 SoC Peripheral-1 do= main"); +MODULE_AUTHOR("Alex Soo "); +MODULE_LICENSE("GPL"); --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2097.outbound.protection.partner.outlook.cn [139.219.17.97]) (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 76DEA3FC5C3; Wed, 3 Jun 2026 05:55:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.97 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466128; cv=fail; b=tYN804Hbksj5D/dcpH1xLFJeWsK0bObhq32kQgMZ13cMOVkXMcz6h/481TUQF6zvMItiROP54Ga+Xg0x9RgpAb5+blUgPGkt3UY+n9W7Wy1rSjd+Tr+dQ1RJQiimATIhHCVhG6eo45cOMiKf5QxpQzHHjlzzHqXHLL9Bd8c8/z4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466128; c=relaxed/simple; bh=BHONs4zeEMXGWdfm99IcyrfNFNEGCFmy1yHlWuWsNm4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=rBtC4ipzilJyXHnwpPLZWfQ+z4mTJpTZ7DknBqtkBhiC7asQBmVGDZNc8W8rE7tH6fTPlHSPSBxzV45kPvRyjdcIr16qknDg8nPDzJYCrPAOUp3ydF73E+IGPQRj/A4NzFcWAeQAGqmDIYNQ+Fuz5xFHHCeCzm4lxGDmKADXUaE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ckGOPviga1KucjwWtmPc3eO957QKzdevSoji8LIyyXGbSCBey3HrGv0CYV/6tenpdTDMImBsxxPNUakctBkjGuclHix9dwO+S0acppSMAk/V0cJ4Strpq53v3Mu7AR3X8UVjHcgS5aj5cC2G4Zo98WWccUwPXsrGx2CzT9C/pGhDgpZLnk5bAUmJ3ndTJBoFf6RfDJNlCOwuQEYPCUTl91Ky19J/O5xaK/Ne05dQxJS4KiVh3RHKC7NwRtCoV63uKj6Wa22oY2A9XNOW9t+WIQ8ftD8KQ2ijjcSlut7+Gyxc1PR7keDyv57XjHaQ/X9FX00QFtca2CJ5vonCzf3h1Q== 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=M8d4TMqcNnZTwPRQd2w17PuYdpDhDe7yi18uI+A9RhI=; b=ca0xZdPb5gX/M8AB9dwuk8OlIRSv8ODNSa+mqZilep6MHew735QZ4dnFMUxE0ZynC9kvfGQeSkK/qN1t6T0DIgGkz7iYTU1kOD7lFGOwBSMgDdmrYgGY3dgXl46VfosV4xbqTlN6b0QK4SKYL7UE125cR2nssssRqQBZx/XhnPegMIAKWaixb+NnXh+u6kB5Rw+hKZmCnTtUzTk+KJFLQ57ZSpZTpxgOr9bA7pmVdhntQMSU3Z441KYfLum6fMLQxP51VFIFPGidu8+SCugi8WTI3qdCh3Y8d4tAtYwbDAnd9sLdBX89//fN/0N8rVzoM2qmN7rO9QAyQ8of6+2DCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:19 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:19 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 15/21] dt-bindings: pinctrl: Add starfive,jhb100-per2-pinctrl Date: Tue, 2 Jun 2026 22:53:41 -0700 Message-Id: <20260603055347.66845-16-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: 230824e5-4440-49af-270e-08dec1348de7 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: Pfj90NLPNZR3UR/jwjxPkO44iG3Ysvm1tCedVZmRtFcPxSktumHpBITofNe8MP3mYsvdFKurCnBC6OcnCUPFXtw3tZsw2jCz9JFQd6fxjFSS31hzqFpCM/x2ZtwJP++V7diSAvzKtN4P1HF0bu9smISKARn3EEcrybW3JEF/1IefEunHOnVqyCwOjnlii8W/yQYVB4psnLhxv4zWgKG75656mdTcdNAdx5vZWRWekxd/ZdWi/xh8mqmqex1uAqdkSIizWR8AyHvyz8+y5QOaz/AmI3HEuH+qYxR++NWSv0oyq2TNNZnWSWLpdI2DnJi84LGaZ/uI9BYlbqchRL9EUfvL9wY4h3DEM+P1eH/tMMqJP++T/rqsUcuLttpmdPbC2wGkFnxRkWvYg5qOmxQyzJiz+ZG/kH2JIDuaLJvoHLdtde/huMn1TRifwmBkEZ1xV1BUH/vQG7iZqu6Kp4AKY+Asl992HlsmDV6PI3FGg2jmi+3G+zrPRucZ8xCTk/xceFFf5ANJz4JFSul/Yyjlyan3i3mERBee4SIoqXjICYJCVLlsADUAIMNPlfv+e+jj2k372d+TQgeEWBXm/pFxUA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?DidMvTyxlg8oF2ZmhUq+Z70pTrA81WQLO9SE1JIANP3gZVbaDr+kAnUjcu+y?= =?us-ascii?Q?dKsjiCWDd5u/Rx/NHzWi0gQ5+r3Yj3G1aIOT+pTj2gmT/Kio6h48ut2rdq5A?= =?us-ascii?Q?ZUk0ISypgy+J/NiyOwNgz+RlP+/lh4TmgmxA6G8WJYeIDufUnCWrQlaw6GXu?= =?us-ascii?Q?dYpPHbeZ7McThjazjG1Vf/dlUEjVHNqJpz/jJBq5tUAej7/2PxlwSCeKx7Fn?= =?us-ascii?Q?+nqOrD9s0V0kNRa9FIPrReG8L9V+bhyD6FxIgyy5TNvnagsfaWXNIpQhqL1a?= =?us-ascii?Q?Mp3fksxVvi0VfIBaThyTX1BPhcuk6y7kSE0d+dldUCnYHJZ8gsd7c7f0pkdP?= =?us-ascii?Q?PeqUumrY5lOOCiqntURer/BmBQNCGcxyhl4flFd2WoeHbGXWxnHpNUsnOIcr?= =?us-ascii?Q?1cvo9ThyyQOeStD47/ETkhLpB7sU8b+8rH/AFgTPQm2X9KQkASpngYDQO8pP?= =?us-ascii?Q?grCCpVR8+q4ypBLyRgNTL9AsHB6ASqkaTC+Mt5hWXXThOIGHPStVEItxP0VR?= =?us-ascii?Q?qMgGUop/8PosAydx4K/LsKNfAw2JOaJuW1zsNb8R2xfOmUtMfE0Bph1rKrmq?= =?us-ascii?Q?UM4v9Mpl6m2/XDTiLjYua23z63LlXwvmvU+NNol/VasWKa/VZvWVY73yz5tC?= =?us-ascii?Q?p6QjQwJVC358TZVXB99lCkl8tzI3NI772a9+sqkphk6OW44Gzi6D99tsXWTO?= =?us-ascii?Q?eXyYbZ9Cv5TSIuscqnY7lSxipam/18pRYkQPds7u4IBsx/HvvzdMbQupRC0r?= =?us-ascii?Q?k5eQs4PGqn55Kdq7AH/j7QRunCbRRhGE1w6wIZxpjXpneZkdnSc4uFaTlKPO?= =?us-ascii?Q?+TrNjFUV81jr1tyFEKNCNOk/sLtHYP1RXor27tF5heGWfiw2NYcrjH6svulQ?= =?us-ascii?Q?6HlpT/BIqkUvlcpouR9AmH6xHZWy/8xE+rkeA8ZfRIloBQpKy6M3a265FRuR?= =?us-ascii?Q?HW0t8zvCHL5WD4ZV7xNA5xMMLR7USoAvmXbtITjDmhX5opzgBQWIfFGXQCeQ?= =?us-ascii?Q?+IjzIYk95gWDVxhiRvkQgzXyXVZlDHYN+ueQr+XibqJ2y6rz3CBGeVi3uVK0?= =?us-ascii?Q?ivK6IoZk+Nr0jCfLmKqfcY5MF6/4G3klDuWIihoo4+morPpTlkmlbtgFtR5Z?= =?us-ascii?Q?gximAKw4+4PS+4m8Ce1hil7nVitJruKEpK12cmXyVnmhxnJY+9JbdGWPfb1Q?= =?us-ascii?Q?C2qBvHodJHN6OlDADDCR4nPctQulba8uFcIENQD0/rFHb+m3rafvJFopJycC?= =?us-ascii?Q?+cla0SRi/HjQxq+7ppqBA19HWuy6SLEwDMIHZ+37jyV1wizyseHEYPFCP2Wl?= =?us-ascii?Q?VpGc7o9DzbonasXJDHJ4hhptBclRM/rFi+iWAb78qd8s/rDZ2B98+U+b5Ztm?= =?us-ascii?Q?O3G1epJ4noyUgcyrsdoTGX0YGk2y+dzrstVoI6OsLyzXxzuNuKB5zazVK24b?= =?us-ascii?Q?iRCfbnIE3LuxCkhFP7hNz2gdfPcXLuKAiad9EGHx/S+v9XutR8Zdh0stYgok?= =?us-ascii?Q?aCxK6X3AtFnzHTy1Ble7/nnfXI3bSVIGLCWFsuc6QksX6j1Fqxirhglhw5a+?= =?us-ascii?Q?rmv449OBqznN8lPhIowvX6rjt0ANjQD9sSPq5OiC+kn0qa/Yc3/AcjDeHnUs?= =?us-ascii?Q?/VOYQqH8tFEK4KR6fjTdG4ckHXgmVAvCurmBl+VyjbKj2tz6c3eACmVAue8G?= =?us-ascii?Q?wxGNJI1VxJ2DIsZpAz+UOrQpDXwxZ10Sw5vyUXareqKE1uLuZx3X/7fGv0dC?= =?us-ascii?Q?umnSKXPThlBdNlT2WfxNzyrAy3k6xJ/cWoSpucIg1ZHrtCW/werX?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 230824e5-4440-49af-270e-08dec1348de7 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:19.7147 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: LcmIHYnzxGyApq12JHypRDnUmgsgyHwx4b0baLyY06IkfRhAfqoA23WWr3zblFi2pAHmdFJHlHsWaMQabDdvUZdMrrvBxDJ8v/1xF00GPVi0lmTCEN83CtGv/TRwckNc X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl bindings for StarFive JHB100 SoC Peripheral-2(per2) pinctrl controller. Signed-off-by: Changhuang Liang --- .../pinctrl/starfive,jhb100-per2-pinctrl.yaml | 168 ++++++++++++++++++ .../pinctrl/starfive,jhb100-pinctrl.h | 33 ++++ 2 files changed, 201 insertions(+) create mode 100644 Documentation/devicetree/bindings/pinctrl/starfive,jhb1= 00-per2-pinctrl.yaml diff --git a/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-per2= -pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-p= er2-pinctrl.yaml new file mode 100644 index 000000000000..c6d88b6a60e2 --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-per2-pinctr= l.yaml @@ -0,0 +1,168 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/starfive,jhb100-per2-pinctrl.ya= ml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: StarFive JHB100 Peripheral-2 Pin Controller + +description: | + Pinctrl bindings for JHB100 RISC-V SoC from StarFive Technology Ltd. + + The JHB100 SoC has 13 pinctrl domains - sys0, sys0h, sys1, sys2, per0, p= er1, + per2, per2pok, per3, adc0, adc1, emmc, and vga. + This document provides an overview of the "per2" pinctrl domain. + + The "per2" domain has a pin controller which provides + - function selection for GPIO pads. + - GPIO pad configuration. + - GPIO interrupt handling. + + In the Peripheral-2 Pin Controller, there are 31 multi-function GPIO_PAD= s. + Each of them can be multiplexed to several peripherals through function + selection. Each iopad has a maximum of up to 4 functions - 0, 1, 2, and = 3. + Function 0 is the default function which is generally the GPIO function. + Function 1, 2, and 3 are the alternate functions or peripheral signals + that can be routed to an iopad. The function selection can be carried + out by writing the function number to the iopad function select register. + + Each iopad is configurable with parameters such as input-enable, internal + pull-up/pull-down bias, drive strength, schmitt trigger, slew rate, input + debounce nanoseconds, power source. + +maintainers: + - Changhuang Liang + +properties: + compatible: + items: + - const: starfive,jhb100-per2-pinctrl + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + resets: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-controller: true + + '#interrupt-cells': + const: 3 + + gpio-controller: true + + '#gpio-cells': + const: 3 + + gpio-ranges: true + + gpio-line-names: true + +patternProperties: + '-grp$': + type: object + additionalProperties: false + patternProperties: + '-pins$': + type: object + description: | + A pinctrl node should contain at least one subnode representing = the + pinctrl groups available in the domain. Each subnode will list t= he + pins it needs, and how they should be configured, with regard to + function selection, bias, input enable/disable, input schmitt + trigger enable/disable, slew-rate, input debounce nanoseconds, + power-source and drive-strength. + allOf: + - $ref: /schemas/pinctrl/pincfg-node.yaml + - $ref: /schemas/pinctrl/pinmux-node.yaml + additionalProperties: false + + properties: + pins: + description: + The list of IOs that properties in the pincfg node apply to. + + function: + description: + A string containing the name of the function to mux for these + pins. + enum: [ fan_tach, gmac_rgmii, gmac_rmii, gpio, host0_port80, + host1_port80 ] + + bias-disable: true + + bias-pull-down: + type: boolean + + bias-pull-up: + type: boolean + + drive-strength: + enum: [ 2, 4, 8, 12 ] + + drive-strength-microamp: + enum: [ 2000, 4000, 8000, 12000 ] + + input-debounce-ns: + minimum: 0 + maximum: 4294967295 + + input-disable: true + + input-enable: true + + input-schmitt-enable: true + + input-schmitt-disable: true + + power-source: + enum: [ 0, 1, 2 ] + description: | + 0: power supply of 3.3V + 1: power supply of 2.5V + 2: power supply of 1.8V + + slew-rate: + enum: [ 0, 1 ] + default: 0 + description: | + 0: slow (half frequency) + 1: fast + +required: + - compatible + - reg + - resets + - interrupts + - interrupt-controller + - '#interrupt-cells' + - gpio-controller + - '#gpio-cells' + - gpio-ranges + +additionalProperties: false + +examples: + - | + soc { + #address-cells =3D <2>; + #size-cells =3D <2>; + + pinctrl_per2: pinctrl@11bc2000 { + compatible =3D "starfive,jhb100-per2-pinctrl"; + reg =3D <0x0 0x11bc2000 0x0 0x400>; + resets =3D <&per2crg 0>; + interrupts =3D <62>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_per2 0 0 0 31>; + }; + }; diff --git a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h b/includ= e/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h index 54a900a624a3..7aeebcf72b8f 100644 --- a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h +++ b/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h @@ -177,6 +177,39 @@ #define PADNUM_PER1_GPIO_C34 34 #define PADNUM_PER1_GPIO_C35 35 =20 +/* per2 pad numbers */ +#define PADNUM_PER2_GPIO_D0 0 +#define PADNUM_PER2_GPIO_D1 1 +#define PADNUM_PER2_GPIO_D2 2 +#define PADNUM_PER2_GPIO_D3 3 +#define PADNUM_PER2_GPIO_D4 4 +#define PADNUM_PER2_GPIO_D5 5 +#define PADNUM_PER2_GPIO_D6 6 +#define PADNUM_PER2_GPIO_D7 7 +#define PADNUM_PER2_GPIO_D8 8 +#define PADNUM_PER2_GPIO_D9 9 +#define PADNUM_PER2_GPIO_D10 10 +#define PADNUM_PER2_GPIO_D11 11 +#define PADNUM_PER2_GPIO_D12 12 +#define PADNUM_PER2_GPIO_D13 13 +#define PADNUM_PER2_GPIO_D14 14 +#define PADNUM_PER2_GPIO_D15 15 +#define PADNUM_PER2_GPIO_D16 16 +#define PADNUM_PER2_GPIO_D17 17 +#define PADNUM_PER2_GPIO_D18 18 +#define PADNUM_PER2_GPIO_D19 19 +#define PADNUM_PER2_GPIO_D20 20 +#define PADNUM_PER2_GPIO_D21 21 +#define PADNUM_PER2_GPIO_D22 22 +#define PADNUM_PER2_GPIO_D23 23 +#define PADNUM_PER2_GPIO_D24 24 +#define PADNUM_PER2_GPIO_D25 25 +#define PADNUM_PER2_GPIO_D26 26 +#define PADNUM_PER2_GPIO_D27 27 +#define PADNUM_PER2_GPIO_D28 28 +#define PADNUM_PER2_GPIO_D29 29 +#define PADNUM_PER2_GPIO_D30 30 + /* power-source value */ #define JHB100_PINVREF_3_3V 0 #define JHB100_PINVREF_2_5V 1 --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2132.outbound.protection.partner.outlook.cn [139.219.17.132]) (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 6BC613FCB3D; Wed, 3 Jun 2026 05:55:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.132 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466129; cv=fail; b=tSG873viEyjaPdVbCHtedqM0hgMbjF6ELpnGua7yn+m8nG0naBtio1ftlkSEnUFdTAZgPWTWh4s+wNdvXUEDfyLwK4JyGwdL37v/rD9kRlZp2bKAuzHxLrdh98SKAsTy1iv3NhG3SV+SUEirmt1vKHnm8io5cF4+JAdlK8I6xZo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466129; c=relaxed/simple; bh=vDBIKXBexp50pw+lT9JHebPVIXZ9MqSfrDnhB7clpNM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=o3A7AFEdPNH+EUDUu2hiXawcikqw9bVya/aN+nAtA0Ui71ib+tUdvr2kwWrE0D6cVRLT5LqJ5mhk8L23axaKHvDrJaORoiT1AH9k2iRmE0yzIyd2CTm1ue/FEjtB1uYtHoPE8ybT3x5iLqg9OmUnKygywqx5SuVC6V1mN+/JG4s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.132 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q6q57KN3EfIh/GTAV0R52/FAOEkZUdDTyZ6L+rRog1thM8is57KuEgQaR/2jj8iTyD1f8BywJ+OWHuyztAuz7ATlBH7YSn1goV8wOPJ0ycHeAXLDBAPwlFTXQQGL/YVsNmhVNWmNZfLFOOLuZ5Do3EVY/ojgZfIroQ0ZecMcg7gDECU1+8mXD7KeZjODRgtP+hOKpZaQSjR77PnmjJIt0b33RKBMS5e54d0xK8kZVZw1pXfxj/9+/cUSBStHENgnnvcwLNB4R6CIhExZHGIiptUJGoEeG/PzEylbMp5UCO2UJodMvisPw4ooC87Vl/8P00e4nRnB2UtdrMrM8r/Epg== 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=Zed9DjaRSx9SmkjAvCxa8sKpY4JDfS4fURVwArDq5JE=; b=NiWNZ3YyfzbSrLh3AymrtBcqpSazro2g9/WyFq17CkqDcvqOFhoXwvS/06+FdPiZPTiNmLf6L7Xak9vPiO+dRvQF7k17HlglqMPnWcS84/IQDYE9Umi8bj/EQnPjsHyFJxXsKxtiJEwUQ7u+VkkdqH/J0TSgbkeKoJ3/vFUoNm6T4pbivvAw2yHTa16sVOLDtL7PZmtc61MMulGqtP09Ppmvhwn1Eu7czI2GVgiqUWPJA8S2wZfOVugMg24eEmf34jFeQj/2zT27/FpgwcMxg/SJM7BAAg3K1+l44kGPmWiEvK3UJG369A5tms167Tcn9lLvZwvSWo/jHxN1bfR4ww== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1153.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:13::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:21 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:21 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 16/21] pinctrl: starfive: Add StarFive JHB100 per2 controller driver Date: Tue, 2 Jun 2026 22:53:42 -0700 Message-Id: <20260603055347.66845-17-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1153:EE_ X-MS-Office365-Filtering-Correlation-Id: bd76e081-47db-4da2-7e33-08dec1348ea7 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|5023799004|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: 97qc1wL20nRLFnmbgsnHy2+n1yhsqyPfZMIkfJydLPt7Z6eBAfkEO5MWSiHGrdPt0+xDeDEb/Zdw30ER58ojvp6Jv38Oud9mRu+NIs9lV9vziR9EpuU57/pN8Uv7LUegB+9oJ+9IxEsskssJsa8XVbXjl7tF3dpsZ7Cto8/8QNy26Ne4yU33aRtYa+RfW7UHjEH8BX6j/BE/iHPSEO0F/AmaPRC+VlQ8qa7hnGwdt8pQWb7Xax/T/GISz59jHanq1+alZS4moHzTVmBfV+rNc+XWf3rTv93bcziOeX8bx39N5M9U5Ctm67TVvnMIglE5xD4tRDuYxxXICPjNoFHKrUsmzV3rT4gKBifWoSkWKxYnaFPDbwk+lQ9pqBh73L7jT2scBCtrGwe5ghxWkFFSgElM8/x9D9C7YIgInuqdpzb5ziBWiLIHK8XMNmr2SGWXxKSbXmuC7RLrHdmrEbotFSBc+pGh5KoaisHnvPHjtgKBa+5wdeLmMhi6FlqSPN5G8bmBpP3sxfJRi9r6Uhqn6IPWRNdoZ9P9VnzE545PVL5/+8x43mUTMiC/Ax6DaawCHHklWEQ91FQ0GzeLm2yKpQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(5023799004)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?qsQBhtlhEYCC/AE5mJWt0SvU7WoOVTmPdn5EKwHwf/Ro+HsJgKRlR+F+DdTl?= =?us-ascii?Q?VFYPV8ov6AfULShZhbGllE50eT+ljAkwT68gSxcqpcW6T6CWLU6xXLyNYNwS?= =?us-ascii?Q?eVLvr1tIGdGV5RGuhkUg4t+7fmXCgxfdg0dzsbMUwxHPA6PY/vEj5KKI0T6A?= =?us-ascii?Q?YWn496/i1MRL+qPgdQwJGbMuZ72RwCJucqoyRZ2kbWphuquZGGPVYnQpqwSz?= =?us-ascii?Q?nHcHVMt2wtivwVhrtEVLBjAWtYXb3XyUG0SccqzsK6YU2cszS0PXWkYflzK3?= =?us-ascii?Q?3JlciWLhee59iUgVLWmIiaPUVotDLj8HWgr88ik1tGqV9ONeq3+sWC0Qfezz?= =?us-ascii?Q?EwA+Fb6wFarVlz2gsvQ61cjyk9jzR2avghwWgec3+5CYwNgLprmX7fB9Oxbx?= =?us-ascii?Q?G/yzmKpf60E4BhKEOWmknfd+qQ0eUEUt+RxfI5qIwDcH9y9XBLzPbvIZxpEX?= =?us-ascii?Q?KlxyJMlPFtcfDccPifyOE4PSP1RZrcLGwXTbdRwWSsocBQKBTZqGhwgQ1t+S?= =?us-ascii?Q?dyRX4h9xQ2gdJ3FnrBcXInfBFDwZ4iOa0nwkkjXJSZpoosFObrvHtSlofJBT?= =?us-ascii?Q?0RQxDeAMEK51x0TuAIRcwns7CnO0Z62apDGalScpVPNSd1Xx4C5QpIzDaIto?= =?us-ascii?Q?V5jGZuhxpRr4E6uwMJq+8dKhjFPmf9VR6PyltYf04Y9sQKKKqaZZXQF4DZqv?= =?us-ascii?Q?k8W8e3BHj+z3BpFpOf8poFrtSXB0zlas9yNSjwPd2UjdDo9MO47v87PoHjf6?= =?us-ascii?Q?sniSpF9yVcGF8iCNaiIrFwHX36MVIAtZbzDxfneRT3X5jfK2wk8pdqqKN/NG?= =?us-ascii?Q?m1hbSEoNg0LKzJXe2mxfwght/rUjXwRilY5TPmdVXCNbChOPpNQZzX7TzFcO?= =?us-ascii?Q?wW2vnxirSgjg4ahv0shP0yQDzzy3IUmTjjkZJZxyyXMf0tyhCmmZiho37bA9?= =?us-ascii?Q?PJfN3Si12whtpLqozTuILHuryQE5rYMQr9x5by/kewXPFbTkx8P31MO5TTlb?= =?us-ascii?Q?UOZp0DuuFGI1SxRY9GknmZvX5E2rqZbtyXYQ2cQwYwexpUvFPkWGms5Tdsel?= =?us-ascii?Q?N/NRgzLwIQvucBfiVdDb3SFP7QLl7y5LQSd5a+HYHf4SEzFcnkdSifN9V53f?= =?us-ascii?Q?uBNc5BWwZtKIE0R/vfgEVsaa7TdDl2TO04zxEWsJqJ7mRnifP4RFu9o3Sclh?= =?us-ascii?Q?R0YHxXQ3F6zKtKjj9JgMhbE1eCBcWO0cwu4XtQjfYrAQsTM2BDYdOq+VlcZ/?= =?us-ascii?Q?0EMOgj7DICrFS9WwPhM82T3mCg1KrlnzjKx6eWtV3OOTGLeBdYja9EmrW52P?= =?us-ascii?Q?9qCwBBpiP7DHJSxKBolBV098C6xl9JmUGcUSTbXsg/4/uueJ6RgJborjFJfd?= =?us-ascii?Q?0sOhBYyLGEFh8CNtmU6KwqrcbV3F83mfMe6Dj2EwoXUyENJPqkPFgqCOxZ86?= =?us-ascii?Q?wZHL5zOwEcF8a7IJWOzbzO0XrHxDzz7rp/Mq0MZvM2swLJjlqtat6kUq6cwy?= =?us-ascii?Q?b4nC1NFpELz+jFUK1TSzjN4WlZVJDtcAsWjKBNUGfcTBTyY0NFXDGztYwRo8?= =?us-ascii?Q?r/Quy22T8FmSLw+K85kmpPUH1uJjTXTxfFONnOQYy81u/VX9bPV32EY29Rc+?= =?us-ascii?Q?Su7+jZfW7/mNIvepIMFZd1xjF9UBm3POoMDgW1lTsG0dlM7ZkiorP3Bpf/WZ?= =?us-ascii?Q?HbGuX6CznyqDJMVgzrPG0X+Clu1/AFGK0u9RjrTkT1/n3uFXRnG0FnfJd0Lu?= =?us-ascii?Q?QClCOlrQKnam7ouqttzm67cnUvN+EC91HYA8RLzivd+4nWpxuS6d?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: bd76e081-47db-4da2-7e33-08dec1348ea7 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:20.9721 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7UnwP3tfgkQVFXJGn5ORIJ2NaZOxZZ5JIMWlX88KBOBn6HK1rgoP8dCsPCiBvy2GoTixirQIqBkif7CMW0pEeNNJ0BgVcgU2cUc+dKcQg0kqQrV2+p5aZhyjEh0pTUyL X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1153 Content-Type: text/plain; charset="utf-8" Add pinctrl driver for StarFive JHB100 SoC Peripheral-2(per2) pinctrl controller. Co-developed-by: Lianfeng Ouyang Signed-off-by: Lianfeng Ouyang Signed-off-by: Changhuang Liang --- drivers/pinctrl/starfive/Kconfig | 12 ++ drivers/pinctrl/starfive/Makefile | 1 + .../starfive/pinctrl-starfive-jhb100-per2.c | 126 ++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per2.c diff --git a/drivers/pinctrl/starfive/Kconfig b/drivers/pinctrl/starfive/Kc= onfig index c3889a152f6c..edc3b6d9c8d7 100644 --- a/drivers/pinctrl/starfive/Kconfig +++ b/drivers/pinctrl/starfive/Kconfig @@ -79,6 +79,18 @@ config PINCTRL_STARFIVE_JHB100_PER1 peripherals supporting inputs, outputs, configuring pull-up/pull-down and interrupts on input changes. =20 +config PINCTRL_STARFIVE_JHB100_PER2 + tristate "StarFive JHB100 SoC Peripheral-2 pinctrl and GPIO driver" + depends on ARCH_STARFIVE || COMPILE_TEST + depends on OF + select PINCTRL_STARFIVE_JHB100 + default ARCH_STARFIVE + help + Say yes here to support Peripheral-2 pin control on the StarFive JHB100= SoC. + This also provides an interface to the GPIO pins not used by other + peripherals supporting inputs, outputs, configuring pull-up/pull-down + and interrupts on input changes. + config PINCTRL_STARFIVE_JHB100_SYS0 tristate "StarFive JHB100 SoC System-0 pinctrl and GPIO driver" depends on ARCH_STARFIVE || COMPILE_TEST diff --git a/drivers/pinctrl/starfive/Makefile b/drivers/pinctrl/starfive/M= akefile index 6beef7e313ef..33213bd1919f 100644 --- a/drivers/pinctrl/starfive/Makefile +++ b/drivers/pinctrl/starfive/Makefile @@ -9,6 +9,7 @@ obj-$(CONFIG_PINCTRL_STARFIVE_JH7110_AON) +=3D pinctrl-star= five-jh7110-aon.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100) +=3D pinctrl-starfive-jhb100.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER0) +=3D pinctrl-starfive-jhb100-pe= r0.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER1) +=3D pinctrl-starfive-jhb100-pe= r1.o +obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER2) +=3D pinctrl-starfive-jhb100-pe= r2.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0) +=3D pinctrl-starfive-jhb100-sy= s0.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0H) +=3D pinctrl-starfive-jhb100-s= ys0h.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS1) +=3D pinctrl-starfive-jhb100-sy= s1.o diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per2.c b/driv= ers/pinctrl/starfive/pinctrl-starfive-jhb100-per2.c new file mode 100644 index 000000000000..030c68beed6b --- /dev/null +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per2.c @@ -0,0 +1,126 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Pinctrl / GPIO driver for StarFive JHB100 SoC Peripheral-2 domain + * + * Copyright (C) 2024 StarFive Technology Co., Ltd. + * Author: Alex Soo + * + */ + +#include +#include +#include + +#include "pinctrl-starfive-jhb100.h" + +static const struct jhb100_pin_layout_desc jhb100_per2_pl_desc[] =3D { + { .pin_start =3D 0, .pin_cnt =3D 15, .name =3D "gpio", .gpio_func_sel =3D= 0 }, + { .pin_start =3D 15, .pin_cnt =3D 1, .name =3D "gpio", .gpio_func_sel =3D= -1 }, + { .pin_start =3D 16, .pin_cnt =3D 15, .name =3D "gpio", .gpio_func_sel = =3D 0 }, + { 0xff }, +}; + +static struct config_reg_layout_desc jhb100_per2_pinctrl_rl_desc[] =3D { + { + .pin_start =3D 0, + .pin_cnt =3D 19, + .drive_strength_2bit =3D { .shift =3D 0, .width =3D 2 }, + .input_enable =3D { .shift =3D 2, .width =3D 1 }, + .pull_down =3D { .shift =3D 3, .width =3D 1 }, + .pull_up =3D { .shift =3D 4, .width =3D 1 }, + .slew_rate =3D { .shift =3D 5, .width =3D 1 }, + .schmitt_trigger_select =3D { .shift =3D 6, .width =3D 1 }, + .reserved =3D { .shift =3D 7, .width =3D 8 }, + .debounce_width =3D { .shift =3D 15, .width =3D 17 }, + }, + { + .pin_start =3D 19, + .pin_cnt =3D 12, + .input_enable =3D { .shift =3D 0, .width =3D 1 }, + .slew_rate =3D { .shift =3D 1, .width =3D 1 }, + .vsel =3D { .shift =3D 2, .width =3D 2 }, + .reserved =3D { .shift =3D 4, .width =3D 11 }, + .debounce_width =3D { .shift =3D 15, .width =3D 17 }, + }, + { 0xff }, +}; + +static const struct pinvref_desc pinvref_desc_per2[] =3D { + { + /* gpionw */ + .pin_grp =3D { + PADNUM_PER2_GPIO_D19, + PADNUM_PER2_GPIO_D20, + PADNUM_PER2_GPIO_D21, + PADNUM_PER2_GPIO_D22, + PADNUM_PER2_GPIO_D23, + PADNUM_PER2_GPIO_D24, + PADNUM_PER2_GPIO_D25, + PADNUM_PER2_GPIO_D26, + PADNUM_PER2_GPIO_D27, + PADNUM_PER2_GPIO_D28, + PADNUM_PER2_GPIO_D29, + PADNUM_PER2_GPIO_D30 + }, + .num_pins =3D 12, + .range =3D BIT(JHB100_PINVREF_1_8V) | BIT(JHB100_PINVREF_2_5V) | + BIT(JHB100_PINVREF_3_3V) + }, +}; + +struct starfive_pinctrl_regs jhb100_per2_pinctrl_regs =3D { + .vref =3D { .reg =3D 0x00, .pv_desc =3D pinvref_desc_per2, + .num_pv =3D ARRAY_SIZE(pinvref_desc_per2) }, + .func_sel =3D { .reg =3D 0x8c, .width_per_pin =3D 2 }, + .config =3D 0x04, + .output =3D 0x80, + .output_en =3D 0x84, + .gpio_status =3D 0x88, + .irq_en =3D 0x94, + .irq_status =3D 0x98, + .irq_clr =3D 0x9c, + .irq_trigger =3D 0xa0, + .irq_level =3D 0xa4, + .irq_both_edge =3D 0xa8, + .irq_edge =3D 0xac, +}; + +static const struct jhb100_pinctrl_func_maps jhb100_func_maps_per2[] =3D { + { .func =3D "fan_tach", .val =3D 1 }, + { .func =3D "gmac_rgmii", .val =3D 1 }, + { .func =3D "gmac_rmii", .val =3D 2 }, + { .func =3D "gpio", .val =3D 0 }, + { .func =3D "host0_port80", .val =3D 2 }, + { .func =3D "host1_port80", .val =3D 3 }, +}; + +static const struct jhb100_pinctrl_domain_info jhb100_per2_pinctrl_info = =3D { + .name =3D "jhb100-per2", + .pl_desc =3D jhb100_per2_pl_desc, + .crl_desc =3D jhb100_per2_pinctrl_rl_desc, + .regs =3D &jhb100_per2_pinctrl_regs, + .fmaps =3D jhb100_func_maps_per2, + .num_maps =3D ARRAY_SIZE(jhb100_func_maps_per2), +}; + +static const struct of_device_id jhb100_per2_pinctrl_of_match[] =3D { + { + .compatible =3D "starfive,jhb100-per2-pinctrl", + .data =3D &jhb100_per2_pinctrl_info, + }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, jhb100_per2_pinctrl_of_match); + +static struct platform_driver jhb100_per2_pinctrl_driver =3D { + .probe =3D jhb100_pinctrl_probe, + .driver =3D { + .name =3D "starfive-jhb100-per2-pinctrl", + .of_match_table =3D jhb100_per2_pinctrl_of_match, + }, +}; +module_platform_driver(jhb100_per2_pinctrl_driver); + +MODULE_DESCRIPTION("Pinctrl driver for StarFive JHB100 SoC Peripheral-2 do= main"); +MODULE_AUTHOR("Alex Soo "); +MODULE_LICENSE("GPL"); --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-SH0-obe.outbound.protection.partner.outlook.cn (mail-sh0chn02on2113.outbound.protection.partner.outlook.cn [139.219.146.113]) (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 B0FE0405C4D; Wed, 3 Jun 2026 07:28:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.146.113 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780471737; cv=fail; b=in7B0R2GKuJm8fRaVhjPgIqTITJ5hDb4J3SqwgjyOix4C//dSNT4RKJyUXXXmFmEE4C2BYH2SNbyE9amZmREtb4D//PLesJ2LhchkRPmEayZVdH/ljwH3jPk6uiboCI5dAzttG6PrPpEibrTvKinJSr59hjB5Ohc3HcwHXM6xzU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780471737; c=relaxed/simple; bh=g089WVG/H6bHChT3XVH06+rdFGj0+eBr0SKLyYUE8Rg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=dZUBHvMrV14KGpGkjok9leBWyRO1eIK8Oy7mZP3/pAMOL0Qsmg7nmObmNKiaRyQpqVZnuThS54ojaroTmtHo70X1run2KqEoRCZHJrEr5x/Z+sDEMq8HkZ/3fDuHCX8UmKDtEgZQcv5EtMsFjaxf/TqTGsdjuxZ5UL8QTxZ+pXg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.146.113 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZH4IDK7ZmTSs/iJjmbqWhEUuTDzf8VYOcaNuXkDhQJf1ZiWJpw4+4f9zCLstMTaMY1nMMoERUCVGqcfK1zwSWoTrBNPGnG+KniWeqI+KGWUtfcG0tyJLFKPnUY9P8v4Q+gvc0XIgTE8rY5T2g25oaVCMxNh54MOd/9IKSEznh48viiKllOCcsl2EPk+eak7EDWwjFl1MPtgO9+dg6S8n/m1J5vZbQC3e/RGpeu6iZc1ch+idtekVqAyZJ5hkFEpi+7L1c1X9MbE9nntS3SPWwiphS0P2KshTsSv4qkr6wJK09PA/LuzXAzYF7ExaWzhak6dWo8h3i89azc8hm2MBJA== 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=EbpH24S6JnKA2n2j4h0lxigZQmHNlyZ9NnJEi7LmxvI=; b=OuRkyqAMGzj4o3ajUt10ofV5HBbNf/6H+FjkPm9jbhToEzGFzFeljKrv1niK7jDns1S2jKmar0PnDhr4HTQbdeP/PvjFBdVElDFtp2KNWwdCAnMUKyZaLaoczC4gqzu4LEqMv8iLHsnXjz7prXdaAZ4jrb/WhRlUhXrd0jeeogrXIskI1/+hzZ+w9ODzGKGxptGVnhHLwnh7vEKBjj78SoGupQAGaCsRipNFsqi9RmrKnrQ3NU486aUWV+ZAzkmCLGZPqj+LySuapA/JgcddBY3RNcu4UqIUgQpowCH+ANQDcXZTOOq8Tp/e73b4tJ+W3lANRD/bmdQ92WkBmb9Mvg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1154.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:22 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:22 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 17/21] dt-bindings: pinctrl: Add starfive,jhb100-per2pok-pinctrl Date: Tue, 2 Jun 2026 22:53:43 -0700 Message-Id: <20260603055347.66845-18-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1154:EE_ X-MS-Office365-Filtering-Correlation-Id: e1b22fbe-75ac-447c-40d5-08dec1348f62 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: e57siLUARJXkW+0my8TA7j630qfLhn4jNbSzCLZ0gke/Cz/rMesEPZCdFaBuzYcCZQIzaPkhSqldkue7N0wV8Ritmkhl+TazMawcylfHWJSAUhAWOLObJd84OOQbjZ3QGA/XlnPCJeYl3oqXeLoYJXJnLTx/Gdw9vt2rxCk0GLSeEFj4e87LdCjZRUzn89akwqNdwXsJYs4kYfVg/Yy6dU1D6TTmQMkv9sX4siHJlxNi6zXqQvIXOqSHGv5Xus5piWw6WhB5oQ2UwB8L5Q+Ntbaqc9OOmz5j+3a3SyFeeElJBc3IrXkuwV+W8ZoYwlmZHB2zUqPIMgc3uG8zsh8il/TT3EdzM42Pn14ZIaDUEAhL6nCZeRyuy5oE3mdYh865L1dfVxxUk3PdyVdWsf0ADq7qIpoevdojmPoLM4y0Jgc5Of99CaEJXjq814gWDqpbJN6E5zvLIZ/Z8bH6IcQUAngIMsSwWih8qMzMtfa9NQE95JUGhikqbGQeq/SMOGrQk5sbnkL5guKMuxHJkFO7we1ep0a/75IUmf/HyEDLKv6N3AtdNbgUYv93AIBKKgxG/GdreMmFd1VR6j6LMAV0LQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?fX33GvXxI2a7UHTSH5C4dKYltv+wrqxXBityTq6vfi1xHVbGyq0uph6r/vNF?= =?us-ascii?Q?hwek25iUrFv495QJaI/O8pBVikAN/1cND+WBy8O2o0tBrgbYUvUuJGnaewJh?= =?us-ascii?Q?mk01DNele7ADWbLrOnnwogJkwYBuvBH1dLFrYk56HvgcXhyODxWm6kNaPC4g?= =?us-ascii?Q?zwpN/uPUeQ5ANi5bP7I204pXqMw+bcXYlAe7nHDSr/6hfLi4PE0zLaWveoZm?= =?us-ascii?Q?qs0lBrWwFxRe0qoMhr5DZb0P7nAjXCIv+x/if/0P2TcBIwr5ZBGA/GDVyIsY?= =?us-ascii?Q?EIjn4Y7u7DBZv5dG8L9lIoOa/7SvkvbSNC8VyM90Rjbc/rBZnhRjEPGeZeKX?= =?us-ascii?Q?0UEEoOMgBSAb/0I28FKAMEW01jiI/E4KJxr4Zz3q/5FQiNChNatpq7fMNdEO?= =?us-ascii?Q?tunGKhiSZkNSz7s8+WyPCqNTHmw7pHGFzT4+nmfsa/ZNrcrPtnHr6GLhQEut?= =?us-ascii?Q?P5SshXqretmWH6YFQ0+kkqY5MrpZV24y1z1TeLDf54zvbZGujq6zx/1qtEWz?= =?us-ascii?Q?rien1RORDTZ85Wo3kII9kqafXj7guSrowqoFRz+5YNwkhYqmv2i9CN8gwIRL?= =?us-ascii?Q?HQJAhb3bYknH9GWiDQTgxnyKThbVbfqLZDzHaoc4myiMrWycfuz9NnrVa94V?= =?us-ascii?Q?xIXWGPuOw6jXeoCulf7g6nFqzmRxRYpm5kKLp91f0/CZLj84xWYFPc+pcDHi?= =?us-ascii?Q?QRrSbgLAjp6ENsg4W/Bn/scLPdXhfkI8vcT7s8OOPiSm5P0C+Djh/187qrpF?= =?us-ascii?Q?3xC5C/GeKVQk/iVF/qQNt/nlYGDIPEurVfrDDVAbL3GMVbuPzcKD6F+EsKdz?= =?us-ascii?Q?g7y6t12sXVSqKgflOilbIMWBCnlupfSaBMX3/jPStNvrAADb1DrAtLlKW2v+?= =?us-ascii?Q?CEOCp+u6QcnY5cIQRm4FtYA+SaQALz1D/bNIi2+EL8gMXpFybz1cx7qcWrs/?= =?us-ascii?Q?86EG7nnu8MDfHHRfXasRdoigwEeXFPIQrInNSl+2OcIYicq3bF4Vod4MaYsH?= =?us-ascii?Q?ippfh2Pq8OOoC0Bvvv3Hmu91N5C8Jv11GKsBaP/IkK/J9Z/ACW6GelDRmKjB?= =?us-ascii?Q?F4gdVzp5DfaJ34vXWsuqBswnE1ofBDcaA9eVNJkDhIBBg3NiHaJNCdjSuGBD?= =?us-ascii?Q?Wa1MtH4m6uQ3vadWD/SvmhgJctPxDLnXxpJFRTAgbubh7+hYq7/jTT/jtjpq?= =?us-ascii?Q?kP81cY2I92ixGiLuMMsS1RAPH0nPNN9ZARy6m+LDDClGb+YnvJNX0jlm7qBy?= =?us-ascii?Q?tShZOZ6darOVIml/lInXaBAMWNVKQGNMPtePQiRe9vebFAet1dqQBOSxBqJT?= =?us-ascii?Q?Ny1Zl4lT33pka4QfPQog6wmzbA3LlDH7VhD0njBGI+2Yf+xpotYLCl8Jblpf?= =?us-ascii?Q?wQUEuRgmYtTSUfi9k3HXLF/LCdRuhRaOgj62nc1oBGWwrwGjQQRO9PRNEcFs?= =?us-ascii?Q?JGc0ORSQYheKGi1ggNucdbXEap5h0QAPd2sGies8Dhw8s/+CuInDMwJP/YLw?= =?us-ascii?Q?XH+A2IVgvClnnQpLxb1V+ZijsZIgNBCGFFimKsCUczRjjFDaA9H0EH2UZkft?= =?us-ascii?Q?z/83+zAnBXfAKOXwEbdPzvxKCUnyEqNYMKPEK565f+ZHhsL1q/47bMv7L6QA?= =?us-ascii?Q?k99sdbfYPXnxsV4H1OiPUPEv6oedrCPxsTYHgUkHe50KvI/yILzpajb05GIB?= =?us-ascii?Q?lZs7Wl2q0IcaSvpWsVjTYoFKLbiKb9pZDRg1BN4rmO5IjXJ0tB8t4JQRQRhE?= =?us-ascii?Q?vw0HojsGlRTqCdARJFcdBWkl3bOyGjfSOoNJ48u85+M2hju95fS4?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: e1b22fbe-75ac-447c-40d5-08dec1348f62 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:22.2041 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6bbq98jfi5yd/4jdgAK7qzxaNBi3wc/R+LBYSzMldExYxaMhJGCTs2QAOReVxRVC93G6RlV0SYGU9X46sB05mmQdA30cMFLyejRVBJCuduzSBwGteXfUY20ZfZW/G2GL X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1154 Content-Type: text/plain; charset="utf-8" Add pinctrl bindings for StarFive JHB100 SoC Peripheral-2 Power OK (per2pok) pinctrl controller. Signed-off-by: Changhuang Liang --- .../starfive,jhb100-per2pok-pinctrl.yaml | 159 ++++++++++++++++++ .../pinctrl/starfive,jhb100-pinctrl.h | 20 +++ 2 files changed, 179 insertions(+) create mode 100644 Documentation/devicetree/bindings/pinctrl/starfive,jhb1= 00-per2pok-pinctrl.yaml diff --git a/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-per2= pok-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/starfive,jhb10= 0-per2pok-pinctrl.yaml new file mode 100644 index 000000000000..0a6cd9b7fb5e --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-per2pok-pin= ctrl.yaml @@ -0,0 +1,159 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/starfive,jhb100-per2pok-pinctrl= .yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: StarFive JHB100 Peripheral-2 Power OK Pin Controller + +description: | + Pinctrl bindings for JHB100 RISC-V SoC from StarFive Technology Ltd. + + The JHB100 SoC has 13 pinctrl domains - sys0, sys0h, sys1, sys2, per0, p= er1, + per2, per2pok, per3, adc0, adc1, emmc, and vga. + This document provides an overview of the "bper2pok" pinctrl domain. + + The "per2pok" domain has a pin controller which provides + - function selection for GPIO pads. + - GPIO interrupt handling. + + In the Peripheral-2 Power OK Pin Controller, there are 18 multi-function + GPIO_PADs. Each can be multiplexed to several peripherals through functi= on + selection. Each iopad has a maximum of up to 4 functions - 0, 1, 2, and = 3. + Function 0 is the default function or generally the GPIO function. + Function 1, 2, and 3 are alternate functions or peripheral signals that = can + routed to an iopad. The function selection can be carried out by writing + the function number to the iopad function select register. + + Each iopad is configurable with parameters such as input-enable, internal + pull-up/pull-down bias, drive strength, schmitt trigger, slew rate, input + debounce nanoseconds. + +maintainers: + - Changhuang Liang + +properties: + compatible: + items: + - const: starfive,jhb100-per2pok-pinctrl + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + resets: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-controller: true + + '#interrupt-cells': + const: 3 + + gpio-controller: true + + '#gpio-cells': + const: 3 + + gpio-ranges: true + + gpio-line-names: true + +patternProperties: + '-grp$': + type: object + additionalProperties: false + patternProperties: + '-pins$': + type: object + description: | + A pinctrl node should contain at least one subnode representing = the + pinctrl groups available in the domain. Each subnode will list t= he + pins it needs, and how they should be configured, with regard to + function selection, bias, input enable/disable, input schmitt + trigger enable/disable, slew-rate, input debounce nanoseconds + and drive-strength. + allOf: + - $ref: /schemas/pinctrl/pincfg-node.yaml + - $ref: /schemas/pinctrl/pinmux-node.yaml + additionalProperties: false + + properties: + pins: + description: + The list of IOs that properties in the pincfg node apply to. + + function: + description: + A string containing the name of the function to mux for these + pins. + enum: [ can, gpio, host0_port80, host1_port80, passthru, pwm ] + + bias-disable: true + + bias-pull-down: + type: boolean + + bias-pull-up: + type: boolean + + drive-strength: + enum: [ 2, 4, 8, 12 ] + + drive-strength-microamp: + enum: [ 2000, 4000, 8000, 12000 ] + + input-debounce-ns: + minimum: 0 + maximum: 4294967295 + + input-disable: true + + input-enable: true + + input-schmitt-enable: true + + input-schmitt-disable: true + + slew-rate: + enum: [ 0, 1 ] + default: 0 + description: | + 0: slow (half frequency) + 1: fast + +required: + - compatible + - reg + - resets + - interrupts + - interrupt-controller + - '#interrupt-cells' + - gpio-controller + - '#gpio-cells' + - gpio-ranges + +additionalProperties: false + +examples: + - | + soc { + #address-cells =3D <2>; + #size-cells =3D <2>; + + pinctrl_per2pok: pinctrl@11bc2400 { + compatible =3D "starfive,jhb100-per2pok-pinctrl"; + reg =3D <0x0 0x11bc2400 0x0 0x400>; + resets =3D <&per2crg 1>; + interrupts =3D <63>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_per2pok 0 0 0 18>; + }; + }; diff --git a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h b/includ= e/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h index 7aeebcf72b8f..3ceaf9ceeecb 100644 --- a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h +++ b/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h @@ -210,6 +210,26 @@ #define PADNUM_PER2_GPIO_D29 29 #define PADNUM_PER2_GPIO_D30 30 =20 +/* per2pok pad numbers */ +#define PADNUM_PER2POK_GPIO_D31 0 +#define PADNUM_PER2POK_GPIO_D32 1 +#define PADNUM_PER2POK_GPIO_D33 2 +#define PADNUM_PER2POK_GPIO_D34 3 +#define PADNUM_PER2POK_GPIO_D35 4 +#define PADNUM_PER2POK_GPIO_D36 5 +#define PADNUM_PER2POK_GPIO_D37 6 +#define PADNUM_PER2POK_GPIO_D38 7 +#define PADNUM_PER2POK_GPIO_D39 8 +#define PADNUM_PER2POK_GPIO_D40 9 +#define PADNUM_PER2POK_GPIO_D41 10 +#define PADNUM_PER2POK_GPIO_D42 11 +#define PADNUM_PER2POK_GPIO_D43 12 +#define PADNUM_PER2POK_GPIO_D44 13 +#define PADNUM_PER2POK_GPIO_D45 14 +#define PADNUM_PER2POK_GPIO_D46 15 +#define PADNUM_PER2POK_GPIO_D47 16 +#define PADNUM_PER2POK_GPIO_D48 17 + /* power-source value */ #define JHB100_PINVREF_3_3V 0 #define JHB100_PINVREF_2_5V 1 --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2102.outbound.protection.partner.outlook.cn [139.219.17.102]) (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 AEFD1305662; Wed, 3 Jun 2026 06:27:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.102 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780468059; cv=fail; b=EJWuml9kMpinYwVvBqoJYRHj/KDnMhuwbs9wRchwvDz1fCMz+uUSl2Y9ARTyLppHo+JCzntQFs5kUAxPlCSluRJuW1qFSzwsl9IRxrmiGQPWPiRL7cUrYT5vzbUhbsinfwDJ0hPBP+NNU/zG9eKlv8pi8qDz7gR+GUbtBzu1U8k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780468059; c=relaxed/simple; bh=VhMjsyauWsWta9QHsGBm9/U40FDRow5CvXV2Fo3MenQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Xs+Ij0Jr1ueKryzLqWgK4NtUewxEMy2OXwb1DjFNZfwbS0euFYbxuPDfrohP4mJPIDSoYBj/SOb73TcinMtHYZUhwqKSVNr/4sDGa6WHgVabPeSU5tSCL3k42n7BsibVABX/7dbQvA1wG1ebY0n/oDBg8forLqPD1SgHUAS7Tf8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.102 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RYEdU+FP4ELoDrEam1AY6bTBa1u4xrAHdlclgM4iGkR6RAnvPLhmM/ss3tEtnSWldCENY/Fqt/RS9yhS9k3MqdAqW/HDTdDA0UxfsnPcmEhIqo9yNQnyNT6JNUKCsciKycc7Qvcfo2smahpbnS2IY91DVagApbYE8Ly5ORl9ZShv61v/sKbCagprKpT1+fSAwtGJ2s6c8XwQg0k/XyZoDssn3cYIvbTZ+L57zbgwjpClTZqrIQ66OEnH4PA7hDQSDodaWBEmrlJm1hfky9J7D+gtLvHNrE7ZyWQiQ8Ok3A/EpdldM+HBwomjje50nuWNcIjkV75bWiE9rKCu4yEh6Q== 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=+y664snwcNOdRJMs9N6HdldGQYkJVBWduxyJc3itTuM=; b=gWK+tOJf3NdkzLExdzt2AeU9DohldIUW2V3EXpFnbMt7CErx0vCbDknE8xD6i04OiCJ/04lQloOkL2wOjagqUTo+WRIUP06yJw31zuOUmMoeIHi5MBJjWUyKmC/nOIu+FwsX8j04VT7jWuNNX9RNv5X/pxGT2Lee+0PDZ8+0F2Q+JCPoOifBOpJw79czWE052zJJ2ijYLfhXD7FmUV23SQsYRWghilxcb0VgOW8H0vkcMPw9yXnqOHN7CTf5ExPFIfxFAZ6JlJZ/mwlv6Al95OYZ/3nL92rvv4iDVwk6uDdRa7m1yVncts5hts8zAIN0mGg/JQXSz8pCUPxiwq0GaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1154.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:23 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:23 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 18/21] pinctrl: starfive: Add StarFive JHB100 per2pok controller driver Date: Tue, 2 Jun 2026 22:53:44 -0700 Message-Id: <20260603055347.66845-19-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1154:EE_ X-MS-Office365-Filtering-Correlation-Id: 2b1d6816-1c73-42e8-3614-08dec1349021 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|5023799004|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: 5UXB+nqutnDhQ4KwtgA+oTu3H29GWZ7zrp5bjlGMgBPALKWnxqZpNKN2h0JSQZnkZwR1L4ROE5+QxIi2bgXbX18YZYHHV69mfLfltc/qxc7URL4oj6JE9uEe7h35TYktElRfCOxtplW6oGOSMfTxpefE/AFWQuc9HoIO0Qju25RjNwnqVDbdhXqOLKU5nSOKc+K456mJlT8n4C+MDHk4j1Ki8/eh3FtqJuKPG0CuKcdx0diSLKGq0XlJtP+KeVsaRiQ0IqX2lKCj0Be0tQkd7bKX4KBnub9e9AASzsv1po5ZhbJGa24tN8tKohDgnHGrCMxZNKWDgvvWvLjDstDkj3uzHiOOT7xBMEhPtDuVj8vsbRraHcFMG0zv6ztbFB4PFjeUK3BPW/G48LfWoMgtl38aEfynlhm25rtTaomqAoUrYHlXpMt0ZRXh/Bcn8D2Y2q94YbhDkQsLyAE2J6Tv3ipapeZbxhCvGQuxbOojh8Jh1IC9fqJWAS2vh3o3BLh/koqgvhvQr2Wdp1gyF85JaCHdRDPH9WJkJWuhgenKiZe7eHD+QFUUVswD1k5OVbHjvaQhdTMZTimEGsZAC+fVhw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(5023799004)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9ap/JlCS05+9kJ5aO6Do9HAT9VC4LerG6l7zYKbhGb58gLzNObDih1RJbgiS?= =?us-ascii?Q?i9VgVA2b0RFLYC61RATxeVWA9Zd7RBBl2LTOCr4ln4JXdDVvHZF0kcF/x1WL?= =?us-ascii?Q?3bHU6l2WcWffs7jvjmpCpBhFE9P2N7Gc3gL6boUiXXHWenghRXt3ygkkWi3Y?= =?us-ascii?Q?BTp16Agytosf8Q5F0Mbqfazeq7KY3ZALN21Vj46TgqK6mUpIdZjeS2YHH8LW?= =?us-ascii?Q?pUKXAN6FOcgkId9yzp5VdYPtqJRWSpoRgnuwZQ3ey5+OPkldW1uDpWOF8KXB?= =?us-ascii?Q?4zRg0wndEiLoR/UqCh5BmTfLYPQYRi8UYsIYW9UVj/4hoA6TcBju6LrFn/Na?= =?us-ascii?Q?KOaQqykGqaT9R02zYPInUlYUvnq3e6R8CxAMkYM+yMPglDaOKwTNWZISmHT+?= =?us-ascii?Q?K2cGr2kk56z8v/jwc3JclVCBG6tEvOSOpGA0tp49QCfeMC0LTKkywYnKHDb/?= =?us-ascii?Q?5GB24QYf28cX/QJ/WIY8I4j87E3PjNuX7dO52FlZ8oqbGfuaED+k2U7QDits?= =?us-ascii?Q?UDAMQG7Ljm/xTxmo6Ul6aecqV4FJ30YT576ooTNnH2CWfDdK32PmmELuOoAW?= =?us-ascii?Q?1Oy1Giey0SC5zBWfnT+rEqgeQyQKYUKXEPh9oy8VRBQRBdBZKJb4dvIya1NZ?= =?us-ascii?Q?Tuvq///Qf2qaQWnmtHYFpdOiSjIM9QCoJN6PzGGIWOHllGaRWQzYVLtATHME?= =?us-ascii?Q?pmIKPH1Pe6hXJp/eLI4p4ChK6LF6Jvccue7MM8rOtc6gLX5x8sIzDv+Tmcnj?= =?us-ascii?Q?636brIeGZxOkBLf8gk6HrOSuj05sg76sXwIlMhy9mnWdWhbh59ecs36VrCRF?= =?us-ascii?Q?5oGFEUBSdvbI70ewRORgfvXUTqE5g05tu1JfJFljKidj6utuPT471dxAc6tQ?= =?us-ascii?Q?dbxYP4Erud8yeT0ute+OwngkVdx7jx2HU3RxH0rIOEAiqMUmPTAcEIHld/cv?= =?us-ascii?Q?knFXOJa0i1wgZesKNf6V8FAR+T6RuAvxN/iUpjvwo1K0xd7z8TtoI/YZ3oUh?= =?us-ascii?Q?xdN7qlwwXUV3+1CDmwBKiif/QVUn8unCfM+GRhx1jH1Wo0hTAAxyvBp6RLlF?= =?us-ascii?Q?XG2Zbad3FKk1O6b5HxcLT8jja00tCB/7BgifcbWEmQ3F3Df8ZKY3cyqmdPYa?= =?us-ascii?Q?WE+DVYwA1tdkXV93fPX/wnUGX1xkcvuUggct1yU3g2YrykGnS/oqQN8lqufZ?= =?us-ascii?Q?snFOfHzFcK75S+EjGsu7FMIG7Bmw6MCFiZUCqXXlIQkzdq7ytli7RwedR+WL?= =?us-ascii?Q?mU6ud4mbUcMi4HYXTVbx/A5bIJrXTPLLYRxFmLDTs2Ai1Nh3//RwU9IJrUtR?= =?us-ascii?Q?qs5x87vdYHhj690aNLZCL8OKaPDHQ3q4sl2fNlwjfxm3MF2Bva5QbRLGNA3I?= =?us-ascii?Q?IUX+THoAnoMHw0QCHuFXP308DmsgsZE2ZRg7kwlDzDOpWVzdIuq76ipl8GJQ?= =?us-ascii?Q?pk8935PbGPGmYf6Jmqe+C6x8HP7DK9y8FISzwyLfebro+TNHz1A1SOV/sRs8?= =?us-ascii?Q?Iue95gnPnHrOfheHZBbfxcQQcG5vmAlWM/tdlaakAK35N6GHYN4WS4togNId?= =?us-ascii?Q?d5NYvFUWwYIPVZ0cBn6VnJqtzqeHrIdSs+EKw9belcQONsS1kzdhyunylXo9?= =?us-ascii?Q?WyOlWJ5JjZy3JRyQDBlPL8iLkzo4xb1iJZCkOaQH9p4HHW7FY/B9pHSFD8RF?= =?us-ascii?Q?G8m+M+cN3ktMoHahA78e2JYNgk3XtT4Ck1lB4a0dPkTBPT2kUUlPR9LJkR1Z?= =?us-ascii?Q?9Ds+UPsdNDW0SWNTsEVvIb5QzNlsne3a7bznkBt+HtONapKm1Dvn?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2b1d6816-1c73-42e8-3614-08dec1349021 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:23.4461 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5NUhsU16roayPxStoIcwcemPHMc21Fgrn9zj7ByyyhDsXU/h6bBW9Z8F2ywzS7Bh2YqM+fs3szJvftcBicF/3qBQi14NJvYxRV2o7Ax+TONgbqyXqWtL0aA2AdceE2ZG X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1154 Content-Type: text/plain; charset="utf-8" Add pinctrl driver for StarFive JHB100 SoC Peripheral-2 Power OK (per2pok) pinctrl controller. Co-developed-by: Lianfeng Ouyang Signed-off-by: Lianfeng Ouyang Signed-off-by: Changhuang Liang --- drivers/pinctrl/starfive/Kconfig | 12 +++ drivers/pinctrl/starfive/Makefile | 1 + .../pinctrl-starfive-jhb100-per2pok.c | 97 +++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per2po= k.c diff --git a/drivers/pinctrl/starfive/Kconfig b/drivers/pinctrl/starfive/Kc= onfig index edc3b6d9c8d7..bf5915e0a5f2 100644 --- a/drivers/pinctrl/starfive/Kconfig +++ b/drivers/pinctrl/starfive/Kconfig @@ -91,6 +91,18 @@ config PINCTRL_STARFIVE_JHB100_PER2 peripherals supporting inputs, outputs, configuring pull-up/pull-down and interrupts on input changes. =20 +config PINCTRL_STARFIVE_JHB100_PER2POK + tristate "StarFive JHB100 SoC Peripheral-2 Power OK pinctrl and GPIO driv= er" + depends on ARCH_STARFIVE || COMPILE_TEST + depends on OF + select PINCTRL_STARFIVE_JHB100 + default ARCH_STARFIVE + help + Say yes here to support Peripheral-2 Power OK pin control on the StarFi= ve JHB100 SoC. + This also provides an interface to the GPIO pins not used by other + peripherals supporting inputs, outputs, configuring pull-up/pull-down + and interrupts on input changes. + config PINCTRL_STARFIVE_JHB100_SYS0 tristate "StarFive JHB100 SoC System-0 pinctrl and GPIO driver" depends on ARCH_STARFIVE || COMPILE_TEST diff --git a/drivers/pinctrl/starfive/Makefile b/drivers/pinctrl/starfive/M= akefile index 33213bd1919f..213002da9cdd 100644 --- a/drivers/pinctrl/starfive/Makefile +++ b/drivers/pinctrl/starfive/Makefile @@ -10,6 +10,7 @@ obj-$(CONFIG_PINCTRL_STARFIVE_JHB100) +=3D pinctrl-starf= ive-jhb100.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER0) +=3D pinctrl-starfive-jhb100-pe= r0.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER1) +=3D pinctrl-starfive-jhb100-pe= r1.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER2) +=3D pinctrl-starfive-jhb100-pe= r2.o +obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER2POK) +=3D pinctrl-starfive-jhb100= -per2pok.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0) +=3D pinctrl-starfive-jhb100-sy= s0.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0H) +=3D pinctrl-starfive-jhb100-s= ys0h.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS1) +=3D pinctrl-starfive-jhb100-sy= s1.o diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per2pok.c b/d= rivers/pinctrl/starfive/pinctrl-starfive-jhb100-per2pok.c new file mode 100644 index 000000000000..abeeee2e7a00 --- /dev/null +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per2pok.c @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Pinctrl / GPIO driver for StarFive JHB100 SoC Peripheral-2 Power OK dom= ain + * + * Copyright (C) 2024 StarFive Technology Co., Ltd. + * Author: Alex Soo + * + */ + +#include +#include +#include + +#include "pinctrl-starfive-jhb100.h" + +static const struct jhb100_pin_layout_desc jhb100_per2pok_pl_desc[] =3D { + { .pin_start =3D 0, .pin_cnt =3D 10, .name =3D "gpio", .gpio_func_sel =3D= 0 }, + { .pin_start =3D 10, .pin_cnt =3D 8, .name =3D "pwm_channel", .gpio_func_= sel =3D 1 }, + { 0xff }, +}; + +static struct config_reg_layout_desc jhb100_per2pok_pinctrl_rl_desc[] =3D { + { + .pin_start =3D 0, + .pin_cnt =3D 18, + .drive_strength_2bit =3D { .shift =3D 0, .width =3D 2 }, + .input_enable =3D { .shift =3D 2, .width =3D 1 }, + .pull_down =3D { .shift =3D 3, .width =3D 1 }, + .pull_up =3D { .shift =3D 4, .width =3D 1 }, + .slew_rate =3D { .shift =3D 5, .width =3D 1 }, + .schmitt_trigger_select =3D { .shift =3D 6, .width =3D 1 }, + .reserved =3D { .shift =3D 7, .width =3D 8 }, + .debounce_width =3D { .shift =3D 15, .width =3D 17 }, + }, + { 0xff }, +}; + +struct starfive_pinctrl_regs jhb100_per2pok_pinctrl_regs =3D { + .func_sel =3D { .reg =3D 0x58, .width_per_pin =3D 2 }, + .config =3D 0x04, + .output =3D 0x4c, + .output_en =3D 0x50, + .gpio_status =3D 0x54, + .irq_en =3D 0x60, + .irq_status =3D 0x64, + .irq_clr =3D 0x68, + .irq_trigger =3D 0x6c, + .irq_level =3D 0x70, + .irq_both_edge =3D 0x74, + .irq_edge =3D 0x78, +}; + +static const struct jhb100_pinctrl_func_maps jhb100_func_maps_per2pok[] = =3D { + { .func =3D "can", .val =3D 1 }, + { .func =3D "gpio", .val =3D 0, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_PER2POK_GPIO_D40) }, + { .func =3D "gpio", .val =3D 1, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_PER2POK_GPIO_D48) }, + { .func =3D "host0_port80", .val =3D 2 }, + { .func =3D "host1_port80", .val =3D 3 }, + { .func =3D "passthru", .val =3D 2, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_PER2POK_GPIO_D36) }, + { .func =3D "passthru", .val =3D 1, + .max_pin =3D JHB100_FUNC_MAPS_MAX_PIN(PADNUM_PER2POK_GPIO_D40) }, + { .func =3D "pwm", .val =3D 0 }, +}; + +static const struct jhb100_pinctrl_domain_info jhb100_per2pok_pinctrl_info= =3D { + .name =3D "jhb100-per2pok", + .pl_desc =3D jhb100_per2pok_pl_desc, + .crl_desc =3D jhb100_per2pok_pinctrl_rl_desc, + .regs =3D &jhb100_per2pok_pinctrl_regs, + .fmaps =3D jhb100_func_maps_per2pok, + .num_maps =3D ARRAY_SIZE(jhb100_func_maps_per2pok), +}; + +static const struct of_device_id jhb100_per2pok_pinctrl_of_match[] =3D { + { + .compatible =3D "starfive,jhb100-per2pok-pinctrl", + .data =3D &jhb100_per2pok_pinctrl_info, + }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, jhb100_per2pok_pinctrl_of_match); + +static struct platform_driver jhb100_per2pok_pinctrl_driver =3D { + .probe =3D jhb100_pinctrl_probe, + .driver =3D { + .name =3D "starfive-jhb100-per2pok-pinctrl", + .of_match_table =3D jhb100_per2pok_pinctrl_of_match, + }, +}; +module_platform_driver(jhb100_per2pok_pinctrl_driver); + +MODULE_DESCRIPTION("Pinctrl driver for StarFive JHB100 SoC Peripheral-2 Po= wer OK domain"); +MODULE_AUTHOR("Alex Soo "); +MODULE_LICENSE("GPL"); --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-SH0-obe.outbound.protection.partner.outlook.cn (mail-sh0chn02on2094.outbound.protection.partner.outlook.cn [139.219.146.94]) (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 100B0315D23; Wed, 3 Jun 2026 06:09:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.146.94 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466945; cv=fail; b=rkIoPja2vB9Qb60AvNFb34VS98LNRQH2fyAllp556i4tYBG1W1t6wYZp9GB1/+yj/4DM78xwKqQutGrJY7UuhN5LDR396G9YtBEF+WaY2dvfRhm+/fCk7HfUdn07b8UFK9khh1wg4bNGR/KTjqq3dMpwZ4SvcmUuJHvyPz8s9yc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466945; c=relaxed/simple; bh=cRDKADHFUT1Z2f+LtgBhQfq6L8gmwWbi3QNsbi9zRYA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=apWrLzqI6F4mVTNBDii71+X58MdeQIU2B/I0ryQ6jBEIjIKFvn56PBsGoOOAd89VVw1VqIZwYj5GNg74nd9J4voSTqDmnerKYkacJxX4CjyRJHOE9oqGhY0tASsjSURuImmtPFWN9XprlcvtIVQh/905VGN2fzQRlk9IlcM0SyI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.146.94 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VRFONLOvDjX7JFMLK4wY12yG27F8bhoSdwawaxmA+wUyILWgZyctsaV4/kJaveUykpmeIUvk35hyBDnh9Izq+FZsKbuJaJUtEfcoRdHhXgkLXSgru6Z3+itFEStofeHBoDyO6jR49comfS2lYOqvsWK3BXByT7kS40m40kLAFtXyDVojt6CFb2aHD91TaNf52nnSpjrWn+Sb5YPJsi7e8tJzAIY7zsp4hxRFu0QS+f8fL1gDuNp6hSN2iy3d/cOKbNK9yaQaln4CGsTYVSYkcbmZMLHzNH40DpetnEBjTn5xFF+AQlHqdx3e38zqv90KFsS9bOCBSNkOMFNTM94R4Q== 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=lhSgHoawOlF/NFwX+eqcg0/pJksA2qNkSzJoKK+06q0=; b=mETjYIWaNZY+1VeArtfMpxOfpoUOMjblhlW37t2jHY/V/AG3GVPrHOFIECuoVseuKwXQJ4OhGFN/QGnX7NxL4WRhR2V77NPFWuqUZKCdqIU7+E54Snk0ay7RjHoWzQfSkQ2KSb012faSBVioz44k3pAEHjihLSPovt+Rpubzu0nd1v3+6MbkIVwvz3MkcdEGGndyH1ftwEDMmABvemXvgCgMW26mF50SgnjKpnhHXPZe1xoEvvBNGntCXG3bcGddcj0sfZCRQaAp3AKAEh+/5MQhaxFLA2mcQMwl6jvDkuMPplEVN50SguMwzRNFFnXxl14DzcwyhErOzBKRRwrblw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1154.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:24 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:24 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 19/21] dt-bindings: pinctrl: Add starfive,jhb100-per3-pinctrl Date: Tue, 2 Jun 2026 22:53:45 -0700 Message-Id: <20260603055347.66845-20-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1154:EE_ X-MS-Office365-Filtering-Correlation-Id: 23025358-a51d-4d56-24da-08dec13490e7 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: Q6eQel+QUKr8MwHbk8Q4kCn0httX1t52DJG8mNheqC3TVLOOOfSY02yjc9cbRltcZZjMqitIY+/RACfo+lpii9KPwt7jerzmT+sqSRjtcV9S8a5Ov7ZpNnQtTkFGCa5hX76g8+WIU2KETIcqcGIPM2Nb5O0FisuGSZA5Fp2E6VS1O0j/lzZrVIgENG7GE0Og6Jc0jYS9vhAX2lP9QS5zngzCoJpAbWoDwD0s315LUp8kIpFVm0WDqBKYY3zjcvNhYlpTL1/GaOhcuGdjoTggQtdVeSaOwlBhAW+1IrBmpm5ArXNlM6z7KHmec71PqWmGAfZp84s93NKplZvVlxvWEqHE5nlmuX+TzyXyGR8nGBaBBizZVj71/KdrNgkwNiVJO/vrLm7Pzp9ZIay9EhloQ8DCn8kUUTNQRfbVOp+Ll80gmNNKpQl7f0EnKgA7ix+liJyXh8MJxOiTnVWoxYHzxfuh7AsR+QcrlsyJrJhZ0gokyRVxdFKkngVexuWXCQe/TedJR1uVUTgZN38DMtvzCZbYX7ThfMdYnyrH/eq7B9L3XULYj3Grj9XHxwmImYoGNdflArj70t9b25lH2hnWbA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?r+6sk1fxdd4zCI3qPIMmqr7vmPjWByO7TLxUMFvrjTTgTmtNUvPlfq08kFzO?= =?us-ascii?Q?L536qJWnAlO7+6CWDVtkvQZd8WOYY2ad+2QtmgcmIDmygPuhBfwSRMEHJnf3?= =?us-ascii?Q?exjSWtPVMm5mq4sTCevR67TqZGEa5WATLNQ+qVWKr7lDM9C/8xnog0OdTj7H?= =?us-ascii?Q?tVnj7YgpQ46+9f15lNUrD8r434RpL70tgPBRf9DC9KlVb10oRbQDk9ujaz7V?= =?us-ascii?Q?gZRa1NJDPEFUuVVwIVdoeuww5bzw/988U1f5m4HLK9njsb2xRYSSkIqYwVtX?= =?us-ascii?Q?CYHKU1b3Kh4u9vAR/3gVhKHUq9uRrs7WiKNTQ8Uyw6kYVyJMPMLGbfk3aw+w?= =?us-ascii?Q?94QGe+vDPjSyAAZaSvTMzBSRgrqG+wOB99LiCgSwNVRula36X1BAbg0nlIfS?= =?us-ascii?Q?dNXyPJziuAhQ/nPUVKVTi7Wcjewn9BWe2E+ZePLkbUc1CkummSqZMXweXSHK?= =?us-ascii?Q?cv4F+k4Q4wq65+lbtbQ+iNR2wYn8fgsUrXFSyAh+H+csi1atuU/e2oT2hVkX?= =?us-ascii?Q?kzO/bprXxqpdpqxktSBqbNsELew+j3YcZLqyDN8lbFBbOl8kWCTVNv23brqm?= =?us-ascii?Q?iwPE70o0UOD7yYuu9z60mzPg1m2W483zR3cKgF3fVSxbPgDhGXEi6ZZSoQtC?= =?us-ascii?Q?VqB5xBOP5yqFktyPzrSBvU/V8i2PI8ONgs+AkYGgh/s5akpQdwIQ9fsA1VQU?= =?us-ascii?Q?wMZPiJ1d8V7kAdQPEOipVPppitkGaCEGjaoSHSWw6PndHhthB1/jmNdIdJgj?= =?us-ascii?Q?4yrS14rl9Jn4A37LZRau34xsbx3tUIfYNHpJZHp/YyL4CCy+lEVOLZFNvnDB?= =?us-ascii?Q?mqB4bXrY5QJ300Zq/9sl2i2RIT54x0lg2WVGSAzAdy8XgKvg12pbOq3XSpR8?= =?us-ascii?Q?XXNzz46/qnoTs3HAO+gnUQNABv/3nNMyq0kvtpAToKYwZ89u6sY3pKqBWkLR?= =?us-ascii?Q?sQVTu8xM9RmCCttvBUYA86iMJ9HqMiM3SqeEc+J0MdsKSTwZd0Hvcg4lVUPq?= =?us-ascii?Q?Krw/LylBLN0jB56xF+aKoQYuz54QkNLnu9ArsF2BGwR8xYB5xA8sc4hqnNzv?= =?us-ascii?Q?hdD2onNNWcSwktu/DqUoXhZru8QHTNKoIF0kN7EFPK7IfJWEmX3xjw5lvMfD?= =?us-ascii?Q?PU/ZsmO6d+ihSKFmDoW8ZyyvGAhA8cOsKsva6MWpvUiOjt4AJb6DHIpJ+RM8?= =?us-ascii?Q?lEoM8KcexKmKvSXFM+ErCv794uGP8xahyQzO3j1dCAvukHgLoTjVXE9KxkHr?= =?us-ascii?Q?Drjpuqo3qv+kdd9DnX00actsVYNUra/g2odebfkXtucYYh4F4OPN7HR+BD2e?= =?us-ascii?Q?06+vUEv9qawfMXUdkZKf1bIM/Y/lapTYOvnk5bq+kjxs2Mw6Mf5zd22DpdSL?= =?us-ascii?Q?WNJ2NNKss+nQG7xFXE0XYWNInNkIxQgKctWgUbY5jkxcWiZ1+2AZa2d/8Lxq?= =?us-ascii?Q?FyHOmLf0YvWnittFFOLxAHJvoLsxZmUBsfCFMa+SPrDnMbv59saVOZ+PSZwF?= =?us-ascii?Q?GCdtwpgs9wUGpvMH7ELSIbrGCS6YPA2y1ttcV13d/VGrsFYxvNSz+/SoN4A6?= =?us-ascii?Q?On82+dWA6hiXudkstKfQyVYYD6yB4CYXpBooSHxEjQLLECv7Yg1mFsY9ImI1?= =?us-ascii?Q?nnwK0vvfSgW5hH/FWmHk0sj21R1FW/fU5gzRi/CfOImAVkP+DWuHGD35NBjk?= =?us-ascii?Q?+nMCNSSKelU0zmZrGPQBjLnLJve19J67sHC38gd3qcL5jQ//HhmIwImtzcqV?= =?us-ascii?Q?NNF4amaSkbzglEicIPU9BRKvYy0RNX4KyRmpIYrL0MkDuAZHq13t?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 23025358-a51d-4d56-24da-08dec13490e7 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:24.7409 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Rd9hETpT+SfekkDS/ml3TN+Yl8Ad1Xlucd5QcQ0+w+B2Etziud4UNS/c3E2wIUT6NvFGoY1Zpom4mk2TqekMCN2NqqONaaVPtwR3N9o8EodrAXBbqKz76RwklgyEa90H X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1154 Content-Type: text/plain; charset="utf-8" Add pinctrl bindings for StarFive JHB100 SoC Peripheral-3(per3) pinctrl controller. Signed-off-by: Changhuang Liang --- .../pinctrl/starfive,jhb100-per3-pinctrl.yaml | 165 ++++++++++++++++++ .../pinctrl/starfive,jhb100-pinctrl.h | 14 ++ 2 files changed, 179 insertions(+) create mode 100644 Documentation/devicetree/bindings/pinctrl/starfive,jhb1= 00-per3-pinctrl.yaml diff --git a/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-per3= -pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-p= er3-pinctrl.yaml new file mode 100644 index 000000000000..26cdc9b48d8a --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/starfive,jhb100-per3-pinctr= l.yaml @@ -0,0 +1,165 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/starfive,jhb100-per3-pinctrl.ya= ml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: StarFive JHB100 Peripheral-3 Pin Controller + +description: | + Pinctrl bindings for JHB100 RISC-V SoC from StarFive Technology Ltd. + + The JHB100 SoC has 13 pinctrl domains - sys0, sys0h, sys1, sys2, per0, p= er1, + per2, per2pok, per3, adc0, adc1, emmc, and vga. + This document provides an overview of the "per3" pinctrl domain. + + The "per3" domain has a pin controller which provides + - function selection for GPIO pads. + - GPIO interrupt handling. + + In the Peripheral-3 Pin Controller, there are 11 multi-function GPIO_PAD= s. + Each of them can be multiplexed to several peripherals through function + selection. Each iopad has a maximum of up to 2 functions - 0 and 1. + Function 0 is the default function which is generally the GPIO function. + Function 1 is the alternate function or peripheral signal that can be + routed to an iopad. The function selection can be carried out by writing + the function number to the iopad function select register. + + Each iopad is configurable with parameters such as input-enable, internal + pull-up/pull-down bias, drive strength, schmitt trigger, slew rate, input + debounce nanoseconds, power source. + +maintainers: + - Changhuang Liang + +properties: + compatible: + items: + - const: starfive,jhb100-per3-pinctrl + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + resets: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-controller: true + + '#interrupt-cells': + const: 3 + + gpio-controller: true + + '#gpio-cells': + const: 3 + + gpio-ranges: true + + gpio-line-names: true + +patternProperties: + '-grp$': + type: object + additionalProperties: false + patternProperties: + '-pins$': + type: object + description: | + A pinctrl node should contain at least one subnode representing = the + pinctrl groups available in the domain. Each subnode will list t= he + pins it needs, and how they should be configured, with regard to + function selection, bias, input enable/disable, input schmitt + trigger enable/disable, slew-rate, input debounce nanoseconds, + power-source and drive-strength. + allOf: + - $ref: /schemas/pinctrl/pincfg-node.yaml + - $ref: /schemas/pinctrl/pinmux-node.yaml + additionalProperties: false + + properties: + pins: + description: + The list of IOs that properties in the pincfg node apply to. + + function: + description: + A string containing the name of the function to mux for these + pins. + enum: [ gmac_mdio, gmac_rmii, gpio ] + + bias-disable: true + + bias-pull-down: + type: boolean + + bias-pull-up: + type: boolean + + drive-strength: + enum: [ 2, 4, 8, 12 ] + + drive-strength-microamp: + enum: [ 2000, 4000, 8000, 12000 ] + + input-debounce-ns: + minimum: 0 + maximum: 4294967295 + + input-disable: true + + input-enable: true + + input-schmitt-enable: true + + input-schmitt-disable: true + + power-source: + enum: [ 0, 2 ] + description: | + 0: power supply of 3.3V + 2: power supply of 1.8V + + slew-rate: + enum: [ 0, 1 ] + default: 0 + description: | + 0: slow (half frequency) + 1: fast + +required: + - compatible + - reg + - resets + - interrupts + - interrupt-controller + - '#interrupt-cells' + - gpio-controller + - '#gpio-cells' + - gpio-ranges + +additionalProperties: false + +examples: + - | + soc { + #address-cells =3D <2>; + #size-cells =3D <2>; + + pinctrl_per3: pinctrl@11c42000 { + compatible =3D "starfive,jhb100-per3-pinctrl"; + reg =3D <0x0 0x11c42000 0x0 0x1000>; + resets =3D <&per3crg 6>; + interrupts =3D <64>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_per3 0 0 0 11>; + }; + }; diff --git a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h b/includ= e/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h index 3ceaf9ceeecb..922b152b737c 100644 --- a/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h +++ b/include/dt-bindings/pinctrl/starfive,jhb100-pinctrl.h @@ -230,6 +230,20 @@ #define PADNUM_PER2POK_GPIO_D47 16 #define PADNUM_PER2POK_GPIO_D48 17 =20 +/* per3 pad numbers */ +#define PADNUM_PER3_GPIO_E0 0 +#define PADNUM_PER3_GPIO_E1 1 +#define PADNUM_PER3_GPIO_E2 2 +#define PADNUM_PER3_GPIO_E3 3 +#define PADNUM_PER3_GPIO_E4 4 +#define PADNUM_PER3_GPIO_E5 5 +#define PADNUM_PER3_GPIO_E6 6 +#define PADNUM_PER3_GPIO_E7 7 +#define PADNUM_PER3_GPIO_E8 8 +#define PADNUM_PER3_GPIO_E9 9 +#define PADNUM_PER3_GPIO_E10 10 +#define PADNUM_PER3_GPIO_E11 11 + /* power-source value */ #define JHB100_PINVREF_3_3V 0 #define JHB100_PINVREF_2_5V 1 --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2105.outbound.protection.partner.outlook.cn [139.219.17.105]) (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 834ED3F4DC1; Wed, 3 Jun 2026 05:55:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.105 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466139; cv=fail; b=Owcc66G81ooIiLMTDLkpZpcvcSSPY/fKMzNhhdg8XzHNTukUBhvQBXwATVcEGttaj7qRufiSE5zLT4gT2xvV3oVUdbeMAv2xlFw7CgVqvwElBzmYgab/c5Vf7quCOqrXzJA2u2J4GzUIdaQAdK6M7tHHaG0barOqynCfr3JQQfA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466139; c=relaxed/simple; bh=7VZSc5m0dchLpZl1t61gbuDkLCJOhORxyIm3GXrtZJk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=m7A1EZoUL6rr9udrARMzy2jlBfOzrQJCLvo7IZnjZiYZdOGSCcFBDXxAd7MnqhdWayFRm7ZOWOuNPyqNc2NOUrSubf8mMmjOjhVbBRFlbbStkuvULXO0zM1kIMHnjLh1LrlyJEes5QzbpZRmPHODidkZb1lLvf3oL+RHgzlCzUk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.105 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Vz4NCTrdW8Y+EDtCjeLstc1P7G7TbwSV1Q8CTbTSoXNpf2TLy/vb/ODi+9jd+/OtRfOAndjbvg8Sxw6KG0sNvaPo6vFYpCEnSN3rmAkNjw02Bxp81sXciw+WyZgQXMvStZHRArIwhalOuTIGP7+RvvTFlhE3JLkTBgyKT16E0umcYV7WiJfnM5/y9/WQ5sAGCDe6oF16TY1aTfr4ScO8j2Pcy4ceykzDvMD53AzIdWZ4Wo49qJms+xuJpEcncuW5Fq9EJVygz8o0Hy5P4Iy0R8aP7RRaX2qSmbeih5YCl+tXEISD6W1jkQ6If94YUqoNcgR07/9hPhAHbVQA4TKRjg== 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=Th4obsE9ljubuuU+wZuKCgpV1YrTnb55u5yNmEAyi1U=; b=l37hFVdpBaSIQCmxJw3jAErYZSphP4aXFijSHVsuZaMS42vFlyDfmSuZfAhN7I1DqQGXog24S5FQJnj+8uiBTkRT9bvUeyzpzmOqtsXgAHMdFsGQSRoNWucj31mhoMlNqld29WWJ5ABOraW/Hg8MuJZENkLMvudsy4sUMjvXG5ZzUqdbj0PxAHaEmOrncAIjSkbls6vT7N4npAa2emhl+l4QqXRTkMeNu0PL6X7HyqEsFMgHLnfT6mekTGayBrTVhdrzofVvMzzCOaiAd8hmyfoJ82qs8pQB31CicO3SpGQtdslCtBohnJmsVYFxO6riyBZypjBDA+tw9KOMRLhGeQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1154.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:26 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:26 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 20/21] pinctrl: starfive: Add StarFive JHB100 per3 controller driver Date: Tue, 2 Jun 2026 22:53:46 -0700 Message-Id: <20260603055347.66845-21-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1154:EE_ X-MS-Office365-Filtering-Correlation-Id: 336ded67-85fe-4f7f-f645-08dec13491a2 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|3023799007|22082099003|18002099003|6133799003|5023799004|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: gqiRV2NGhxSsJoR86oqm7y9LP7PNx8sYBGBgT08Q/2+VuImT+r94e78RmXapgSdDzacUoARhDxZ1PArWXHFE18FFql7BOMId588HTodsZEZSVTfenxeeyjII7enRfJ2koK9yMkem7U/ImJeBJDO8Tk+Kbib0bE9OrYRqU7/R2egiUrmqKTsXjOdlHItXr1SCHZ/kxEomZHG1OAOOfFHqBfVftpiem7BPxrnbxNnj/lfcoCW3vZi+LeYzVNN9zsCAQhvPZb+xeSl285Xip7h61DAaMUdoCasCG80NCq+Q3Hh5d9u60xwTD7yBZ3Ldv6dbe7dv0FxRLfipcPRwNXevRBE80YrZphw4+Ri6/8AE+cf/Zvn6hPTbMiKI08pPYWm2GAjjYLkpu4nR75C1xzWx9G3w7N5TyIhifMzI4wYv6aXJJLfWiJmQSXxDWIQem9ugP3xZH6qOqngD8VlLIyHbqLSKEiikJToqB/kYXWb++3ezMD/L35LCkstywJRJCkXegi0UQRId/re/IcewPwfiPhVLR7sx97WBByOCEZHLal1+j5Yd/BhhrNGF21xpNgvi4iq6kjrzUQpUZQIhlYmnHA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(3023799007)(22082099003)(18002099003)(6133799003)(5023799004)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RGyV3TrbWtl7449v3MiLHmlzdjuAhfbNAF8X8GAicv9IaW1HkH4nJeTNC3ln?= =?us-ascii?Q?50H0HyOqixwVI4SjJ0Ax+NVawdx7gZeHuqAec+x8iEWPZwuUEfTs0h6ca6V9?= =?us-ascii?Q?73Aptg1tS4pQyC5gf5wA/yaoJuChva8Wrf4QY4YKyGs6BOv69j03B8KXWf+e?= =?us-ascii?Q?ua/Oe/xCKGTWQDgdDAUZ6ncCjoYRtzwIsKOfqWfufc7zlWvWSotWX0xFg5LL?= =?us-ascii?Q?CFz31DRhAnLghea6OYcnTIKCy1aBDQVG6Ej4UUz7bYkUQaDkguIsOrv24zYk?= =?us-ascii?Q?WgK54vwoO6jYpmfOWYQ/DmCDPt4DHJEbWwLgZbnrg1UTksvRXwVO9POESIh+?= =?us-ascii?Q?mZqvfdPoXI7a4+D9/VADhfEuJsuWJx9s7Bwx6f/zZZ0QpEKpnjBE0ZYSync9?= =?us-ascii?Q?MRC3tM5/nAux1h1s9HEkBxugNsRIkNanRkNrrc714KaJknAF74JimTVi+l+C?= =?us-ascii?Q?6sJs7PnRM7PLTQRh4X5aPEuKQvq33+WCVizzah4Wu1hG5HkzlAc448R9JLdV?= =?us-ascii?Q?9lr5hu5/weCtogTJ5+kaK7sFrJhgSg9zMLguzAur8/NbpG3M2ZIwt5Xz1DDa?= =?us-ascii?Q?pnxx8nk+5x3/jEevDUtIkgeryxT3paDThyet2RBAAbQzwS5PAH+UwrwF0Wsi?= =?us-ascii?Q?EHmGijD1l25fbGxKoyIgKA+sXrKxmO8nwJsCNs3j6y4XPd2+8x7bfP9DtuIa?= =?us-ascii?Q?6ary0tmMLL1TlTCQCOHwdF+26mHG64H7ri0m8qgBeMiyltS/EDyxivfL/RXB?= =?us-ascii?Q?PgfKp3mWDm+lvs+hiHzDsvxgNl0u8wgxa6wBDQoHT31/d0TVMXYoNsYhzrVl?= =?us-ascii?Q?pPpEm/k7JvNAfRLp7hRdEaQh2E7PEFYoPJa2YDJ/wgX/wzu6bX8JdP/JlmEl?= =?us-ascii?Q?XTPuF9rmWZZmo13LHWjlT019AskD2NlKXnaGEdH2DPzrytc/L0Zk4uatNiZO?= =?us-ascii?Q?zuujwzD1o2ScvJTaTM4I9axrfB3SwQNgGU0WB1Bq/2fnBEaL3M6htzKJwoSm?= =?us-ascii?Q?Vcr+iJMwR0Le5mO68iF8kJad2NE5aLY5jqKhEJsC8lNDzPgB6trIOK28z4hV?= =?us-ascii?Q?3aXp4w58P+UzaO0hHh5Dzrtm63/AmIyb20sEn/nVDQdFZu6+mdl0HfDnPMfw?= =?us-ascii?Q?aIrtbt1FcBhy1l544pxr5U2QxBWbekreY014qEAWGNq2UC4Xza9h3lkuTCIq?= =?us-ascii?Q?taNMStqQfawVb1ZcqQpL4Gsg7fRYVBwYNttuIhbXTA3eiCRoo/27M4L8mn1k?= =?us-ascii?Q?qJ2tEle7vrtxdacVhRqJhPwBkbmP87YotHFiStASwTZZzAjaywJPDJ4fqM8X?= =?us-ascii?Q?fio0czWp5pRUrSKjKyj/OwaxUXCqcuF4iLRpjmLPz0cSB/tiIJmsarAsY2Zp?= =?us-ascii?Q?eKGufBOez39ROvrvtnYAlhkRXb8v4zj0PYf1qOoMtJk2Swk6WfYPjcjBds+Y?= =?us-ascii?Q?lna3R5aMgdysNtDcoC7OE2BE3uEunHafISRDC1SZ6+sInTc8UFjgTwgioqXl?= =?us-ascii?Q?NGUNmpy2tEItzyJ5pt2Tzax4XlnNWuJK/Ugc8I+HIh4IktP0W+OJxN3YiWpJ?= =?us-ascii?Q?gWp+TrAJmR0YnvklLxw0vaYHY3HIjRaEUW2lVXXDLGBRvUCbLPREOXzmI+w/?= =?us-ascii?Q?Jh044Pzm3j4IpXpt3yL/bF4asOBoU6fYH1BxaHBarPY0WsDTyQxue4jYcwDp?= =?us-ascii?Q?HphnNwGko4hufbEMI4+cvA1GJ3zMEbEmPiWb/ib3mNGby9/UUQE12elFuoqE?= =?us-ascii?Q?jrFYVN2GzCUa5A0J3SKRyBpeoBJK9slaNpm2nYtH3iyeGFoKZYRs?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 336ded67-85fe-4f7f-f645-08dec13491a2 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:25.9822 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zPaEtzL/wAkY9tcuWV93Nn5Wnry4YBJ1Y1So59ziIAQ1IyikGNQmCxQOzCaRfCDr8sVsmw8CBXCdUn461J10OACHB7+/NRGXPWNz/TinLWpmVsBpjoANATAkEIfnNtEg X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1154 Content-Type: text/plain; charset="utf-8" Add pinctrl driver for StarFive JHB100 SoC Peripheral-3(per3) pinctrl controller. Co-developed-by: Lianfeng Ouyang Signed-off-by: Lianfeng Ouyang Signed-off-by: Changhuang Liang --- drivers/pinctrl/starfive/Kconfig | 12 ++ drivers/pinctrl/starfive/Makefile | 1 + .../starfive/pinctrl-starfive-jhb100-per3.c | 119 ++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per3.c diff --git a/drivers/pinctrl/starfive/Kconfig b/drivers/pinctrl/starfive/Kc= onfig index bf5915e0a5f2..da1dcdcc4140 100644 --- a/drivers/pinctrl/starfive/Kconfig +++ b/drivers/pinctrl/starfive/Kconfig @@ -103,6 +103,18 @@ config PINCTRL_STARFIVE_JHB100_PER2POK peripherals supporting inputs, outputs, configuring pull-up/pull-down and interrupts on input changes. =20 +config PINCTRL_STARFIVE_JHB100_PER3 + tristate "StarFive JHB100 SoC Peripheral-3 pinctrl and GPIO driver" + depends on ARCH_STARFIVE || COMPILE_TEST + depends on OF + select PINCTRL_STARFIVE_JHB100 + default ARCH_STARFIVE + help + Say yes here to support Peripheral-3 pin control on the StarFive JHB100= SoC. + This also provides an interface to the GPIO pins not used by other + peripherals supporting inputs, outputs, configuring pull-up/pull-down + and interrupts on input changes. + config PINCTRL_STARFIVE_JHB100_SYS0 tristate "StarFive JHB100 SoC System-0 pinctrl and GPIO driver" depends on ARCH_STARFIVE || COMPILE_TEST diff --git a/drivers/pinctrl/starfive/Makefile b/drivers/pinctrl/starfive/M= akefile index 213002da9cdd..351fce524fec 100644 --- a/drivers/pinctrl/starfive/Makefile +++ b/drivers/pinctrl/starfive/Makefile @@ -11,6 +11,7 @@ obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER0) +=3D pinctrl-s= tarfive-jhb100-per0.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER1) +=3D pinctrl-starfive-jhb100-pe= r1.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER2) +=3D pinctrl-starfive-jhb100-pe= r2.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER2POK) +=3D pinctrl-starfive-jhb100= -per2pok.o +obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_PER3) +=3D pinctrl-starfive-jhb100-pe= r3.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0) +=3D pinctrl-starfive-jhb100-sy= s0.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS0H) +=3D pinctrl-starfive-jhb100-s= ys0h.o obj-$(CONFIG_PINCTRL_STARFIVE_JHB100_SYS1) +=3D pinctrl-starfive-jhb100-sy= s1.o diff --git a/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per3.c b/driv= ers/pinctrl/starfive/pinctrl-starfive-jhb100-per3.c new file mode 100644 index 000000000000..1379599c99a8 --- /dev/null +++ b/drivers/pinctrl/starfive/pinctrl-starfive-jhb100-per3.c @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Pinctrl / GPIO driver for StarFive JHB100 SoC Peripheral-3 domain + * + * Copyright (C) 2024 StarFive Technology Co., Ltd. + * Author: Alex Soo + * + */ + +#include +#include +#include + +#include "pinctrl-starfive-jhb100.h" + +static const struct jhb100_pin_layout_desc jhb100_per3_pl_desc[] =3D { + { .pin_start =3D 0, .pin_cnt =3D 11, .name =3D "gpio", .gpio_func_sel =3D= 0 }, + { 0xff }, +}; + +static struct config_reg_layout_desc jhb100_per3_pinctrl_rl_desc[] =3D { + { + .pin_start =3D 0, + .pin_cnt =3D 2, + .drive_strength_2bit =3D { .shift =3D 0, .width =3D 2 }, + .input_enable =3D { .shift =3D 2, .width =3D 1 }, + .pull_down =3D { .shift =3D 3, .width =3D 1 }, + .pull_up =3D { .shift =3D 4, .width =3D 1 }, + .slew_rate =3D { .shift =3D 5, .width =3D 1 }, + .schmitt_trigger_select =3D { .shift =3D 6, .width =3D 1 }, + .reserved =3D { .shift =3D 7, .width =3D 8 }, + .debounce_width =3D { .shift =3D 15, .width =3D 17 }, + }, + { + .pin_start =3D 2, + .pin_cnt =3D 9, + .input_enable =3D { .shift =3D 0, .width =3D 1 }, + .slew_rate =3D { .shift =3D 1, .width =3D 1 }, + .vsel =3D { .shift =3D 2, .width =3D 2 }, + .reserved =3D { .shift =3D 4, .width =3D 11 }, + .debounce_width =3D { .shift =3D 15, .width =3D 17 }, + }, + { 0xff }, +}; + +static const struct pinvref_desc pinvref_desc_per3[] =3D { + { + /* gpios */ + .pin_grp =3D { + PADNUM_PER3_GPIO_E0, + PADNUM_PER3_GPIO_E1, + PADNUM_PER3_GPIO_E2, + PADNUM_PER3_GPIO_E3, + PADNUM_PER3_GPIO_E4, + PADNUM_PER3_GPIO_E5, + PADNUM_PER3_GPIO_E6, + PADNUM_PER3_GPIO_E7, + PADNUM_PER3_GPIO_E8, + PADNUM_PER3_GPIO_E9, + PADNUM_PER3_GPIO_E10 + }, + .num_pins =3D 11, + .range =3D BIT(JHB100_PINVREF_1_8V) | BIT(JHB100_PINVREF_3_3V) + }, +}; + +struct starfive_pinctrl_regs jhb100_per3_pinctrl_regs =3D { + .vref =3D { .reg =3D 0x00, .pv_desc =3D pinvref_desc_per3, + .num_pv =3D ARRAY_SIZE(pinvref_desc_per3) }, + .func_sel =3D { .reg =3D 0x3c, .width_per_pin =3D 2 }, + .config =3D 0x04, + .output =3D 0x30, + .output_en =3D 0x34, + .gpio_status =3D 0x38, + .irq_en =3D 0x40, + .irq_status =3D 0x44, + .irq_clr =3D 0x48, + .irq_trigger =3D 0x4c, + .irq_level =3D 0x50, + .irq_both_edge =3D 0x54, + .irq_edge =3D 0x58, +}; + +static const struct jhb100_pinctrl_func_maps jhb100_func_maps_per3[] =3D { + { .func =3D "gmac_mdio", .val =3D 1 }, + { .func =3D "gmac_rmii", .val =3D 1 }, + { .func =3D "gpio", .val =3D 0 }, +}; + +static const struct jhb100_pinctrl_domain_info jhb100_per3_pinctrl_info = =3D { + .name =3D "jhb100-per3", + .pl_desc =3D jhb100_per3_pl_desc, + .crl_desc =3D jhb100_per3_pinctrl_rl_desc, + .regs =3D &jhb100_per3_pinctrl_regs, + .fmaps =3D jhb100_func_maps_per3, + .num_maps =3D ARRAY_SIZE(jhb100_func_maps_per3), +}; + +static const struct of_device_id jhb100_per3_pinctrl_of_match[] =3D { + { + .compatible =3D "starfive,jhb100-per3-pinctrl", + .data =3D &jhb100_per3_pinctrl_info, + }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, jhb100_per3_pinctrl_of_match); + +static struct platform_driver jhb100_per3_pinctrl_driver =3D { + .probe =3D jhb100_pinctrl_probe, + .driver =3D { + .name =3D "starfive-jhb100-per3-pinctrl", + .of_match_table =3D jhb100_per3_pinctrl_of_match, + }, +}; +module_platform_driver(jhb100_per3_pinctrl_driver); + +MODULE_DESCRIPTION("Pinctrl driver for StarFive JHB100 SoC Peripheral-3 do= main"); +MODULE_AUTHOR("Alex Soo "); +MODULE_LICENSE("GPL"); --=20 2.25.1 From nobody Mon Jun 8 06:36:23 2026 Received: from CHN02-BJS-obe.outbound.protection.partner.outlook.cn (mail-bjschn02on2105.outbound.protection.partner.outlook.cn [139.219.17.105]) (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 221903F8EC2; Wed, 3 Jun 2026 05:55:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=139.219.17.105 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466141; cv=fail; b=lKkmLmYhkDCBSxt3urIr76g4DvQcv4JKdceiYA1NdIiIJqwmlQ9BVexnmkiPqDrAJDloxl9DOyF/gbwfmSn27Iq+hawAZMMtl4pOpoUouXHJmSq+Q7i3M/idJsypGxiwvfPyuHWsIAWEMEvrMEtTV/Zoquu4d94pGtzgdxA48xI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780466141; c=relaxed/simple; bh=6pWRsCWbJDlED32ExP7kFEY5RclA+iEA8hEo6bpmdg4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=EeAIVKYHULhOGmPFBaD2StCpO6/izxH55rEfNxPCCt68oIVBEbVjKgv1CIYW1lmgaIfwoix3pzAsPav9WK32dENb4WBjthUmSwkLasPaBTwVCfL+9aTlJ48OmIipUw0rMogGL+g02kmjhPWLKDkg+G7sIvElM+xIpcQfHPjgHeM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com; spf=pass smtp.mailfrom=starfivetech.com; arc=fail smtp.client-ip=139.219.17.105 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=starfivetech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=starfivetech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MwMBasDWA9eKmakN7OQCQj0IhIMJm3hwychlN7liHiQCmsjLSnPlmv4NVHh3n10xsMtOZLouNky0p8c81dpHkkTRhVtPXLIt8p4SHC0SNCAWLT3/FGv/MYXSuBI0XIejWywyjoxpp+3RW1iewuTS9STMOJN1hbg39CgGG9PBi6gVn3nxhc/brb9Ls6UEySFy9qqNiRzVCoDUQLOoc4P9CzsKLdPkaAlXwN7/s+Q6okN1eD1M9COcUqSMcL9kLv54sxll/hb4rMKtYkEPujSCazArVCjfXV8QRmnpBCESh5Thx4q6Hr9oyTfqkpGxPNg8ZydZBDgE4oXOR+vJDUFYeg== 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=YA7Nzo5z2sMG7Q+oDuElsZaNB++kqRi1wcj18uba+8E=; b=e2KAkKzFas8qf0jz2gzAT+H6b1GJgNFguBXdwQ3MENBddGItZypE+WkzfPFkfTbnCI5GbbZJavJaVCP2BzMl7BZb3vzfcrLdFq3cBCWT/EL0KHHRpg1N6WITtB5PMqzXLjcB9MT2T1DIDW7ek5jTFZ0vx8Stcr4eJNXb92mJZXXYGpVewTR5cNZBFLaVI691N4OOIzlBKzAliV7lJlG15cx3E3DSEXFw6BwhC4jC9RuzyfQZ0j1n1M2MbNtakqyBf03SYtfNTVqpDI4GD9IgZvlZj2SaMLF8J/rkdV76biJOSaCnAYHE2csIyviFEmFiiz4RjaZQ8tBw0A/Y50OE+g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=starfivetech.com; dmarc=pass action=none header.from=starfivetech.com; dkim=pass header.d=starfivetech.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=starfivetech.com; Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) by ZQ4PR01MB1154.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Wed, 3 Jun 2026 05:54:27 +0000 Received: from ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d]) by ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn ([fe80::e7d4:256c:b066:850d%5]) with mapi id 15.21.0092.006; Wed, 3 Jun 2026 05:54:27 +0000 From: Changhuang Liang To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Emil Renner Berthing , Paul Walmsley , Albert Ou , Palmer Dabbelt , Alexandre Ghiti , Philipp Zabel , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, Lianfeng Ouyang , Changhuang Liang Subject: [PATCH v3 21/21] riscv: dts: starfive: jhb100: Add pinctrl nodes Date: Tue, 2 Jun 2026 22:53:47 -0700 Message-Id: <20260603055347.66845-22-changhuang.liang@starfivetech.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260603055347.66845-1-changhuang.liang@starfivetech.com> References: <20260603055347.66845-1-changhuang.liang@starfivetech.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SH0PR01CA0002.CHNPR01.prod.partner.outlook.cn (2406:e500:c311:5::14) To ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn (2406:e500:c550:17::6) 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: ZQ4PR01MB1202:EE_|ZQ4PR01MB1154:EE_ X-MS-Office365-Filtering-Correlation-Id: 400d55fe-d236-4074-9f0a-08dec1349262 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|52116014|366016|22082099003|18002099003|56012099006|38350700014|921020; X-Microsoft-Antispam-Message-Info: WMyVJ/Njo7v3gZ8NKuefB7adp9X+Mm72dINKntHk4+2wTjCyuMOPTkOGkqynQEkDVMToPmuuYIim+dryEpjtw2ENhLKXnr2M8ZLcB6qR2NHZqIXGqKumavWh4CHTTbj7/qjWZjNxpuHRh9f895vU+rj9kFhhSfB6phQVVhFcdwW/DyuAUr8UTebvQnZFrd6Dps+dSunEuAC6QyIHqLwirWRDevVUtkh4QRZedcWx8e3zAPntc7mRCBlFYLUt0HqtDl1wIrY23qLYMSt5wK5KMUAlrfWgvPH44MgWM9j02XNufDg1fY7uI4jHtg6e9c9khW23KgLwhyQbm0UPn+7GdB9ong/d27Keu1iFOgP2IVdbjJwKzC6O0tSwQehknfRIPgsowO83y8WNQvoSJ99tVZDeMISNe4rpeGRkb7vzfuKRFiDY0R3L/HVdrrz+WLSZ0Q8kAN7GtAek7cRpbs4x1bpoWfWRL0U8Wokm88p0H0vaoJMo/axey/e2zMMDtwQceG5ARAfUMFazsIJiXcRobBq3LdJ80YW77NvQe5U7qSj4EAYjhJV4UshK6AhmQ4KXnWcEAQr7kO/TddC628AYAw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(52116014)(366016)(22082099003)(18002099003)(56012099006)(38350700014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?CMYBxmglo+oBTf8reMufq2tTZeexZP/VbX6Rgva52Y19u/zVlgy4qPVXM15X?= =?us-ascii?Q?BuKpml74GhQV8BMKpUKqq+MKKOJiRZGl9AytFKysbZKUmbVebLVslKNJwuwB?= =?us-ascii?Q?Or1ko47Mr7RpwIEaJZPHaXGR1NvaIKgpl0OPVAx5Y3SDlxorxcSRJB4XrI+x?= =?us-ascii?Q?f6qJFPZB5Kc4SCu477oicWcYKFTDUp9H6DoMaCYx12sWemGqBNX1Oei1nivt?= =?us-ascii?Q?hk6ZjCIO0oC73wB1Y6/4DId7e5H28MalkZX/x7ZU6dkz5AsYiQ5H8NaTmL7q?= =?us-ascii?Q?dmQmrVq1j9m8AfcsBltHsuH5sWsybKkYc48xlJ+sgatbLCVylTiHFtlRL+Xw?= =?us-ascii?Q?awNVxu2O76Kh1YoPfPpT1H5dhSRhoyH9fVPuqaxc16Q8NppNiFzeU8o5SJeg?= =?us-ascii?Q?CiQyG/R0rD009pHpQtspmljJpJpA5BIxQ3pwTC1svI6jeD+wosHrIt8Tknj9?= =?us-ascii?Q?KWBafm9jjxTalHQyycsq1QjhscUlINd1+tbY7AlkK4qlWK0zD5HjGULfZkDx?= =?us-ascii?Q?Yy4ti4QrW9SwP39lj6fGNgGpyTkIArb8rEpXwpEgf2pUYsXhkXyIlY6CyiMB?= =?us-ascii?Q?AMRsZE9MovBiqXNX1V2UcgXey3G/gsIPwPSK1EIcwtAinnD5L9r7MfmxCENZ?= =?us-ascii?Q?tAlQzGXEGU9AfKC1qnbECZRYm0GqlcDPx9vpvQ3yWvph87/W61IsLioCzdM8?= =?us-ascii?Q?Y09JRWVUNlhGk7NrrFoS991zIhyrbr4ZRMLKV55FQmcxknGgwqPJ0LiX/pYu?= =?us-ascii?Q?OoDbaO3TIHmhFQaKIg8g3BUd7Cl/qaF2udlWsSwMrO++61LwIHN9ryOy572P?= =?us-ascii?Q?+g+7QXuQrZUglORuPKS3i7rjVszaWXlc89sYAPCTCcE7DGTrqc8UB/EdnzTb?= =?us-ascii?Q?qWaiitEZD4ObHtCb4LvyCfzEFY3T1v+3L4sHwFuJoiWybcWtAKi3mhwg2cYr?= =?us-ascii?Q?AgzoMAqY7RkheqTu7abp8p+edrjaIuE0tKnmC1sp25rEl+RKQNTTNN5VSzpA?= =?us-ascii?Q?mEkZqInSNggV6N7NsOJ1woxOSjM4L/li7mnD1lCIrMZkHyME/B7xL8pVtOa0?= =?us-ascii?Q?PK/8yZGeKG/4kGKlxhVNEdjZIeRlvsCgY599R7aHQi4kuBV+8jXs6a8B6IMr?= =?us-ascii?Q?ddl+eieekaomDonH8olXTboXcKBlPdKc1FneZN7a2rnpQEeWin7BzI9UrW0K?= =?us-ascii?Q?hHoMlRZXE+NK2VD5lgajUKW8MXs53NVOfxlStXK0VlbgeS+1/y/sjMdbbonp?= =?us-ascii?Q?o9jAT5ftyo8H7Mc2WMfNPRfVrxk0H3vnyd5sx2/E8cehUJzPCxZDgQDO9ZEZ?= =?us-ascii?Q?KEFYbdTcCtNUn9MSMD2ePJNDJ6INt9d9h4dY04fAp5er9+gez/s+r0c3GnuX?= =?us-ascii?Q?/e4OLGF4krmh+awZ6vlAw+flAkf+Bj/PlmcT+RT0NV2ta0cE2po1kzIXQE2g?= =?us-ascii?Q?Yh9PYlMDMTOCf9rqeSCyrbr9fMIS9HBM1sAYMXXdDX8cmO7n8PK92BPMWVQu?= =?us-ascii?Q?ME3rfXbuJGibU0/Y0pdQ5yOaa0Fjpe3Q0c/O4ILTMCQwsQxRsQ9KO4t9OVkO?= =?us-ascii?Q?OOhQ/Sxb2m8cxiXtRe4g7rU8ma96o4uNHgZbLULKO7T38sHZ38X6DbltdQ8h?= =?us-ascii?Q?IDAQQ/RpVi0/MpaSM0nWAu0LE4TUSwOy+y9QBazlKnaSuWXKrgjMjhTrncYs?= =?us-ascii?Q?j9zynVihXhUKNikSFt6IJhD2qmxbuI2vnJXQIkfLx2cbjVOunYZMstpVEHC9?= =?us-ascii?Q?j1wgZnVZhhhYwOrq+r+Wu5aXnwCIzQ9uOOUatW+Dv5znWhtOUINO?= X-OriginatorOrg: starfivetech.com X-MS-Exchange-CrossTenant-Network-Message-Id: 400d55fe-d236-4074-9f0a-08dec1349262 X-MS-Exchange-CrossTenant-AuthSource: ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2026 05:54:27.2396 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 06fe3fa3-1221-43d3-861b-5a4ee687a85c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ORMriaDURR8/UJqCX5XW9RC67UXZYRBngnBE3//G4sVbYMXJVbIHxd7Ato62yXpI8+9cG98cExJTuSYHeQFaGcWIzP5FLgLtJU7foNVdOLcJPWKYx86jQYgQ0XYsowD2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: ZQ4PR01MB1154 Content-Type: text/plain; charset="utf-8" Add pinctrl nodes for starfive JHB100 SoC. They contain pinctrl_per0/pinctrl_per1/pinctrl_per2/pinctrl_per2pok/pinctrl_per3/ pinctrl_sys0/pinctrl_sys0h/pinctrl_sys1/pinctrl_sys2. Simultaneously add the pinctrl reference for uart6. Co-developed-by: Lianfeng Ouyang Signed-off-by: Lianfeng Ouyang Signed-off-by: Changhuang Liang --- arch/riscv/boot/dts/starfive/jhb100-evb1.dts | 3 + .../boot/dts/starfive/jhb100-pinctrl.dtsi | 23 ++++ arch/riscv/boot/dts/starfive/jhb100.dtsi | 110 ++++++++++++++++++ 3 files changed, 136 insertions(+) create mode 100644 arch/riscv/boot/dts/starfive/jhb100-pinctrl.dtsi diff --git a/arch/riscv/boot/dts/starfive/jhb100-evb1.dts b/arch/riscv/boot= /dts/starfive/jhb100-evb1.dts index 462b6fb7953b..8ad2b30a4e0b 100644 --- a/arch/riscv/boot/dts/starfive/jhb100-evb1.dts +++ b/arch/riscv/boot/dts/starfive/jhb100-evb1.dts @@ -4,6 +4,7 @@ */ =20 #include "jhb100.dtsi" +#include "jhb100-pinctrl.dtsi" =20 / { model =3D "StarFive JHB100 EVB-1"; @@ -29,4 +30,6 @@ memory@40000000 { =20 &uart6 { status =3D "okay"; + pinctrl-names =3D "default"; + pinctrl-0 =3D <&uart6_pins>; }; diff --git a/arch/riscv/boot/dts/starfive/jhb100-pinctrl.dtsi b/arch/riscv/= boot/dts/starfive/jhb100-pinctrl.dtsi new file mode 100644 index 000000000000..acc357e98548 --- /dev/null +++ b/arch/riscv/boot/dts/starfive/jhb100-pinctrl.dtsi @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +/* + * Copyright (c) 2025-2026 StarFive Technology Co., Ltd. + */ + +#include + +&pinctrl_sys2 { + uart6_pins: uart6-grp { + uart6-tx-pins { + pins =3D ; + function =3D "uart"; + power-source =3D ; + }; + + uart6-rx-pins { + pins =3D ; + function =3D "uart"; + input-enable; + power-source =3D ; + }; + }; +}; diff --git a/arch/riscv/boot/dts/starfive/jhb100.dtsi b/arch/riscv/boot/dts= /starfive/jhb100.dtsi index 943324b3b2fd..f9a7fa9d37e3 100644 --- a/arch/riscv/boot/dts/starfive/jhb100.dtsi +++ b/arch/riscv/boot/dts/starfive/jhb100.dtsi @@ -428,6 +428,19 @@ per0crg: clock-controller@11a08000 { #reset-cells =3D <1>; }; =20 + pinctrl_per0: pinctrl@11a0a000 { + compatible =3D "starfive,jhb100-per0-pinctrl"; + reg =3D <0x0 0x11a0a000 0x0 0x1000>; + resets =3D <&per0crg JHB100_PER0RST_GPIO_IOMUX_PRESETN>; + interrupts =3D <60>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_per0 0 0 0 32>, + <&pinctrl_per0 1 0 32 28>; + }; + per1crg: clock-controller@11b40000 { compatible =3D "starfive,jhb100-per1crg"; reg =3D <0x0 0x11b40000 0x0 0x1000>; @@ -443,6 +456,19 @@ per1crg: clock-controller@11b40000 { #reset-cells =3D <1>; }; =20 + pinctrl_per1: pinctrl@11b42000 { + compatible =3D "starfive,jhb100-per1-pinctrl"; + reg =3D <0x0 0x11b42000 0x0 0x800>; + resets =3D <&per1crg JHB100_PER1RST_IOMUX_PRESETN>; + interrupts =3D <61>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_per1 0 0 0 32>, + <&pinctrl_per1 1 0 32 4>; + }; + per2crg: clock-controller@11bc0000 { compatible =3D "starfive,jhb100-per2crg"; reg =3D <0x0 0x11bc0000 0x0 0x1000>; @@ -464,6 +490,30 @@ per2crg: clock-controller@11bc0000 { #reset-cells =3D <1>; }; =20 + pinctrl_per2: pinctrl@11bc2000 { + compatible =3D "starfive,jhb100-per2-pinctrl"; + reg =3D <0x0 0x11bc2000 0x0 0x400>; + resets =3D <&per2crg JHB100_PER2RST_IOMUX_PRESETN>; + interrupts =3D <62>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_per2 0 0 0 31>; + }; + + pinctrl_per2pok: pinctrl@11bc2400 { + compatible =3D "starfive,jhb100-per2pok-pinctrl"; + reg =3D <0x0 0x11bc2400 0x0 0x400>; + resets =3D <&per2crg JHB100_PER2RST_POK_IOMUX_PRESETN>; + interrupts =3D <63>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_per2pok 0 0 0 18>; + }; + per3crg: clock-controller@11c40000 { compatible =3D "starfive,jhb100-per3crg"; reg =3D <0x0 0x11c40000 0x0 0x1000>; @@ -483,6 +533,18 @@ per3crg: clock-controller@11c40000 { #reset-cells =3D <1>; }; =20 + pinctrl_per3: pinctrl@11c42000 { + compatible =3D "starfive,jhb100-per3-pinctrl"; + reg =3D <0x0 0x11c42000 0x0 0x1000>; + resets =3D <&per3crg JHB100_PER3RST_IOMUX_PRESETN>; + interrupts =3D <64>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_per3 0 0 0 11>; + }; + sys0crg: clock-controller@13000000 { compatible =3D "starfive,jhb100-sys0crg"; reg =3D <0x0 0x13000000 0x0 0x4000>; @@ -517,6 +579,54 @@ sys2crg: clock-controller@13008000 { #reset-cells =3D <1>; }; =20 + pinctrl_sys0: pinctrl@13080000 { + compatible =3D "starfive,jhb100-sys0-pinctrl"; + reg =3D <0x0 0x13080000 0x0 0x800>; + resets =3D <&sys0crg JHB100_SYS0RST_SYS0_IOMUX_PRESETN>; + interrupts =3D <56>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_sys0 0 0 0 4>; + }; + + pinctrl_sys0h: pinctrl@13080800 { + compatible =3D "starfive,jhb100-sys0h-pinctrl"; + reg =3D <0x0 0x13080800 0x0 0x800>; + resets =3D <&sys0crg JHB100_SYS0RST_SYS0H_IOMUX_PRESETN>; + interrupts =3D <57>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_sys0h 0 0 0 12>; + }; + + pinctrl_sys1: pinctrl@13081000 { + compatible =3D "starfive,jhb100-sys1-pinctrl"; + reg =3D <0x0 0x13081000 0x0 0x1000>; + resets =3D <&sys1crg JHB100_SYS1RST_SYS1_IOMUX_PRESETN>; + interrupts =3D <58>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_sys1 0 0 0 8>; + }; + + pinctrl_sys2: pinctrl@13082000 { + compatible =3D "starfive,jhb100-sys2-pinctrl"; + reg =3D <0x0 0x13082000 0x0 0x1000>; + interrupts =3D <59>; + interrupt-controller; + #interrupt-cells =3D <3>; + gpio-controller; + #gpio-cells =3D <3>; + gpio-ranges =3D <&pinctrl_sys2 0 0 0 32>, + <&pinctrl_sys2 1 0 32 5>; + }; + intc: interrupt-controller@13220000 { compatible =3D "starfive,jhb100-intc"; reg =3D <0x0 0x13220000 0x0 0x80>; --=20 2.25.1