162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/pinctrl/starfive,jh7100-pinctrl.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: StarFive JH7100 Pin Controller 862306a36Sopenharmony_ci 962306a36Sopenharmony_cidescription: | 1062306a36Sopenharmony_ci Bindings for the JH7100 RISC-V SoC from StarFive Ltd. 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci Out of the SoC's many pins only the ones named PAD_GPIO[0] to PAD_GPIO[63] 1362306a36Sopenharmony_ci and PAD_FUNC_SHARE[0] to PAD_FUNC_SHARE[141] can be multiplexed and have 1462306a36Sopenharmony_ci configurable bias, drive strength, schmitt trigger etc. The SoC has an 1562306a36Sopenharmony_ci interesting 2-layered approach to pin muxing best illustrated by the diagram 1662306a36Sopenharmony_ci below. 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci Signal group 0, 1, ... or 6 1962306a36Sopenharmony_ci ___|___ 2062306a36Sopenharmony_ci | | 2162306a36Sopenharmony_ci LCD output -----------------| | 2262306a36Sopenharmony_ci CMOS Camera interface ------| |--- PAD_GPIO[0] 2362306a36Sopenharmony_ci Ethernet PHY interface -----| MUX |--- PAD_GPIO[1] 2462306a36Sopenharmony_ci ... | | ... 2562306a36Sopenharmony_ci | |--- PAD_GPIO[63] 2662306a36Sopenharmony_ci -------- GPIO0 ------------| | 2762306a36Sopenharmony_ci | -------|-- GPIO1 --------| |--- PAD_FUNC_SHARE[0] 2862306a36Sopenharmony_ci | | | | | |--- PAD_FUNC_SHARE[1] 2962306a36Sopenharmony_ci | | | | ... | | ... 3062306a36Sopenharmony_ci | | | | | |--- PAD_FUNC_SHARE[141] 3162306a36Sopenharmony_ci | | -----|---|-- GPIO63 ---| | 3262306a36Sopenharmony_ci | | | | | | ------- 3362306a36Sopenharmony_ci UART0 UART1 -- 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci The big MUX in the diagram only has 7 different ways of mapping peripherals 3762306a36Sopenharmony_ci on the left to pins on the right. StarFive calls the 7 configurations "signal 3862306a36Sopenharmony_ci groups". 3962306a36Sopenharmony_ci However some peripherals have their I/O go through the 64 "GPIOs". The 4062306a36Sopenharmony_ci diagram only shows UART0 and UART1, but this also includes a number of other 4162306a36Sopenharmony_ci UARTs, I2Cs, SPIs, PWMs etc. All these peripherals are connected to all 64 4262306a36Sopenharmony_ci GPIOs such that any GPIO can be set up to be controlled by any of the 4362306a36Sopenharmony_ci peripherals. 4462306a36Sopenharmony_ci Note that signal group 0 doesn't map any of the GPIOs to pins, and only 4562306a36Sopenharmony_ci signal group 1 maps the GPIOs to the pins named PAD_GPIO[0] to PAD_GPIO[63]. 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_cimaintainers: 4862306a36Sopenharmony_ci - Emil Renner Berthing <kernel@esmil.dk> 4962306a36Sopenharmony_ci - Drew Fustini <drew@beagleboard.org> 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciproperties: 5262306a36Sopenharmony_ci compatible: 5362306a36Sopenharmony_ci const: starfive,jh7100-pinctrl 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci reg: 5662306a36Sopenharmony_ci minItems: 2 5762306a36Sopenharmony_ci maxItems: 2 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci reg-names: 6062306a36Sopenharmony_ci items: 6162306a36Sopenharmony_ci - const: gpio 6262306a36Sopenharmony_ci - const: padctl 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci clocks: 6562306a36Sopenharmony_ci maxItems: 1 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci resets: 6862306a36Sopenharmony_ci maxItems: 1 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci gpio-controller: true 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci "#gpio-cells": 7362306a36Sopenharmony_ci const: 2 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci interrupts: 7662306a36Sopenharmony_ci maxItems: 1 7762306a36Sopenharmony_ci description: The GPIO parent interrupt. 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci interrupt-controller: true 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci "#interrupt-cells": 8262306a36Sopenharmony_ci const: 2 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci starfive,signal-group: 8562306a36Sopenharmony_ci description: | 8662306a36Sopenharmony_ci Select one of the 7 signal groups. If this property is not set it 8762306a36Sopenharmony_ci defaults to the configuration already chosen by the earlier boot stages. 8862306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 8962306a36Sopenharmony_ci enum: [0, 1, 2, 3, 4, 5, 6] 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_cirequired: 9262306a36Sopenharmony_ci - compatible 9362306a36Sopenharmony_ci - reg 9462306a36Sopenharmony_ci - reg-names 9562306a36Sopenharmony_ci - clocks 9662306a36Sopenharmony_ci - gpio-controller 9762306a36Sopenharmony_ci - "#gpio-cells" 9862306a36Sopenharmony_ci - interrupts 9962306a36Sopenharmony_ci - interrupt-controller 10062306a36Sopenharmony_ci - "#interrupt-cells" 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_cipatternProperties: 10362306a36Sopenharmony_ci '-[0-9]+$': 10462306a36Sopenharmony_ci type: object 10562306a36Sopenharmony_ci patternProperties: 10662306a36Sopenharmony_ci '-pins$': 10762306a36Sopenharmony_ci type: object 10862306a36Sopenharmony_ci description: | 10962306a36Sopenharmony_ci A pinctrl node should contain at least one subnode representing the 11062306a36Sopenharmony_ci pinctrl groups available on the machine. Each subnode will list the 11162306a36Sopenharmony_ci pins it needs, and how they should be configured, with regard to 11262306a36Sopenharmony_ci muxer configuration, bias, input enable/disable, input schmitt 11362306a36Sopenharmony_ci trigger enable/disable, slew-rate and drive strength. 11462306a36Sopenharmony_ci $ref: /schemas/pinctrl/pincfg-node.yaml 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci properties: 11762306a36Sopenharmony_ci pins: 11862306a36Sopenharmony_ci description: | 11962306a36Sopenharmony_ci The list of pin identifiers that properties in the node apply to. 12062306a36Sopenharmony_ci This should be set using either the PAD_GPIO or PAD_FUNC_SHARE 12162306a36Sopenharmony_ci macros. 12262306a36Sopenharmony_ci Either this or "pinmux" has to be specified, but not both. 12362306a36Sopenharmony_ci $ref: /schemas/pinctrl/pinmux-node.yaml#/properties/pins 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci pinmux: 12662306a36Sopenharmony_ci description: | 12762306a36Sopenharmony_ci The list of GPIOs and their mux settings that properties in the 12862306a36Sopenharmony_ci node apply to. This should be set using the GPIOMUX macro. 12962306a36Sopenharmony_ci Either this or "pins" has to be specified, but not both. 13062306a36Sopenharmony_ci $ref: /schemas/pinctrl/pinmux-node.yaml#/properties/pinmux 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci bias-disable: true 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ci bias-pull-up: 13562306a36Sopenharmony_ci type: boolean 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci bias-pull-down: 13862306a36Sopenharmony_ci type: boolean 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci drive-strength: 14162306a36Sopenharmony_ci enum: [ 14, 21, 28, 35, 42, 49, 56, 63 ] 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci input-enable: true 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci input-disable: true 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci input-schmitt-enable: true 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci input-schmitt-disable: true 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci slew-rate: 15262306a36Sopenharmony_ci maximum: 7 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci starfive,strong-pull-up: 15562306a36Sopenharmony_ci description: enable strong pull-up. 15662306a36Sopenharmony_ci type: boolean 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci additionalProperties: false 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci additionalProperties: false 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ciadditionalProperties: false 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ciexamples: 16562306a36Sopenharmony_ci - | 16662306a36Sopenharmony_ci #include <dt-bindings/clock/starfive-jh7100.h> 16762306a36Sopenharmony_ci #include <dt-bindings/reset/starfive-jh7100.h> 16862306a36Sopenharmony_ci #include <dt-bindings/pinctrl/pinctrl-starfive-jh7100.h> 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci soc { 17162306a36Sopenharmony_ci #address-cells = <2>; 17262306a36Sopenharmony_ci #size-cells = <2>; 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci pinctrl@11910000 { 17562306a36Sopenharmony_ci compatible = "starfive,jh7100-pinctrl"; 17662306a36Sopenharmony_ci reg = <0x0 0x11910000 0x0 0x10000>, 17762306a36Sopenharmony_ci <0x0 0x11858000 0x0 0x1000>; 17862306a36Sopenharmony_ci reg-names = "gpio", "padctl"; 17962306a36Sopenharmony_ci clocks = <&clkgen JH7100_CLK_GPIO_APB>; 18062306a36Sopenharmony_ci resets = <&clkgen JH7100_RSTN_GPIO_APB>; 18162306a36Sopenharmony_ci interrupts = <32>; 18262306a36Sopenharmony_ci gpio-controller; 18362306a36Sopenharmony_ci #gpio-cells = <2>; 18462306a36Sopenharmony_ci interrupt-controller; 18562306a36Sopenharmony_ci #interrupt-cells = <2>; 18662306a36Sopenharmony_ci starfive,signal-group = <6>; 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci gmac_pins_default: gmac-0 { 18962306a36Sopenharmony_ci gtxclk-pins { 19062306a36Sopenharmony_ci pins = <PAD_FUNC_SHARE(115)>; 19162306a36Sopenharmony_ci bias-pull-up; 19262306a36Sopenharmony_ci drive-strength = <35>; 19362306a36Sopenharmony_ci input-enable; 19462306a36Sopenharmony_ci input-schmitt-enable; 19562306a36Sopenharmony_ci slew-rate = <0>; 19662306a36Sopenharmony_ci }; 19762306a36Sopenharmony_ci miitxclk-pins { 19862306a36Sopenharmony_ci pins = <PAD_FUNC_SHARE(116)>; 19962306a36Sopenharmony_ci bias-pull-up; 20062306a36Sopenharmony_ci drive-strength = <14>; 20162306a36Sopenharmony_ci input-enable; 20262306a36Sopenharmony_ci input-schmitt-disable; 20362306a36Sopenharmony_ci slew-rate = <0>; 20462306a36Sopenharmony_ci }; 20562306a36Sopenharmony_ci tx-pins { 20662306a36Sopenharmony_ci pins = <PAD_FUNC_SHARE(117)>, 20762306a36Sopenharmony_ci <PAD_FUNC_SHARE(119)>, 20862306a36Sopenharmony_ci <PAD_FUNC_SHARE(120)>, 20962306a36Sopenharmony_ci <PAD_FUNC_SHARE(121)>, 21062306a36Sopenharmony_ci <PAD_FUNC_SHARE(122)>, 21162306a36Sopenharmony_ci <PAD_FUNC_SHARE(123)>, 21262306a36Sopenharmony_ci <PAD_FUNC_SHARE(124)>, 21362306a36Sopenharmony_ci <PAD_FUNC_SHARE(125)>, 21462306a36Sopenharmony_ci <PAD_FUNC_SHARE(126)>; 21562306a36Sopenharmony_ci bias-disable; 21662306a36Sopenharmony_ci drive-strength = <35>; 21762306a36Sopenharmony_ci input-disable; 21862306a36Sopenharmony_ci input-schmitt-disable; 21962306a36Sopenharmony_ci slew-rate = <0>; 22062306a36Sopenharmony_ci }; 22162306a36Sopenharmony_ci rxclk-pins { 22262306a36Sopenharmony_ci pins = <PAD_FUNC_SHARE(127)>; 22362306a36Sopenharmony_ci bias-pull-up; 22462306a36Sopenharmony_ci drive-strength = <14>; 22562306a36Sopenharmony_ci input-enable; 22662306a36Sopenharmony_ci input-schmitt-disable; 22762306a36Sopenharmony_ci slew-rate = <6>; 22862306a36Sopenharmony_ci }; 22962306a36Sopenharmony_ci rxer-pins { 23062306a36Sopenharmony_ci pins = <PAD_FUNC_SHARE(129)>; 23162306a36Sopenharmony_ci bias-pull-up; 23262306a36Sopenharmony_ci drive-strength = <14>; 23362306a36Sopenharmony_ci input-enable; 23462306a36Sopenharmony_ci input-schmitt-disable; 23562306a36Sopenharmony_ci slew-rate = <0>; 23662306a36Sopenharmony_ci }; 23762306a36Sopenharmony_ci rx-pins { 23862306a36Sopenharmony_ci pins = <PAD_FUNC_SHARE(128)>, 23962306a36Sopenharmony_ci <PAD_FUNC_SHARE(130)>, 24062306a36Sopenharmony_ci <PAD_FUNC_SHARE(131)>, 24162306a36Sopenharmony_ci <PAD_FUNC_SHARE(132)>, 24262306a36Sopenharmony_ci <PAD_FUNC_SHARE(133)>, 24362306a36Sopenharmony_ci <PAD_FUNC_SHARE(134)>, 24462306a36Sopenharmony_ci <PAD_FUNC_SHARE(135)>, 24562306a36Sopenharmony_ci <PAD_FUNC_SHARE(136)>, 24662306a36Sopenharmony_ci <PAD_FUNC_SHARE(137)>, 24762306a36Sopenharmony_ci <PAD_FUNC_SHARE(138)>, 24862306a36Sopenharmony_ci <PAD_FUNC_SHARE(139)>, 24962306a36Sopenharmony_ci <PAD_FUNC_SHARE(140)>, 25062306a36Sopenharmony_ci <PAD_FUNC_SHARE(141)>; 25162306a36Sopenharmony_ci bias-pull-up; 25262306a36Sopenharmony_ci drive-strength = <14>; 25362306a36Sopenharmony_ci input-enable; 25462306a36Sopenharmony_ci input-schmitt-enable; 25562306a36Sopenharmony_ci slew-rate = <0>; 25662306a36Sopenharmony_ci }; 25762306a36Sopenharmony_ci }; 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ci i2c0_pins_default: i2c0-0 { 26062306a36Sopenharmony_ci i2c-pins { 26162306a36Sopenharmony_ci pinmux = <GPIOMUX(62, GPO_LOW, 26262306a36Sopenharmony_ci GPO_I2C0_PAD_SCK_OEN, 26362306a36Sopenharmony_ci GPI_I2C0_PAD_SCK_IN)>, 26462306a36Sopenharmony_ci <GPIOMUX(61, GPO_LOW, 26562306a36Sopenharmony_ci GPO_I2C0_PAD_SDA_OEN, 26662306a36Sopenharmony_ci GPI_I2C0_PAD_SDA_IN)>; 26762306a36Sopenharmony_ci bias-disable; /* external pull-up */ 26862306a36Sopenharmony_ci input-enable; 26962306a36Sopenharmony_ci input-schmitt-enable; 27062306a36Sopenharmony_ci }; 27162306a36Sopenharmony_ci }; 27262306a36Sopenharmony_ci 27362306a36Sopenharmony_ci uart3_pins_default: uart3-0 { 27462306a36Sopenharmony_ci rx-pins { 27562306a36Sopenharmony_ci pinmux = <GPIOMUX(13, GPO_LOW, GPO_DISABLE, 27662306a36Sopenharmony_ci GPI_UART3_PAD_SIN)>; 27762306a36Sopenharmony_ci bias-pull-up; 27862306a36Sopenharmony_ci input-enable; 27962306a36Sopenharmony_ci input-schmitt-enable; 28062306a36Sopenharmony_ci }; 28162306a36Sopenharmony_ci tx-pins { 28262306a36Sopenharmony_ci pinmux = <GPIOMUX(14, GPO_UART3_PAD_SOUT, 28362306a36Sopenharmony_ci GPO_ENABLE, GPI_NONE)>; 28462306a36Sopenharmony_ci bias-disable; 28562306a36Sopenharmony_ci input-disable; 28662306a36Sopenharmony_ci input-schmitt-disable; 28762306a36Sopenharmony_ci }; 28862306a36Sopenharmony_ci }; 28962306a36Sopenharmony_ci }; 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ci gmac { 29262306a36Sopenharmony_ci pinctrl-0 = <&gmac_pins_default>; 29362306a36Sopenharmony_ci pinctrl-names = "default"; 29462306a36Sopenharmony_ci }; 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci i2c { 29762306a36Sopenharmony_ci pinctrl-0 = <&i2c0_pins_default>; 29862306a36Sopenharmony_ci pinctrl-names = "default"; 29962306a36Sopenharmony_ci }; 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci uart3 { 30262306a36Sopenharmony_ci pinctrl-0 = <&uart3_pins_default>; 30362306a36Sopenharmony_ci pinctrl-names = "default"; 30462306a36Sopenharmony_ci }; 30562306a36Sopenharmony_ci }; 30662306a36Sopenharmony_ci 30762306a36Sopenharmony_ci... 308