| # SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/pinctrl/starfive,jh7100-pinctrl.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: StarFive JH7100 Pin Controller |
| |
| description: | |
| Bindings for the JH7100 RISC-V SoC from StarFive Ltd. |
| |
| Out of the SoC's many pins only the ones named PAD_GPIO[0] to PAD_GPIO[63] |
| and PAD_FUNC_SHARE[0] to PAD_FUNC_SHARE[141] can be multiplexed and have |
| configurable bias, drive strength, schmitt trigger etc. The SoC has an |
| interesting 2-layered approach to pin muxing best illustrated by the diagram |
| below. |
| |
| Signal group 0, 1, ... or 6 |
| ___|___ |
| | | |
| LCD output -----------------| | |
| CMOS Camera interface ------| |--- PAD_GPIO[0] |
| Ethernet PHY interface -----| MUX |--- PAD_GPIO[1] |
| ... | | ... |
| | |--- PAD_GPIO[63] |
| -------- GPIO0 ------------| | |
| | -------|-- GPIO1 --------| |--- PAD_FUNC_SHARE[0] |
| | | | | | |--- PAD_FUNC_SHARE[1] |
| | | | | ... | | ... |
| | | | | | |--- PAD_FUNC_SHARE[141] |
| | | -----|---|-- GPIO63 ---| | |
| | | | | | | ------- |
| UART0 UART1 -- |
| |
| |
| The big MUX in the diagram only has 7 different ways of mapping peripherals |
| on the left to pins on the right. StarFive calls the 7 configurations "signal |
| groups". |
| However some peripherals have their I/O go through the 64 "GPIOs". The |
| diagram only shows UART0 and UART1, but this also includes a number of other |
| UARTs, I2Cs, SPIs, PWMs etc. All these peripherals are connected to all 64 |
| GPIOs such that any GPIO can be set up to be controlled by any of the |
| peripherals. |
| Note that signal group 0 doesn't map any of the GPIOs to pins, and only |
| signal group 1 maps the GPIOs to the pins named PAD_GPIO[0] to PAD_GPIO[63]. |
| |
| maintainers: |
| - Emil Renner Berthing <kernel@esmil.dk> |
| - Drew Fustini <drew@beagleboard.org> |
| |
| properties: |
| compatible: |
| const: starfive,jh7100-pinctrl |
| |
| reg: |
| minItems: 2 |
| maxItems: 2 |
| |
| reg-names: |
| items: |
| - const: gpio |
| - const: padctl |
| |
| clocks: |
| maxItems: 1 |
| |
| resets: |
| maxItems: 1 |
| |
| gpio-controller: true |
| |
| "#gpio-cells": |
| const: 2 |
| |
| interrupts: |
| maxItems: 1 |
| description: The GPIO parent interrupt. |
| |
| interrupt-controller: true |
| |
| "#interrupt-cells": |
| const: 2 |
| |
| starfive,signal-group: |
| description: | |
| Select one of the 7 signal groups. If this property is not set it |
| defaults to the configuration already chosen by the earlier boot stages. |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| enum: [0, 1, 2, 3, 4, 5, 6] |
| |
| required: |
| - compatible |
| - reg |
| - reg-names |
| - clocks |
| - gpio-controller |
| - "#gpio-cells" |
| - interrupts |
| - interrupt-controller |
| - "#interrupt-cells" |
| |
| patternProperties: |
| '-[0-9]+$': |
| type: object |
| patternProperties: |
| '-pins$': |
| type: object |
| description: | |
| A pinctrl node should contain at least one subnode representing the |
| pinctrl groups available on the machine. Each subnode will list the |
| pins it needs, and how they should be configured, with regard to |
| muxer configuration, bias, input enable/disable, input schmitt |
| trigger enable/disable, slew-rate and drive strength. |
| $ref: /schemas/pinctrl/pincfg-node.yaml |
| |
| properties: |
| pins: |
| description: | |
| The list of pin identifiers that properties in the node apply to. |
| This should be set using either the PAD_GPIO or PAD_FUNC_SHARE |
| macros. |
| Either this or "pinmux" has to be specified, but not both. |
| $ref: /schemas/pinctrl/pinmux-node.yaml#/properties/pins |
| |
| pinmux: |
| description: | |
| The list of GPIOs and their mux settings that properties in the |
| node apply to. This should be set using the GPIOMUX macro. |
| Either this or "pins" has to be specified, but not both. |
| $ref: /schemas/pinctrl/pinmux-node.yaml#/properties/pinmux |
| |
| bias-disable: true |
| |
| bias-pull-up: |
| type: boolean |
| |
| bias-pull-down: |
| type: boolean |
| |
| drive-strength: |
| enum: [ 14, 21, 28, 35, 42, 49, 56, 63 ] |
| |
| input-enable: true |
| |
| input-disable: true |
| |
| input-schmitt-enable: true |
| |
| input-schmitt-disable: true |
| |
| slew-rate: |
| maximum: 7 |
| |
| starfive,strong-pull-up: |
| description: enable strong pull-up. |
| type: boolean |
| |
| additionalProperties: false |
| |
| additionalProperties: false |
| |
| additionalProperties: false |
| |
| examples: |
| - | |
| #include <dt-bindings/clock/starfive-jh7100.h> |
| #include <dt-bindings/reset/starfive-jh7100.h> |
| #include <dt-bindings/pinctrl/pinctrl-starfive-jh7100.h> |
| |
| soc { |
| #address-cells = <2>; |
| #size-cells = <2>; |
| |
| pinctrl@11910000 { |
| compatible = "starfive,jh7100-pinctrl"; |
| reg = <0x0 0x11910000 0x0 0x10000>, |
| <0x0 0x11858000 0x0 0x1000>; |
| reg-names = "gpio", "padctl"; |
| clocks = <&clkgen JH7100_CLK_GPIO_APB>; |
| resets = <&clkgen JH7100_RSTN_GPIO_APB>; |
| interrupts = <32>; |
| gpio-controller; |
| #gpio-cells = <2>; |
| interrupt-controller; |
| #interrupt-cells = <2>; |
| starfive,signal-group = <6>; |
| |
| gmac_pins_default: gmac-0 { |
| gtxclk-pins { |
| pins = <PAD_FUNC_SHARE(115)>; |
| bias-pull-up; |
| drive-strength = <35>; |
| input-enable; |
| input-schmitt-enable; |
| slew-rate = <0>; |
| }; |
| miitxclk-pins { |
| pins = <PAD_FUNC_SHARE(116)>; |
| bias-pull-up; |
| drive-strength = <14>; |
| input-enable; |
| input-schmitt-disable; |
| slew-rate = <0>; |
| }; |
| tx-pins { |
| pins = <PAD_FUNC_SHARE(117)>, |
| <PAD_FUNC_SHARE(119)>, |
| <PAD_FUNC_SHARE(120)>, |
| <PAD_FUNC_SHARE(121)>, |
| <PAD_FUNC_SHARE(122)>, |
| <PAD_FUNC_SHARE(123)>, |
| <PAD_FUNC_SHARE(124)>, |
| <PAD_FUNC_SHARE(125)>, |
| <PAD_FUNC_SHARE(126)>; |
| bias-disable; |
| drive-strength = <35>; |
| input-disable; |
| input-schmitt-disable; |
| slew-rate = <0>; |
| }; |
| rxclk-pins { |
| pins = <PAD_FUNC_SHARE(127)>; |
| bias-pull-up; |
| drive-strength = <14>; |
| input-enable; |
| input-schmitt-disable; |
| slew-rate = <6>; |
| }; |
| rxer-pins { |
| pins = <PAD_FUNC_SHARE(129)>; |
| bias-pull-up; |
| drive-strength = <14>; |
| input-enable; |
| input-schmitt-disable; |
| slew-rate = <0>; |
| }; |
| rx-pins { |
| pins = <PAD_FUNC_SHARE(128)>, |
| <PAD_FUNC_SHARE(130)>, |
| <PAD_FUNC_SHARE(131)>, |
| <PAD_FUNC_SHARE(132)>, |
| <PAD_FUNC_SHARE(133)>, |
| <PAD_FUNC_SHARE(134)>, |
| <PAD_FUNC_SHARE(135)>, |
| <PAD_FUNC_SHARE(136)>, |
| <PAD_FUNC_SHARE(137)>, |
| <PAD_FUNC_SHARE(138)>, |
| <PAD_FUNC_SHARE(139)>, |
| <PAD_FUNC_SHARE(140)>, |
| <PAD_FUNC_SHARE(141)>; |
| bias-pull-up; |
| drive-strength = <14>; |
| input-enable; |
| input-schmitt-enable; |
| slew-rate = <0>; |
| }; |
| }; |
| |
| i2c0_pins_default: i2c0-0 { |
| i2c-pins { |
| pinmux = <GPIOMUX(62, GPO_LOW, |
| GPO_I2C0_PAD_SCK_OEN, |
| GPI_I2C0_PAD_SCK_IN)>, |
| <GPIOMUX(61, GPO_LOW, |
| GPO_I2C0_PAD_SDA_OEN, |
| GPI_I2C0_PAD_SDA_IN)>; |
| bias-disable; /* external pull-up */ |
| input-enable; |
| input-schmitt-enable; |
| }; |
| }; |
| |
| uart3_pins_default: uart3-0 { |
| rx-pins { |
| pinmux = <GPIOMUX(13, GPO_LOW, GPO_DISABLE, |
| GPI_UART3_PAD_SIN)>; |
| bias-pull-up; |
| input-enable; |
| input-schmitt-enable; |
| }; |
| tx-pins { |
| pinmux = <GPIOMUX(14, GPO_UART3_PAD_SOUT, |
| GPO_ENABLE, GPI_NONE)>; |
| bias-disable; |
| input-disable; |
| input-schmitt-disable; |
| }; |
| }; |
| }; |
| |
| gmac { |
| pinctrl-0 = <&gmac_pins_default>; |
| pinctrl-names = "default"; |
| }; |
| |
| i2c { |
| pinctrl-0 = <&i2c0_pins_default>; |
| pinctrl-names = "default"; |
| }; |
| |
| uart3 { |
| pinctrl-0 = <&uart3_pins_default>; |
| pinctrl-names = "default"; |
| }; |
| }; |
| |
| ... |