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,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 }; 244