308 lines · yaml
1# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause2%YAML 1.23---4$id: http://devicetree.org/schemas/pinctrl/starfive,jh7100-pinctrl.yaml#5$schema: http://devicetree.org/meta-schemas/core.yaml#6 7title: StarFive JH7100 Pin Controller8 9description: |10 Bindings for the JH7100 RISC-V SoC from StarFive Ltd.11 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 have14 configurable bias, drive strength, schmitt trigger etc. The SoC has an15 interesting 2-layered approach to pin muxing best illustrated by the diagram16 below.17 18 Signal group 0, 1, ... or 619 ___|___20 | |21 LCD output -----------------| |22 CMOS Camera interface ------| |--- PAD_GPIO[0]23 Ethernet PHY interface -----| MUX |--- PAD_GPIO[1]24 ... | | ...25 | |--- PAD_GPIO[63]26 -------- GPIO0 ------------| |27 | -------|-- GPIO1 --------| |--- PAD_FUNC_SHARE[0]28 | | | | | |--- PAD_FUNC_SHARE[1]29 | | | | ... | | ...30 | | | | | |--- PAD_FUNC_SHARE[141]31 | | -----|---|-- GPIO63 ---| |32 | | | | | | -------33 UART0 UART1 --34 35 36 The big MUX in the diagram only has 7 different ways of mapping peripherals37 on the left to pins on the right. StarFive calls the 7 configurations "signal38 groups".39 However some peripherals have their I/O go through the 64 "GPIOs". The40 diagram only shows UART0 and UART1, but this also includes a number of other41 UARTs, I2Cs, SPIs, PWMs etc. All these peripherals are connected to all 6442 GPIOs such that any GPIO can be set up to be controlled by any of the43 peripherals.44 Note that signal group 0 doesn't map any of the GPIOs to pins, and only45 signal group 1 maps the GPIOs to the pins named PAD_GPIO[0] to PAD_GPIO[63].46 47maintainers:48 - Emil Renner Berthing <kernel@esmil.dk>49 - Drew Fustini <drew@beagleboard.org>50 51properties:52 compatible:53 const: starfive,jh7100-pinctrl54 55 reg:56 minItems: 257 maxItems: 258 59 reg-names:60 items:61 - const: gpio62 - const: padctl63 64 clocks:65 maxItems: 166 67 resets:68 maxItems: 169 70 gpio-controller: true71 72 "#gpio-cells":73 const: 274 75 interrupts:76 maxItems: 177 description: The GPIO parent interrupt.78 79 interrupt-controller: true80 81 "#interrupt-cells":82 const: 283 84 starfive,signal-group:85 description: |86 Select one of the 7 signal groups. If this property is not set it87 defaults to the configuration already chosen by the earlier boot stages.88 $ref: /schemas/types.yaml#/definitions/uint3289 enum: [0, 1, 2, 3, 4, 5, 6]90 91required:92 - compatible93 - reg94 - reg-names95 - clocks96 - gpio-controller97 - "#gpio-cells"98 - interrupts99 - interrupt-controller100 - "#interrupt-cells"101 102patternProperties:103 '-[0-9]+$':104 type: object105 patternProperties:106 '-pins$':107 type: object108 description: |109 A pinctrl node should contain at least one subnode representing the110 pinctrl groups available on the machine. Each subnode will list the111 pins it needs, and how they should be configured, with regard to112 muxer configuration, bias, input enable/disable, input schmitt113 trigger enable/disable, slew-rate and drive strength.114 $ref: /schemas/pinctrl/pincfg-node.yaml115 116 properties:117 pins:118 description: |119 The list of pin identifiers that properties in the node apply to.120 This should be set using either the PAD_GPIO or PAD_FUNC_SHARE121 macros.122 Either this or "pinmux" has to be specified, but not both.123 $ref: /schemas/pinctrl/pinmux-node.yaml#/properties/pins124 125 pinmux:126 description: |127 The list of GPIOs and their mux settings that properties in the128 node apply to. This should be set using the GPIOMUX macro.129 Either this or "pins" has to be specified, but not both.130 $ref: /schemas/pinctrl/pinmux-node.yaml#/properties/pinmux131 132 bias-disable: true133 134 bias-pull-up:135 type: boolean136 137 bias-pull-down:138 type: boolean139 140 drive-strength:141 enum: [ 14, 21, 28, 35, 42, 49, 56, 63 ]142 143 input-enable: true144 145 input-disable: true146 147 input-schmitt-enable: true148 149 input-schmitt-disable: true150 151 slew-rate:152 maximum: 7153 154 starfive,strong-pull-up:155 description: enable strong pull-up.156 type: boolean157 158 additionalProperties: false159 160 additionalProperties: false161 162additionalProperties: false163 164examples:165 - |166 #include <dt-bindings/clock/starfive-jh7100.h>167 #include <dt-bindings/reset/starfive-jh7100.h>168 #include <dt-bindings/pinctrl/pinctrl-starfive-jh7100.h>169 170 soc {171 #address-cells = <2>;172 #size-cells = <2>;173 174 pinctrl@11910000 {175 compatible = "starfive,jh7100-pinctrl";176 reg = <0x0 0x11910000 0x0 0x10000>,177 <0x0 0x11858000 0x0 0x1000>;178 reg-names = "gpio", "padctl";179 clocks = <&clkgen JH7100_CLK_GPIO_APB>;180 resets = <&clkgen JH7100_RSTN_GPIO_APB>;181 interrupts = <32>;182 gpio-controller;183 #gpio-cells = <2>;184 interrupt-controller;185 #interrupt-cells = <2>;186 starfive,signal-group = <6>;187 188 gmac_pins_default: gmac-0 {189 gtxclk-pins {190 pins = <PAD_FUNC_SHARE(115)>;191 bias-pull-up;192 drive-strength = <35>;193 input-enable;194 input-schmitt-enable;195 slew-rate = <0>;196 };197 miitxclk-pins {198 pins = <PAD_FUNC_SHARE(116)>;199 bias-pull-up;200 drive-strength = <14>;201 input-enable;202 input-schmitt-disable;203 slew-rate = <0>;204 };205 tx-pins {206 pins = <PAD_FUNC_SHARE(117)>,207 <PAD_FUNC_SHARE(119)>,208 <PAD_FUNC_SHARE(120)>,209 <PAD_FUNC_SHARE(121)>,210 <PAD_FUNC_SHARE(122)>,211 <PAD_FUNC_SHARE(123)>,212 <PAD_FUNC_SHARE(124)>,213 <PAD_FUNC_SHARE(125)>,214 <PAD_FUNC_SHARE(126)>;215 bias-disable;216 drive-strength = <35>;217 input-disable;218 input-schmitt-disable;219 slew-rate = <0>;220 };221 rxclk-pins {222 pins = <PAD_FUNC_SHARE(127)>;223 bias-pull-up;224 drive-strength = <14>;225 input-enable;226 input-schmitt-disable;227 slew-rate = <6>;228 };229 rxer-pins {230 pins = <PAD_FUNC_SHARE(129)>;231 bias-pull-up;232 drive-strength = <14>;233 input-enable;234 input-schmitt-disable;235 slew-rate = <0>;236 };237 rx-pins {238 pins = <PAD_FUNC_SHARE(128)>,239 <PAD_FUNC_SHARE(130)>,240 <PAD_FUNC_SHARE(131)>,241 <PAD_FUNC_SHARE(132)>,242 <PAD_FUNC_SHARE(133)>,243 <PAD_FUNC_SHARE(134)>,244 <PAD_FUNC_SHARE(135)>,245 <PAD_FUNC_SHARE(136)>,246 <PAD_FUNC_SHARE(137)>,247 <PAD_FUNC_SHARE(138)>,248 <PAD_FUNC_SHARE(139)>,249 <PAD_FUNC_SHARE(140)>,250 <PAD_FUNC_SHARE(141)>;251 bias-pull-up;252 drive-strength = <14>;253 input-enable;254 input-schmitt-enable;255 slew-rate = <0>;256 };257 };258 259 i2c0_pins_default: i2c0-0 {260 i2c-pins {261 pinmux = <GPIOMUX(62, GPO_LOW,262 GPO_I2C0_PAD_SCK_OEN,263 GPI_I2C0_PAD_SCK_IN)>,264 <GPIOMUX(61, GPO_LOW,265 GPO_I2C0_PAD_SDA_OEN,266 GPI_I2C0_PAD_SDA_IN)>;267 bias-disable; /* external pull-up */268 input-enable;269 input-schmitt-enable;270 };271 };272 273 uart3_pins_default: uart3-0 {274 rx-pins {275 pinmux = <GPIOMUX(13, GPO_LOW, GPO_DISABLE,276 GPI_UART3_PAD_SIN)>;277 bias-pull-up;278 input-enable;279 input-schmitt-enable;280 };281 tx-pins {282 pinmux = <GPIOMUX(14, GPO_UART3_PAD_SOUT,283 GPO_ENABLE, GPI_NONE)>;284 bias-disable;285 input-disable;286 input-schmitt-disable;287 };288 };289 };290 291 gmac {292 pinctrl-0 = <&gmac_pins_default>;293 pinctrl-names = "default";294 };295 296 i2c {297 pinctrl-0 = <&i2c0_pins_default>;298 pinctrl-names = "default";299 };300 301 uart3 {302 pinctrl-0 = <&uart3_pins_default>;303 pinctrl-names = "default";304 };305 };306 307...308