1 # SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
4 $id: http://devicetree.org/schemas/pinctrl/starfive,jh7100-pinctrl.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
7 title: StarFive JH7100 Pin Controller
10 Bindings for the JH7100 RISC-V SoC from StarFive Ltd.
12 Out of the SoC's many pins only the ones named PAD_GPIO[0] to PAD_GPIO[63]
13 and PAD_FUNC_SHARE[0] to PAD_FUNC_SHARE[141] can be multiplexed and have
14 configurable bias, drive strength, schmitt trigger etc. The SoC has an
15 interesting 2-layered approach to pin muxing best illustrated by the diagram
18 Signal group 0, 1, ... or 6
21 LCD output -----------------| |
22 CMOS Camera interface ------| |--- PAD_GPIO[0]
23 Ethernet PHY interface -----| MUX |--- PAD_GPIO[1]
26 -------- GPIO0 ------------| |
27 | -------|-- GPIO1 --------| |--- PAD_FUNC_SHARE[0]
28 | | | | | |--- PAD_FUNC_SHARE[1]
30 | | | | | |--- PAD_FUNC_SHARE[141]
31 | | -----|---|-- GPIO63 ---| |
36 The big MUX in the diagram only has 7 different ways of mapping peripherals
37 on the left to pins on the right. StarFive calls the 7 configurations "signal
39 However some peripherals have their I/O go through the 64 "GPIOs". The
40 diagram only shows UART0 and UART1, but this also includes a number of other
41 UARTs, I2Cs, SPIs, PWMs etc. All these peripherals are connected to all 64
42 GPIOs such that any GPIO can be set up to be controlled by any of the
44 Note that signal group 0 doesn't map any of the GPIOs to pins, and only
45 signal group 1 maps the GPIOs to the pins named PAD_GPIO[0] to PAD_GPIO[63].
48 - Emil Renner Berthing <kernel@esmil.dk>
49 - Drew Fustini <drew@beagleboard.org>
53 const: starfive,jh7100-pinctrl
77 description: The GPIO parent interrupt.
79 interrupt-controller: true
84 starfive,signal-group:
86 Select one of the 7 signal groups. If this property is not set it
87 defaults to the configuration already chosen by the earlier boot stages.
88 $ref: /schemas/types.yaml#/definitions/uint32
89 enum: [0, 1, 2, 3, 4, 5, 6]
91 starfive,keep-gpiomux:
92 description: Keep pinmux for these GPIOs from being reset at boot.
93 $ref: /schemas/types.yaml#/definitions/uint32-array
103 - interrupt-controller
113 A pinctrl node should contain at least one subnode representing the
114 pinctrl groups available on the machine. Each subnode will list the
115 pins it needs, and how they should be configured, with regard to
116 muxer configuration, bias, input enable/disable, input schmitt
117 trigger enable/disable, slew-rate and drive strength.
118 $ref: "/schemas/pinctrl/pincfg-node.yaml"
123 The list of pin identifiers that properties in the node apply to.
124 This should be set using either the PAD_GPIO or PAD_FUNC_SHARE
126 Either this or "pinmux" has to be specified, but not both.
127 $ref: "/schemas/pinctrl/pinmux-node.yaml#/properties/pins"
131 The list of GPIOs and their mux settings that properties in the
132 node apply to. This should be set using the GPIOMUX macro.
133 Either this or "pins" has to be specified, but not both.
134 $ref: "/schemas/pinctrl/pinmux-node.yaml#/properties/pinmux"
145 enum: [ 14, 21, 28, 35, 42, 49, 56, 63 ]
151 input-schmitt-enable: true
153 input-schmitt-disable: true
158 starfive,strong-pull-up:
159 description: enable strong pull-up.
162 additionalProperties: false
164 additionalProperties: false
166 additionalProperties: false
170 #include <dt-bindings/clock/starfive-jh7100.h>
171 #include <dt-bindings/reset/starfive-jh7100.h>
172 #include <dt-bindings/pinctrl/pinctrl-starfive-jh7100.h>
175 #address-cells = <2>;
179 compatible = "starfive,jh7100-pinctrl";
180 reg = <0x0 0x11910000 0x0 0x10000>,
181 <0x0 0x11858000 0x0 0x1000>;
182 reg-names = "gpio", "padctl";
183 clocks = <&clkgen JH7100_CLK_GPIO_APB>;
184 resets = <&clkgen JH7100_RSTN_GPIO_APB>;
188 interrupt-controller;
189 #interrupt-cells = <2>;
190 starfive,signal-group = <6>;
192 gmac_pins_default: gmac-0 {
194 pins = <PAD_FUNC_SHARE(115)>;
196 drive-strength = <35>;
198 input-schmitt-enable;
202 pins = <PAD_FUNC_SHARE(116)>;
204 drive-strength = <14>;
206 input-schmitt-disable;
210 pins = <PAD_FUNC_SHARE(117)>,
211 <PAD_FUNC_SHARE(119)>,
212 <PAD_FUNC_SHARE(120)>,
213 <PAD_FUNC_SHARE(121)>,
214 <PAD_FUNC_SHARE(122)>,
215 <PAD_FUNC_SHARE(123)>,
216 <PAD_FUNC_SHARE(124)>,
217 <PAD_FUNC_SHARE(125)>,
218 <PAD_FUNC_SHARE(126)>;
220 drive-strength = <35>;
222 input-schmitt-disable;
226 pins = <PAD_FUNC_SHARE(127)>;
228 drive-strength = <14>;
230 input-schmitt-disable;
234 pins = <PAD_FUNC_SHARE(129)>;
236 drive-strength = <14>;
238 input-schmitt-disable;
242 pins = <PAD_FUNC_SHARE(128)>,
243 <PAD_FUNC_SHARE(130)>,
244 <PAD_FUNC_SHARE(131)>,
245 <PAD_FUNC_SHARE(132)>,
246 <PAD_FUNC_SHARE(133)>,
247 <PAD_FUNC_SHARE(134)>,
248 <PAD_FUNC_SHARE(135)>,
249 <PAD_FUNC_SHARE(136)>,
250 <PAD_FUNC_SHARE(137)>,
251 <PAD_FUNC_SHARE(138)>,
252 <PAD_FUNC_SHARE(139)>,
253 <PAD_FUNC_SHARE(140)>,
254 <PAD_FUNC_SHARE(141)>;
256 drive-strength = <14>;
258 input-schmitt-enable;
263 i2c0_pins_default: i2c0-0 {
265 pinmux = <GPIOMUX(62, GPO_LOW,
266 GPO_I2C0_PAD_SCK_OEN,
267 GPI_I2C0_PAD_SCK_IN)>,
268 <GPIOMUX(61, GPO_LOW,
269 GPO_I2C0_PAD_SDA_OEN,
270 GPI_I2C0_PAD_SDA_IN)>;
271 bias-disable; /* external pull-up */
273 input-schmitt-enable;
277 uart3_pins_default: uart3-0 {
279 pinmux = <GPIOMUX(13, GPO_LOW, GPO_DISABLE,
283 input-schmitt-enable;
286 pinmux = <GPIOMUX(14, GPO_UART3_PAD_SOUT,
287 GPO_ENABLE, GPI_NONE)>;
290 input-schmitt-disable;
296 pinctrl-0 = <&gmac_pins_default>;
297 pinctrl-names = "default";
301 pinctrl-0 = <&i2c0_pins_default>;
302 pinctrl-names = "default";
306 pinctrl-0 = <&uart3_pins_default>;
307 pinctrl-names = "default";