162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/remoteproc/ti,pru-rproc.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: TI Programmable Realtime Unit (PRU) cores
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Suman Anna <s-anna@ti.com>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription: |
1362306a36Sopenharmony_ci  Each Programmable Real-Time Unit and Industrial Communication Subsystem
1462306a36Sopenharmony_ci  (PRU-ICSS or PRUSS) has two 32-bit load/store RISC CPU cores called
1562306a36Sopenharmony_ci  Programmable Real-Time Units (PRUs), each represented by a node. Each PRU
1662306a36Sopenharmony_ci  core has a dedicated Instruction RAM, Control and Debug register sets, and
1762306a36Sopenharmony_ci  use the Data RAMs present within the PRU-ICSS for code execution.
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci  The K3 SoCs containing ICSSG v1.0 (eg: AM65x SR1.0) also have two Auxiliary
2062306a36Sopenharmony_ci  PRU cores called RTUs with slightly different IP integration. The K3 SoCs
2162306a36Sopenharmony_ci  containing the revised ICSSG v1.1 (eg: J721E, AM65x SR2.0) have an extra two
2262306a36Sopenharmony_ci  auxiliary Transmit PRU cores called Tx_PRUs that augment the PRUs. Each RTU
2362306a36Sopenharmony_ci  or Tx_PRU core can also be used independently like a PRU, or alongside a
2462306a36Sopenharmony_ci  corresponding PRU core to provide/implement auxiliary functionality/support.
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci  Each PRU, RTU or Tx_PRU core node should be defined as a child node of the
2762306a36Sopenharmony_ci  corresponding PRU-ICSS node. Each node can optionally be rendered inactive by
2862306a36Sopenharmony_ci  using the standard DT string property, "status".
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci  Please see the overall PRU-ICSS bindings document for additional details
3162306a36Sopenharmony_ci  including a complete example,
3262306a36Sopenharmony_ci    Documentation/devicetree/bindings/soc/ti/ti,pruss.yaml
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ciproperties:
3562306a36Sopenharmony_ci  compatible:
3662306a36Sopenharmony_ci    enum:
3762306a36Sopenharmony_ci      - ti,am3356-pru   # for AM335x SoC family (AM3356+ SoCs only)
3862306a36Sopenharmony_ci      - ti,am4376-pru   # for AM437x SoC family (AM4376+ SoCs only)
3962306a36Sopenharmony_ci      - ti,am5728-pru   # for AM57xx SoC family
4062306a36Sopenharmony_ci      - ti,am625-pru    # for PRUs in K3 AM62x SoC family
4162306a36Sopenharmony_ci      - ti,am642-pru    # for PRUs in K3 AM64x SoC family
4262306a36Sopenharmony_ci      - ti,am642-rtu    # for RTUs in K3 AM64x SoC family
4362306a36Sopenharmony_ci      - ti,am642-tx-pru # for Tx_PRUs in K3 AM64x SoC family
4462306a36Sopenharmony_ci      - ti,am654-pru    # for PRUs in K3 AM65x SoC family
4562306a36Sopenharmony_ci      - ti,am654-rtu    # for RTUs in K3 AM65x SoC family
4662306a36Sopenharmony_ci      - ti,am654-tx-pru # for Tx_PRUs in K3 AM65x SR2.0 SoCs
4762306a36Sopenharmony_ci      - ti,j721e-pru    # for PRUs in K3 J721E SoC family
4862306a36Sopenharmony_ci      - ti,j721e-rtu    # for RTUs in K3 J721E SoC family
4962306a36Sopenharmony_ci      - ti,j721e-tx-pru # for Tx_PRUs in K3 J721E SoC family
5062306a36Sopenharmony_ci      - ti,k2g-pru      # for 66AK2G SoC family
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci  reg:
5362306a36Sopenharmony_ci    items:
5462306a36Sopenharmony_ci      - description: Address and Size of the PRU Instruction RAM
5562306a36Sopenharmony_ci      - description: Address and Size of the PRU CTRL sub-module registers
5662306a36Sopenharmony_ci      - description: Address and Size of the PRU Debug sub-module registers
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci  reg-names:
5962306a36Sopenharmony_ci    items:
6062306a36Sopenharmony_ci      - const: iram
6162306a36Sopenharmony_ci      - const: control
6262306a36Sopenharmony_ci      - const: debug
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci  firmware-name:
6562306a36Sopenharmony_ci    description: |
6662306a36Sopenharmony_ci      Should contain the name of the default firmware image
6762306a36Sopenharmony_ci      file located on the firmware search path.
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ciif:
7062306a36Sopenharmony_ci  properties:
7162306a36Sopenharmony_ci    compatible:
7262306a36Sopenharmony_ci      enum:
7362306a36Sopenharmony_ci        - ti,am654-rtu
7462306a36Sopenharmony_ci        - ti,j721e-rtu
7562306a36Sopenharmony_ci        - ti,am642-rtu
7662306a36Sopenharmony_cithen:
7762306a36Sopenharmony_ci  properties:
7862306a36Sopenharmony_ci    $nodename:
7962306a36Sopenharmony_ci      pattern: "^rtu@[0-9a-f]+$"
8062306a36Sopenharmony_cielse:
8162306a36Sopenharmony_ci  if:
8262306a36Sopenharmony_ci    properties:
8362306a36Sopenharmony_ci      compatible:
8462306a36Sopenharmony_ci        enum:
8562306a36Sopenharmony_ci          - ti,am654-tx-pru
8662306a36Sopenharmony_ci          - ti,j721e-tx-pru
8762306a36Sopenharmony_ci          - ti,am642-tx-pru
8862306a36Sopenharmony_ci  then:
8962306a36Sopenharmony_ci    properties:
9062306a36Sopenharmony_ci      $nodename:
9162306a36Sopenharmony_ci        pattern: "^txpru@[0-9a-f]+"
9262306a36Sopenharmony_ci  else:
9362306a36Sopenharmony_ci    properties:
9462306a36Sopenharmony_ci      $nodename:
9562306a36Sopenharmony_ci        pattern: "^pru@[0-9a-f]+$"
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_cirequired:
9862306a36Sopenharmony_ci  - compatible
9962306a36Sopenharmony_ci  - reg
10062306a36Sopenharmony_ci  - reg-names
10162306a36Sopenharmony_ci  - firmware-name
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ciadditionalProperties: false
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ciexamples:
10662306a36Sopenharmony_ci  - |
10762306a36Sopenharmony_ci    /* AM33xx PRU-ICSS */
10862306a36Sopenharmony_ci    pruss_tm: target-module@300000 {  /* 0x4a300000, ap 9 04.0 */
10962306a36Sopenharmony_ci      compatible = "ti,sysc-pruss", "ti,sysc";
11062306a36Sopenharmony_ci      #address-cells = <1>;
11162306a36Sopenharmony_ci      #size-cells = <1>;
11262306a36Sopenharmony_ci      ranges = <0x0 0x300000 0x80000>;
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci      pruss: pruss@0 {
11562306a36Sopenharmony_ci        compatible = "ti,am3356-pruss";
11662306a36Sopenharmony_ci        reg = <0x0 0x80000>;
11762306a36Sopenharmony_ci        #address-cells = <1>;
11862306a36Sopenharmony_ci        #size-cells = <1>;
11962306a36Sopenharmony_ci        ranges;
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci        pruss_mem: memories@0 {
12262306a36Sopenharmony_ci          reg = <0x0 0x2000>,
12362306a36Sopenharmony_ci                <0x2000 0x2000>,
12462306a36Sopenharmony_ci                <0x10000 0x3000>;
12562306a36Sopenharmony_ci          reg-names = "dram0", "dram1", "shrdram2";
12662306a36Sopenharmony_ci        };
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci        pru0: pru@34000 {
12962306a36Sopenharmony_ci          compatible = "ti,am3356-pru";
13062306a36Sopenharmony_ci          reg = <0x34000 0x2000>,
13162306a36Sopenharmony_ci                <0x22000 0x400>,
13262306a36Sopenharmony_ci                <0x22400 0x100>;
13362306a36Sopenharmony_ci          reg-names = "iram", "control", "debug";
13462306a36Sopenharmony_ci          firmware-name = "am335x-pru0-fw";
13562306a36Sopenharmony_ci        };
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci        pru1: pru@38000 {
13862306a36Sopenharmony_ci          compatible = "ti,am3356-pru";
13962306a36Sopenharmony_ci          reg = <0x38000 0x2000>,
14062306a36Sopenharmony_ci                <0x24000 0x400>,
14162306a36Sopenharmony_ci                <0x24400 0x100>;
14262306a36Sopenharmony_ci          reg-names = "iram", "control", "debug";
14362306a36Sopenharmony_ci          firmware-name = "am335x-pru1-fw";
14462306a36Sopenharmony_ci        };
14562306a36Sopenharmony_ci      };
14662306a36Sopenharmony_ci    };
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci  - |
14962306a36Sopenharmony_ci    /* AM65x SR2.0 ICSSG */
15062306a36Sopenharmony_ci    #include <dt-bindings/soc/ti,sci_pm_domain.h>
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci    icssg0: icssg@b000000 {
15362306a36Sopenharmony_ci      compatible = "ti,am654-icssg";
15462306a36Sopenharmony_ci      reg = <0xb000000 0x80000>;
15562306a36Sopenharmony_ci      power-domains = <&k3_pds 62 TI_SCI_PD_EXCLUSIVE>;
15662306a36Sopenharmony_ci      #address-cells = <1>;
15762306a36Sopenharmony_ci      #size-cells = <1>;
15862306a36Sopenharmony_ci      ranges = <0x0 0xb000000 0x80000>;
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci      icssg0_mem: memories@0 {
16162306a36Sopenharmony_ci        reg = <0x0 0x2000>,
16262306a36Sopenharmony_ci              <0x2000 0x2000>,
16362306a36Sopenharmony_ci              <0x10000 0x10000>;
16462306a36Sopenharmony_ci        reg-names = "dram0", "dram1", "shrdram2";
16562306a36Sopenharmony_ci      };
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci      pru0_0: pru@34000 {
16862306a36Sopenharmony_ci        compatible = "ti,am654-pru";
16962306a36Sopenharmony_ci        reg = <0x34000 0x4000>,
17062306a36Sopenharmony_ci              <0x22000 0x100>,
17162306a36Sopenharmony_ci              <0x22400 0x100>;
17262306a36Sopenharmony_ci        reg-names = "iram", "control", "debug";
17362306a36Sopenharmony_ci        firmware-name = "am65x-pru0_0-fw";
17462306a36Sopenharmony_ci      };
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci      rtu0_0: rtu@4000 {
17762306a36Sopenharmony_ci        compatible = "ti,am654-rtu";
17862306a36Sopenharmony_ci        reg = <0x4000 0x2000>,
17962306a36Sopenharmony_ci              <0x23000 0x100>,
18062306a36Sopenharmony_ci              <0x23400 0x100>;
18162306a36Sopenharmony_ci        reg-names = "iram", "control", "debug";
18262306a36Sopenharmony_ci        firmware-name = "am65x-rtu0_0-fw";
18362306a36Sopenharmony_ci      };
18462306a36Sopenharmony_ci
18562306a36Sopenharmony_ci      tx_pru0_0: txpru@a000 {
18662306a36Sopenharmony_ci        compatible = "ti,am654-tx-pru";
18762306a36Sopenharmony_ci        reg = <0xa000 0x1800>,
18862306a36Sopenharmony_ci              <0x25000 0x100>,
18962306a36Sopenharmony_ci              <0x25400 0x100>;
19062306a36Sopenharmony_ci        reg-names = "iram", "control", "debug";
19162306a36Sopenharmony_ci        firmware-name = "am65x-txpru0_0-fw";
19262306a36Sopenharmony_ci      };
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci      pru0_1: pru@38000 {
19562306a36Sopenharmony_ci        compatible = "ti,am654-pru";
19662306a36Sopenharmony_ci        reg = <0x38000 0x4000>,
19762306a36Sopenharmony_ci              <0x24000 0x100>,
19862306a36Sopenharmony_ci              <0x24400 0x100>;
19962306a36Sopenharmony_ci        reg-names = "iram", "control", "debug";
20062306a36Sopenharmony_ci        firmware-name = "am65x-pru0_1-fw";
20162306a36Sopenharmony_ci      };
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_ci      rtu0_1: rtu@6000 {
20462306a36Sopenharmony_ci        compatible = "ti,am654-rtu";
20562306a36Sopenharmony_ci        reg = <0x6000 0x2000>,
20662306a36Sopenharmony_ci              <0x23800 0x100>,
20762306a36Sopenharmony_ci              <0x23c00 0x100>;
20862306a36Sopenharmony_ci        reg-names = "iram", "control", "debug";
20962306a36Sopenharmony_ci        firmware-name = "am65x-rtu0_1-fw";
21062306a36Sopenharmony_ci      };
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ci      tx_pru0_1: txpru@c000 {
21362306a36Sopenharmony_ci        compatible = "ti,am654-tx-pru";
21462306a36Sopenharmony_ci        reg = <0xc000 0x1800>,
21562306a36Sopenharmony_ci              <0x25800 0x100>,
21662306a36Sopenharmony_ci              <0x25c00 0x100>;
21762306a36Sopenharmony_ci        reg-names = "iram", "control", "debug";
21862306a36Sopenharmony_ci        firmware-name = "am65x-txpru0_1-fw";
21962306a36Sopenharmony_ci      };
22062306a36Sopenharmony_ci    };
221