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