Skip to content

Commit 7431b39

Browse files
committed
dt-bindings: pinctrl: Add StarFive JH7100 bindings
Add bindings for the GPIO/pin controller on the JH7100 RISC-V SoC by StarFive Ltd. This is a test chip for their upcoming JH7110 SoC. Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Rob Herring <robh@kernel.org> Signed-off-by: Emil Renner Berthing <kernel@esmil.dk>
1 parent 3021114 commit 7431b39

File tree

1 file changed

+307
-0
lines changed

1 file changed

+307
-0
lines changed
Lines changed: 307 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,307 @@
1+
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2+
%YAML 1.2
3+
---
4+
$id: http://devicetree.org/schemas/pinctrl/starfive,jh7100-pinctrl.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: StarFive JH7100 Pin Controller Device Tree Bindings
8+
9+
description: |
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 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
16+
below.
17+
18+
Signal group 0, 1, ... or 6
19+
___|___
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 peripherals
37+
on the left to pins on the right. StarFive calls the 7 configurations "signal
38+
groups".
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
43+
peripherals.
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].
46+
47+
maintainers:
48+
- Emil Renner Berthing <kernel@esmil.dk>
49+
- Drew Fustini <drew@beagleboard.org>
50+
51+
properties:
52+
compatible:
53+
const: starfive,jh7100-pinctrl
54+
55+
reg:
56+
minItems: 2
57+
maxItems: 2
58+
59+
reg-names:
60+
items:
61+
- const: gpio
62+
- const: padctl
63+
64+
clocks:
65+
maxItems: 1
66+
67+
resets:
68+
maxItems: 1
69+
70+
gpio-controller: true
71+
72+
"#gpio-cells":
73+
const: 2
74+
75+
interrupts:
76+
maxItems: 1
77+
description: The GPIO parent interrupt.
78+
79+
interrupt-controller: true
80+
81+
"#interrupt-cells":
82+
const: 2
83+
84+
starfive,signal-group:
85+
description: |
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]
90+
91+
required:
92+
- compatible
93+
- reg
94+
- reg-names
95+
- clocks
96+
- gpio-controller
97+
- "#gpio-cells"
98+
- interrupts
99+
- interrupt-controller
100+
- "#interrupt-cells"
101+
102+
patternProperties:
103+
'-[0-9]+$':
104+
type: object
105+
patternProperties:
106+
'-pins$':
107+
type: object
108+
description: |
109+
A pinctrl node should contain at least one subnode representing the
110+
pinctrl groups available on the machine. Each subnode will list the
111+
pins it needs, and how they should be configured, with regard to
112+
muxer configuration, bias, input enable/disable, input schmitt
113+
trigger enable/disable, slew-rate and drive strength.
114+
$ref: "/schemas/pinctrl/pincfg-node.yaml"
115+
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_SHARE
121+
macros.
122+
Either this or "pinmux" has to be specified, but not both.
123+
$ref: "/schemas/pinctrl/pinmux-node.yaml#/properties/pins"
124+
125+
pinmux:
126+
description: |
127+
The list of GPIOs and their mux settings that properties in the
128+
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/pinmux"
131+
132+
bias-disable: true
133+
134+
bias-pull-up:
135+
type: boolean
136+
137+
bias-pull-down:
138+
type: boolean
139+
140+
drive-strength:
141+
enum: [ 14, 21, 28, 35, 42, 49, 56, 63 ]
142+
143+
input-enable: true
144+
145+
input-disable: true
146+
147+
input-schmitt-enable: true
148+
149+
input-schmitt-disable: true
150+
151+
slew-rate:
152+
maximum: 7
153+
154+
starfive,strong-pull-up:
155+
description: enable strong pull-up.
156+
type: boolean
157+
158+
additionalProperties: false
159+
160+
additionalProperties: false
161+
162+
additionalProperties: false
163+
164+
examples:
165+
- |
166+
#include <dt-bindings/clock/starfive-jh7100.h>
167+
#include <dt-bindings/reset/starfive-jh7100.h>
168+
#include <dt-bindings/pinctrl/pinctrl-starfive.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+
i2c0 {
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+
...

0 commit comments

Comments
 (0)