| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/remoteproc/ti,pru-rproc.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: TI Programmable Realtime Unit (PRU) cores |
| |
| maintainers: |
| - Suman Anna <s-anna@ti.com> |
| |
| description: | |
| Each Programmable Real-Time Unit and Industrial Communication Subsystem |
| (PRU-ICSS or PRUSS) has two 32-bit load/store RISC CPU cores called |
| Programmable Real-Time Units (PRUs), each represented by a node. Each PRU |
| core has a dedicated Instruction RAM, Control and Debug register sets, and |
| use the Data RAMs present within the PRU-ICSS for code execution. |
| |
| The K3 SoCs containing ICSSG v1.0 (eg: AM65x SR1.0) also have two Auxiliary |
| PRU cores called RTUs with slightly different IP integration. The K3 SoCs |
| containing the revised ICSSG v1.1 (eg: J721E, AM65x SR2.0) have an extra two |
| auxiliary Transmit PRU cores called Tx_PRUs that augment the PRUs. Each RTU |
| or Tx_PRU core can also be used independently like a PRU, or alongside a |
| corresponding PRU core to provide/implement auxiliary functionality/support. |
| |
| Each PRU, RTU or Tx_PRU core node should be defined as a child node of the |
| corresponding PRU-ICSS node. Each node can optionally be rendered inactive by |
| using the standard DT string property, "status". |
| |
| Please see the overall PRU-ICSS bindings document for additional details |
| including a complete example, |
| Documentation/devicetree/bindings/soc/ti/ti,pruss.yaml |
| |
| properties: |
| compatible: |
| enum: |
| - ti,am3356-pru # for AM335x SoC family (AM3356+ SoCs only) |
| - ti,am4376-pru # for AM437x SoC family (AM4376+ SoCs only) |
| - ti,am5728-pru # for AM57xx SoC family |
| - ti,am625-pru # for PRUs in K3 AM62x SoC family |
| - ti,am642-pru # for PRUs in K3 AM64x SoC family |
| - ti,am642-rtu # for RTUs in K3 AM64x SoC family |
| - ti,am642-tx-pru # for Tx_PRUs in K3 AM64x SoC family |
| - ti,am654-pru # for PRUs in K3 AM65x SoC family |
| - ti,am654-rtu # for RTUs in K3 AM65x SoC family |
| - ti,am654-tx-pru # for Tx_PRUs in K3 AM65x SR2.0 SoCs |
| - ti,j721e-pru # for PRUs in K3 J721E SoC family |
| - ti,j721e-rtu # for RTUs in K3 J721E SoC family |
| - ti,j721e-tx-pru # for Tx_PRUs in K3 J721E SoC family |
| - ti,k2g-pru # for 66AK2G SoC family |
| |
| reg: |
| items: |
| - description: Address and Size of the PRU Instruction RAM |
| - description: Address and Size of the PRU CTRL sub-module registers |
| - description: Address and Size of the PRU Debug sub-module registers |
| |
| reg-names: |
| items: |
| - const: iram |
| - const: control |
| - const: debug |
| |
| firmware-name: |
| description: | |
| Should contain the name of the default firmware image |
| file located on the firmware search path. |
| |
| interrupts: |
| maxItems: 1 |
| description: |
| Interrupt specifiers enable the virtio/rpmsg communication between MPU |
| and the PRU/RTU cores. For the values of the interrupt cells please refer |
| to interrupt-controller/ti,pruss-intc.yaml schema. |
| |
| interrupt-names: |
| items: |
| - const: vring |
| |
| if: |
| properties: |
| compatible: |
| enum: |
| - ti,am654-rtu |
| - ti,j721e-rtu |
| - ti,am642-rtu |
| then: |
| properties: |
| $nodename: |
| pattern: "^rtu@[0-9a-f]+$" |
| else: |
| if: |
| properties: |
| compatible: |
| enum: |
| - ti,am654-tx-pru |
| - ti,j721e-tx-pru |
| - ti,am642-tx-pru |
| then: |
| properties: |
| $nodename: |
| pattern: "^txpru@[0-9a-f]+" |
| else: |
| properties: |
| $nodename: |
| pattern: "^pru@[0-9a-f]+$" |
| |
| required: |
| - compatible |
| - reg |
| - reg-names |
| - firmware-name |
| |
| additionalProperties: false |
| |
| examples: |
| - | |
| /* AM33xx PRU-ICSS */ |
| pruss_tm: target-module@300000 { /* 0x4a300000, ap 9 04.0 */ |
| compatible = "ti,sysc-pruss", "ti,sysc"; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges = <0x0 0x300000 0x80000>; |
| |
| pruss: pruss@0 { |
| compatible = "ti,am3356-pruss"; |
| reg = <0x0 0x80000>; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges; |
| |
| pruss_mem: memories@0 { |
| reg = <0x0 0x2000>, |
| <0x2000 0x2000>, |
| <0x10000 0x3000>; |
| reg-names = "dram0", "dram1", "shrdram2"; |
| }; |
| |
| pru0: pru@34000 { |
| compatible = "ti,am3356-pru"; |
| reg = <0x34000 0x2000>, |
| <0x22000 0x400>, |
| <0x22400 0x100>; |
| reg-names = "iram", "control", "debug"; |
| firmware-name = "am335x-pru0-fw"; |
| }; |
| |
| pru1: pru@38000 { |
| compatible = "ti,am3356-pru"; |
| reg = <0x38000 0x2000>, |
| <0x24000 0x400>, |
| <0x24400 0x100>; |
| reg-names = "iram", "control", "debug"; |
| firmware-name = "am335x-pru1-fw"; |
| }; |
| }; |
| }; |
| |
| - | |
| /* AM65x SR2.0 ICSSG */ |
| #include <dt-bindings/soc/ti,sci_pm_domain.h> |
| |
| icssg0: icssg@b000000 { |
| compatible = "ti,am654-icssg"; |
| reg = <0xb000000 0x80000>; |
| power-domains = <&k3_pds 62 TI_SCI_PD_EXCLUSIVE>; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges = <0x0 0xb000000 0x80000>; |
| |
| icssg0_mem: memories@0 { |
| reg = <0x0 0x2000>, |
| <0x2000 0x2000>, |
| <0x10000 0x10000>; |
| reg-names = "dram0", "dram1", "shrdram2"; |
| }; |
| |
| pru0_0: pru@34000 { |
| compatible = "ti,am654-pru"; |
| reg = <0x34000 0x4000>, |
| <0x22000 0x100>, |
| <0x22400 0x100>; |
| reg-names = "iram", "control", "debug"; |
| firmware-name = "am65x-pru0_0-fw"; |
| interrupt-parent = <&icssg0_intc>; |
| interrupts = <16 2 2>; |
| interrupt-names = "vring"; |
| }; |
| |
| rtu0_0: rtu@4000 { |
| compatible = "ti,am654-rtu"; |
| reg = <0x4000 0x2000>, |
| <0x23000 0x100>, |
| <0x23400 0x100>; |
| reg-names = "iram", "control", "debug"; |
| firmware-name = "am65x-rtu0_0-fw"; |
| interrupt-parent = <&icssg0_intc>; |
| interrupts = <20 4 4>; |
| interrupt-names = "vring"; |
| }; |
| |
| tx_pru0_0: txpru@a000 { |
| compatible = "ti,am654-tx-pru"; |
| reg = <0xa000 0x1800>, |
| <0x25000 0x100>, |
| <0x25400 0x100>; |
| reg-names = "iram", "control", "debug"; |
| firmware-name = "am65x-txpru0_0-fw"; |
| }; |
| |
| pru0_1: pru@38000 { |
| compatible = "ti,am654-pru"; |
| reg = <0x38000 0x4000>, |
| <0x24000 0x100>, |
| <0x24400 0x100>; |
| reg-names = "iram", "control", "debug"; |
| firmware-name = "am65x-pru0_1-fw"; |
| interrupt-parent = <&icssg0_intc>; |
| interrupts = <18 3 3>; |
| interrupt-names = "vring"; |
| }; |
| |
| rtu0_1: rtu@6000 { |
| compatible = "ti,am654-rtu"; |
| reg = <0x6000 0x2000>, |
| <0x23800 0x100>, |
| <0x23c00 0x100>; |
| reg-names = "iram", "control", "debug"; |
| firmware-name = "am65x-rtu0_1-fw"; |
| interrupt-parent = <&icssg0_intc>; |
| interrupts = <22 5 5>; |
| interrupt-names = "vring"; |
| }; |
| |
| tx_pru0_1: txpru@c000 { |
| compatible = "ti,am654-tx-pru"; |
| reg = <0xc000 0x1800>, |
| <0x25800 0x100>, |
| <0x25c00 0x100>; |
| reg-names = "iram", "control", "debug"; |
| firmware-name = "am65x-txpru0_1-fw"; |
| }; |
| }; |