Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[linux-2.6-microblaze.git] / Documentation / devicetree / bindings / remoteproc / ti,pru-rproc.yaml
1 # 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
7 title: TI Programmable Realtime Unit (PRU) cores
8
9 maintainers:
10   - Suman Anna <s-anna@ti.com>
11
12 description: |
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
34 properties:
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,am642-pru    # for PRUs in K3 AM64x SoC family
40       - ti,am642-rtu    # for RTUs in K3 AM64x SoC family
41       - ti,am642-tx-pru # for Tx_PRUs in K3 AM64x SoC family
42       - ti,am5728-pru   # for AM57xx SoC family
43       - ti,k2g-pru      # for 66AK2G 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
51   reg:
52     items:
53       - description: Address and Size of the PRU Instruction RAM
54       - description: Address and Size of the PRU CTRL sub-module registers
55       - description: Address and Size of the PRU Debug sub-module registers
56
57   reg-names:
58     items:
59       - const: iram
60       - const: control
61       - const: debug
62
63   firmware-name:
64     description: |
65       Should contain the name of the default firmware image
66       file located on the firmware search path.
67
68 if:
69   properties:
70     compatible:
71       enum:
72         - ti,am654-rtu
73         - ti,j721e-rtu
74         - ti,am642-rtu
75 then:
76   properties:
77     $nodename:
78       pattern: "^rtu@[0-9a-f]+$"
79 else:
80   if:
81     properties:
82       compatible:
83         enum:
84           - ti,am654-tx-pru
85           - ti,j721e-tx-pru
86           - ti,am642-tx-pru
87   then:
88     properties:
89       $nodename:
90         pattern: "^txpru@[0-9a-f]+"
91   else:
92     properties:
93       $nodename:
94         pattern: "^pru@[0-9a-f]+$"
95
96 required:
97   - compatible
98   - reg
99   - reg-names
100   - firmware-name
101
102 additionalProperties: false
103
104 examples:
105   - |
106     /* AM33xx PRU-ICSS */
107     pruss_tm: target-module@300000 {  /* 0x4a300000, ap 9 04.0 */
108       compatible = "ti,sysc-pruss", "ti,sysc";
109       #address-cells = <1>;
110       #size-cells = <1>;
111       ranges = <0x0 0x300000 0x80000>;
112
113       pruss: pruss@0 {
114         compatible = "ti,am3356-pruss";
115         reg = <0x0 0x80000>;
116         #address-cells = <1>;
117         #size-cells = <1>;
118         ranges;
119
120         pruss_mem: memories@0 {
121           reg = <0x0 0x2000>,
122                 <0x2000 0x2000>,
123                 <0x10000 0x3000>;
124           reg-names = "dram0", "dram1", "shrdram2";
125         };
126
127         pru0: pru@34000 {
128           compatible = "ti,am3356-pru";
129           reg = <0x34000 0x2000>,
130                 <0x22000 0x400>,
131                 <0x22400 0x100>;
132           reg-names = "iram", "control", "debug";
133           firmware-name = "am335x-pru0-fw";
134         };
135
136         pru1: pru@38000 {
137           compatible = "ti,am3356-pru";
138           reg = <0x38000 0x2000>,
139                 <0x24000 0x400>,
140                 <0x24400 0x100>;
141           reg-names = "iram", "control", "debug";
142           firmware-name = "am335x-pru1-fw";
143         };
144       };
145     };
146
147   - |
148     /* AM65x SR2.0 ICSSG */
149     #include <dt-bindings/soc/ti,sci_pm_domain.h>
150
151     icssg0: icssg@b000000 {
152       compatible = "ti,am654-icssg";
153       reg = <0xb000000 0x80000>;
154       power-domains = <&k3_pds 62 TI_SCI_PD_EXCLUSIVE>;
155       #address-cells = <1>;
156       #size-cells = <1>;
157       ranges = <0x0 0xb000000 0x80000>;
158
159       icssg0_mem: memories@0 {
160         reg = <0x0 0x2000>,
161               <0x2000 0x2000>,
162               <0x10000 0x10000>;
163         reg-names = "dram0", "dram1", "shrdram2";
164       };
165
166       pru0_0: pru@34000 {
167         compatible = "ti,am654-pru";
168         reg = <0x34000 0x4000>,
169               <0x22000 0x100>,
170               <0x22400 0x100>;
171         reg-names = "iram", "control", "debug";
172         firmware-name = "am65x-pru0_0-fw";
173       };
174
175       rtu0_0: rtu@4000 {
176         compatible = "ti,am654-rtu";
177         reg = <0x4000 0x2000>,
178               <0x23000 0x100>,
179               <0x23400 0x100>;
180         reg-names = "iram", "control", "debug";
181         firmware-name = "am65x-rtu0_0-fw";
182       };
183
184       tx_pru0_0: txpru@a000 {
185         compatible = "ti,am654-tx-pru";
186         reg = <0xa000 0x1800>,
187               <0x25000 0x100>,
188               <0x25400 0x100>;
189         reg-names = "iram", "control", "debug";
190         firmware-name = "am65x-txpru0_0-fw";
191       };
192
193       pru0_1: pru@38000 {
194         compatible = "ti,am654-pru";
195         reg = <0x38000 0x4000>,
196               <0x24000 0x100>,
197               <0x24400 0x100>;
198         reg-names = "iram", "control", "debug";
199         firmware-name = "am65x-pru0_1-fw";
200       };
201
202       rtu0_1: rtu@6000 {
203         compatible = "ti,am654-rtu";
204         reg = <0x6000 0x2000>,
205               <0x23800 0x100>,
206               <0x23c00 0x100>;
207         reg-names = "iram", "control", "debug";
208         firmware-name = "am65x-rtu0_1-fw";
209       };
210
211       tx_pru0_1: txpru@c000 {
212         compatible = "ti,am654-tx-pru";
213         reg = <0xc000 0x1800>,
214               <0x25800 0x100>,
215               <0x25c00 0x100>;
216         reg-names = "iram", "control", "debug";
217         firmware-name = "am65x-txpru0_1-fw";
218       };
219     };