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