blob: faf16cf140851d801dfebfaeaa5654b044efdd9d [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/remoteproc/ti,pru-rproc.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: TI Programmable Realtime Unit (PRU) cores
8
9maintainers:
10 - Suman Anna <s-anna@ti.com>
11
12description: |
13 Each Programmable Real-Time Unit and Industrial Communication Subsystem
14 (PRU-ICSS or PRUSS) has two 32-bit load/store RISC CPU cores called
15 Programmable Real-Time Units (PRUs), each represented by a node. Each PRU
16 core has a dedicated Instruction RAM, Control and Debug register sets, and
17 use the Data RAMs present within the PRU-ICSS for code execution.
18
19 The K3 SoCs containing ICSSG v1.0 (eg: AM65x SR1.0) also have two Auxiliary
20 PRU cores called RTUs with slightly different IP integration. The K3 SoCs
21 containing the revised ICSSG v1.1 (eg: J721E, AM65x SR2.0) have an extra two
22 auxiliary Transmit PRU cores called Tx_PRUs that augment the PRUs. Each RTU
23 or Tx_PRU core can also be used independently like a PRU, or alongside a
24 corresponding PRU core to provide/implement auxiliary functionality/support.
25
26 Each PRU, RTU or Tx_PRU core node should be defined as a child node of the
27 corresponding PRU-ICSS node. Each node can optionally be rendered inactive by
28 using the standard DT string property, "status".
29
30 Please see the overall PRU-ICSS bindings document for additional details
31 including a complete example,
32 Documentation/devicetree/bindings/soc/ti/ti,pruss.yaml
33
34properties:
35 compatible:
36 enum:
37 - ti,am3356-pru # for AM335x SoC family (AM3356+ SoCs only)
38 - ti,am4376-pru # for AM437x SoC family (AM4376+ SoCs only)
39 - ti,am5728-pru # for AM57xx SoC family
40 - ti,am625-pru # for PRUs in K3 AM62x SoC family
41 - ti,am642-pru # for PRUs in K3 AM64x SoC family
42 - ti,am642-rtu # for RTUs in K3 AM64x SoC family
43 - ti,am642-tx-pru # for Tx_PRUs in K3 AM64x SoC family
44 - ti,am654-pru # for PRUs in K3 AM65x SoC family
45 - ti,am654-rtu # for RTUs in K3 AM65x SoC family
46 - ti,am654-tx-pru # for Tx_PRUs in K3 AM65x SR2.0 SoCs
47 - ti,j721e-pru # for PRUs in K3 J721E SoC family
48 - ti,j721e-rtu # for RTUs in K3 J721E SoC family
49 - ti,j721e-tx-pru # for Tx_PRUs in K3 J721E SoC family
50 - ti,k2g-pru # for 66AK2G SoC family
51
52 reg:
53 items:
54 - description: Address and Size of the PRU Instruction RAM
55 - description: Address and Size of the PRU CTRL sub-module registers
56 - description: Address and Size of the PRU Debug sub-module registers
57
58 reg-names:
59 items:
60 - const: iram
61 - const: control
62 - const: debug
63
64 firmware-name:
65 description: |
66 Should contain the name of the default firmware image
67 file located on the firmware search path.
68
69 interrupts:
70 maxItems: 1
71 description:
72 Interrupt specifiers enable the virtio/rpmsg communication between MPU
73 and the PRU/RTU cores. For the values of the interrupt cells please refer
74 to interrupt-controller/ti,pruss-intc.yaml schema.
75
76 interrupt-names:
77 items:
78 - const: vring
79
80if:
81 properties:
82 compatible:
83 enum:
84 - ti,am654-rtu
85 - ti,j721e-rtu
86 - ti,am642-rtu
87then:
88 properties:
89 $nodename:
90 pattern: "^rtu@[0-9a-f]+$"
91else:
92 if:
93 properties:
94 compatible:
95 enum:
96 - ti,am654-tx-pru
97 - ti,j721e-tx-pru
98 - ti,am642-tx-pru
99 then:
100 properties:
101 $nodename:
102 pattern: "^txpru@[0-9a-f]+"
103 else:
104 properties:
105 $nodename:
106 pattern: "^pru@[0-9a-f]+$"
107
108required:
109 - compatible
110 - reg
111 - reg-names
112 - firmware-name
113
114additionalProperties: false
115
116examples:
117 - |
118 /* AM33xx PRU-ICSS */
119 pruss_tm: target-module@300000 { /* 0x4a300000, ap 9 04.0 */
120 compatible = "ti,sysc-pruss", "ti,sysc";
121 #address-cells = <1>;
122 #size-cells = <1>;
123 ranges = <0x0 0x300000 0x80000>;
124
125 pruss: pruss@0 {
126 compatible = "ti,am3356-pruss";
127 reg = <0x0 0x80000>;
128 #address-cells = <1>;
129 #size-cells = <1>;
130 ranges;
131
132 pruss_mem: memories@0 {
133 reg = <0x0 0x2000>,
134 <0x2000 0x2000>,
135 <0x10000 0x3000>;
136 reg-names = "dram0", "dram1", "shrdram2";
137 };
138
139 pru0: pru@34000 {
140 compatible = "ti,am3356-pru";
141 reg = <0x34000 0x2000>,
142 <0x22000 0x400>,
143 <0x22400 0x100>;
144 reg-names = "iram", "control", "debug";
145 firmware-name = "am335x-pru0-fw";
146 };
147
148 pru1: pru@38000 {
149 compatible = "ti,am3356-pru";
150 reg = <0x38000 0x2000>,
151 <0x24000 0x400>,
152 <0x24400 0x100>;
153 reg-names = "iram", "control", "debug";
154 firmware-name = "am335x-pru1-fw";
155 };
156 };
157 };
158
159 - |
160 /* AM65x SR2.0 ICSSG */
161 #include <dt-bindings/soc/ti,sci_pm_domain.h>
162
163 icssg0: icssg@b000000 {
164 compatible = "ti,am654-icssg";
165 reg = <0xb000000 0x80000>;
166 power-domains = <&k3_pds 62 TI_SCI_PD_EXCLUSIVE>;
167 #address-cells = <1>;
168 #size-cells = <1>;
169 ranges = <0x0 0xb000000 0x80000>;
170
171 icssg0_mem: memories@0 {
172 reg = <0x0 0x2000>,
173 <0x2000 0x2000>,
174 <0x10000 0x10000>;
175 reg-names = "dram0", "dram1", "shrdram2";
176 };
177
178 pru0_0: pru@34000 {
179 compatible = "ti,am654-pru";
180 reg = <0x34000 0x4000>,
181 <0x22000 0x100>,
182 <0x22400 0x100>;
183 reg-names = "iram", "control", "debug";
184 firmware-name = "am65x-pru0_0-fw";
185 interrupt-parent = <&icssg0_intc>;
186 interrupts = <16 2 2>;
187 interrupt-names = "vring";
188 };
189
190 rtu0_0: rtu@4000 {
191 compatible = "ti,am654-rtu";
192 reg = <0x4000 0x2000>,
193 <0x23000 0x100>,
194 <0x23400 0x100>;
195 reg-names = "iram", "control", "debug";
196 firmware-name = "am65x-rtu0_0-fw";
197 interrupt-parent = <&icssg0_intc>;
198 interrupts = <20 4 4>;
199 interrupt-names = "vring";
200 };
201
202 tx_pru0_0: txpru@a000 {
203 compatible = "ti,am654-tx-pru";
204 reg = <0xa000 0x1800>,
205 <0x25000 0x100>,
206 <0x25400 0x100>;
207 reg-names = "iram", "control", "debug";
208 firmware-name = "am65x-txpru0_0-fw";
209 };
210
211 pru0_1: pru@38000 {
212 compatible = "ti,am654-pru";
213 reg = <0x38000 0x4000>,
214 <0x24000 0x100>,
215 <0x24400 0x100>;
216 reg-names = "iram", "control", "debug";
217 firmware-name = "am65x-pru0_1-fw";
218 interrupt-parent = <&icssg0_intc>;
219 interrupts = <18 3 3>;
220 interrupt-names = "vring";
221 };
222
223 rtu0_1: rtu@6000 {
224 compatible = "ti,am654-rtu";
225 reg = <0x6000 0x2000>,
226 <0x23800 0x100>,
227 <0x23c00 0x100>;
228 reg-names = "iram", "control", "debug";
229 firmware-name = "am65x-rtu0_1-fw";
230 interrupt-parent = <&icssg0_intc>;
231 interrupts = <22 5 5>;
232 interrupt-names = "vring";
233 };
234
235 tx_pru0_1: txpru@c000 {
236 compatible = "ti,am654-tx-pru";
237 reg = <0xc000 0x1800>,
238 <0x25800 0x100>,
239 <0x25c00 0x100>;
240 reg-names = "iram", "control", "debug";
241 firmware-name = "am65x-txpru0_1-fw";
242 };
243 };