1*4882a593Smuzhiyun# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause) 2*4882a593Smuzhiyun%YAML 1.2 3*4882a593Smuzhiyun--- 4*4882a593Smuzhiyun$id: http://devicetree.org/schemas/remoteproc/ti,k3-r5f-rproc.yaml# 5*4882a593Smuzhiyun$schema: http://devicetree.org/meta-schemas/core.yaml# 6*4882a593Smuzhiyun 7*4882a593Smuzhiyuntitle: TI K3 R5F processor subsystems 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunmaintainers: 10*4882a593Smuzhiyun - Suman Anna <s-anna@ti.com> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyundescription: | 13*4882a593Smuzhiyun The TI K3 family of SoCs usually have one or more dual-core Arm Cortex R5F 14*4882a593Smuzhiyun processor subsystems/clusters (R5FSS). The dual core cluster can be used 15*4882a593Smuzhiyun either in a LockStep mode providing safety/fault tolerance features or in a 16*4882a593Smuzhiyun Split mode providing two individual compute cores for doubling the compute 17*4882a593Smuzhiyun capacity. These are used together with other processors present on the SoC 18*4882a593Smuzhiyun to achieve various system level goals. 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun Each Dual-Core R5F sub-system is represented as a single DTS node 21*4882a593Smuzhiyun representing the cluster, with a pair of child DT nodes representing 22*4882a593Smuzhiyun the individual R5F cores. Each node has a number of required or optional 23*4882a593Smuzhiyun properties that enable the OS running on the host processor to perform 24*4882a593Smuzhiyun the device management of the remote processor and to communicate with the 25*4882a593Smuzhiyun remote processor. 26*4882a593Smuzhiyun 27*4882a593Smuzhiyunproperties: 28*4882a593Smuzhiyun $nodename: 29*4882a593Smuzhiyun pattern: "^r5fss(@.*)?" 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun compatible: 32*4882a593Smuzhiyun enum: 33*4882a593Smuzhiyun - ti,am654-r5fss 34*4882a593Smuzhiyun - ti,j721e-r5fss 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun power-domains: 37*4882a593Smuzhiyun description: | 38*4882a593Smuzhiyun Should contain a phandle to a PM domain provider node and an args 39*4882a593Smuzhiyun specifier containing the R5FSS device id value. 40*4882a593Smuzhiyun maxItems: 1 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun "#address-cells": 43*4882a593Smuzhiyun const: 1 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun "#size-cells": 46*4882a593Smuzhiyun const: 1 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun ranges: 49*4882a593Smuzhiyun description: | 50*4882a593Smuzhiyun Standard ranges definition providing address translations for 51*4882a593Smuzhiyun local R5F TCM address spaces to bus addresses. 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun# Optional properties: 54*4882a593Smuzhiyun# -------------------- 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun ti,cluster-mode: 57*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32 58*4882a593Smuzhiyun enum: [0, 1] 59*4882a593Smuzhiyun description: | 60*4882a593Smuzhiyun Configuration Mode for the Dual R5F cores within the R5F cluster. 61*4882a593Smuzhiyun Should be either a value of 1 (LockStep mode) or 0 (Split mode), 62*4882a593Smuzhiyun default is LockStep mode if omitted. 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun# R5F Processor Child Nodes: 65*4882a593Smuzhiyun# ========================== 66*4882a593Smuzhiyun 67*4882a593SmuzhiyunpatternProperties: 68*4882a593Smuzhiyun "^r5f@[a-f0-9]+$": 69*4882a593Smuzhiyun type: object 70*4882a593Smuzhiyun description: | 71*4882a593Smuzhiyun The R5F Sub-System device node should define two R5F child nodes, each 72*4882a593Smuzhiyun node representing a TI instantiation of the Arm Cortex R5F core. There 73*4882a593Smuzhiyun are some specific integration differences for the IP like the usage of 74*4882a593Smuzhiyun a Region Address Translator (RAT) for translating the larger SoC bus 75*4882a593Smuzhiyun addresses into a 32-bit address space for the processor. 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun Each R5F core has an associated 64 KB of Tightly-Coupled Memory (TCM) 78*4882a593Smuzhiyun internal memories split between two banks - TCMA and TCMB (further 79*4882a593Smuzhiyun interleaved into two banks TCMB0 and TCMB1). These memories (also called 80*4882a593Smuzhiyun ATCM and BTCM) provide read/write performance on par with the core's L1 81*4882a593Smuzhiyun caches. Each of the TCMs can be enabled or disabled independently and 82*4882a593Smuzhiyun either of them can be configured to appear at that R5F's address 0x0. 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun The cores do not use an MMU, but has a Region Address Translater 85*4882a593Smuzhiyun (RAT) module that is accessible only from the R5Fs for providing 86*4882a593Smuzhiyun translations between 32-bit CPU addresses into larger system bus 87*4882a593Smuzhiyun addresses. Cache and memory access settings are provided through a 88*4882a593Smuzhiyun Memory Protection Unit (MPU), programmable only from the R5Fs. 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun allOf: 91*4882a593Smuzhiyun - $ref: /schemas/arm/keystone/ti,k3-sci-common.yaml# 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun properties: 94*4882a593Smuzhiyun compatible: 95*4882a593Smuzhiyun enum: 96*4882a593Smuzhiyun - ti,am654-r5f 97*4882a593Smuzhiyun - ti,j721e-r5f 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun reg: 100*4882a593Smuzhiyun items: 101*4882a593Smuzhiyun - description: Address and Size of the ATCM internal memory region 102*4882a593Smuzhiyun - description: Address and Size of the BTCM internal memory region 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun reg-names: 105*4882a593Smuzhiyun items: 106*4882a593Smuzhiyun - const: atcm 107*4882a593Smuzhiyun - const: btcm 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun resets: 110*4882a593Smuzhiyun description: | 111*4882a593Smuzhiyun Should contain the phandle to the reset controller node managing the 112*4882a593Smuzhiyun local resets for this device, and a reset specifier. 113*4882a593Smuzhiyun maxItems: 1 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun firmware-name: 116*4882a593Smuzhiyun description: | 117*4882a593Smuzhiyun Should contain the name of the default firmware image 118*4882a593Smuzhiyun file located on the firmware search path 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun# The following properties are mandatory for R5F Core0 in both LockStep and Split 121*4882a593Smuzhiyun# modes, and are mandatory for R5F Core1 _only_ in Split mode. They are unused for 122*4882a593Smuzhiyun# R5F Core1 in LockStep mode: 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun mboxes: 125*4882a593Smuzhiyun description: | 126*4882a593Smuzhiyun OMAP Mailbox specifier denoting the sub-mailbox, to be used for 127*4882a593Smuzhiyun communication with the remote processor. This property should match 128*4882a593Smuzhiyun with the sub-mailbox node used in the firmware image. 129*4882a593Smuzhiyun maxItems: 1 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun memory-region: 132*4882a593Smuzhiyun description: | 133*4882a593Smuzhiyun phandle to the reserved memory nodes to be associated with the 134*4882a593Smuzhiyun remoteproc device. There should be at least two reserved memory nodes 135*4882a593Smuzhiyun defined. The reserved memory nodes should be carveout nodes, and 136*4882a593Smuzhiyun should be defined with a "no-map" property as per the bindings in 137*4882a593Smuzhiyun Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt 138*4882a593Smuzhiyun minItems: 2 139*4882a593Smuzhiyun maxItems: 8 140*4882a593Smuzhiyun items: 141*4882a593Smuzhiyun - description: region used for dynamic DMA allocations like vrings and 142*4882a593Smuzhiyun vring buffers 143*4882a593Smuzhiyun - description: region reserved for firmware image sections 144*4882a593Smuzhiyun additionalItems: true 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun# Optional properties: 148*4882a593Smuzhiyun# -------------------- 149*4882a593Smuzhiyun# The following properties are optional properties for each of the R5F cores: 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun ti,atcm-enable: 152*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32 153*4882a593Smuzhiyun enum: [0, 1] 154*4882a593Smuzhiyun description: | 155*4882a593Smuzhiyun R5F core configuration mode dictating if ATCM should be enabled. The 156*4882a593Smuzhiyun R5F address of ATCM is dictated by ti,loczrama property. Should be 157*4882a593Smuzhiyun either a value of 1 (enabled) or 0 (disabled), default is disabled 158*4882a593Smuzhiyun if omitted. Recommended to enable it for maximizing TCMs. 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun ti,btcm-enable: 161*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32 162*4882a593Smuzhiyun enum: [0, 1] 163*4882a593Smuzhiyun description: | 164*4882a593Smuzhiyun R5F core configuration mode dictating if BTCM should be enabled. The 165*4882a593Smuzhiyun R5F address of BTCM is dictated by ti,loczrama property. Should be 166*4882a593Smuzhiyun either a value of 1 (enabled) or 0 (disabled), default is enabled if 167*4882a593Smuzhiyun omitted. 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun ti,loczrama: 170*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32 171*4882a593Smuzhiyun enum: [0, 1] 172*4882a593Smuzhiyun description: | 173*4882a593Smuzhiyun R5F core configuration mode dictating which TCM should appear at 174*4882a593Smuzhiyun address 0 (from core's view). Should be either a value of 1 (ATCM 175*4882a593Smuzhiyun at 0x0) or 0 (BTCM at 0x0), default value is 1 if omitted. 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun sram: 178*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/phandle-array 179*4882a593Smuzhiyun minItems: 1 180*4882a593Smuzhiyun maxItems: 4 181*4882a593Smuzhiyun description: | 182*4882a593Smuzhiyun phandles to one or more reserved on-chip SRAM regions. The regions 183*4882a593Smuzhiyun should be defined as child nodes of the respective SRAM node, and 184*4882a593Smuzhiyun should be defined as per the generic bindings in, 185*4882a593Smuzhiyun Documentation/devicetree/bindings/sram/sram.yaml 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun required: 188*4882a593Smuzhiyun - compatible 189*4882a593Smuzhiyun - reg 190*4882a593Smuzhiyun - reg-names 191*4882a593Smuzhiyun - ti,sci 192*4882a593Smuzhiyun - ti,sci-dev-id 193*4882a593Smuzhiyun - ti,sci-proc-ids 194*4882a593Smuzhiyun - resets 195*4882a593Smuzhiyun - firmware-name 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun unevaluatedProperties: false 198*4882a593Smuzhiyun 199*4882a593Smuzhiyunrequired: 200*4882a593Smuzhiyun - compatible 201*4882a593Smuzhiyun - power-domains 202*4882a593Smuzhiyun - "#address-cells" 203*4882a593Smuzhiyun - "#size-cells" 204*4882a593Smuzhiyun - ranges 205*4882a593Smuzhiyun 206*4882a593SmuzhiyunadditionalProperties: false 207*4882a593Smuzhiyun 208*4882a593Smuzhiyunexamples: 209*4882a593Smuzhiyun - | 210*4882a593Smuzhiyun / { 211*4882a593Smuzhiyun model = "Texas Instruments K3 AM654 SoC"; 212*4882a593Smuzhiyun compatible = "ti,am654-evm", "ti,am654"; 213*4882a593Smuzhiyun #address-cells = <2>; 214*4882a593Smuzhiyun #size-cells = <2>; 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun bus@100000 { 217*4882a593Smuzhiyun compatible = "simple-bus"; 218*4882a593Smuzhiyun #address-cells = <2>; 219*4882a593Smuzhiyun #size-cells = <2>; 220*4882a593Smuzhiyun ranges = <0x00 0x00100000 0x00 0x00100000 0x00 0x00020000>, /* ctrl mmr */ 221*4882a593Smuzhiyun <0x00 0x41000000 0x00 0x41000000 0x00 0x00020000>, 222*4882a593Smuzhiyun <0x00 0x41400000 0x00 0x41400000 0x00 0x00020000>, 223*4882a593Smuzhiyun <0x00 0x41c00000 0x00 0x41c00000 0x00 0x00080000>; 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun bus@28380000 { 226*4882a593Smuzhiyun compatible = "simple-bus"; 227*4882a593Smuzhiyun #address-cells = <2>; 228*4882a593Smuzhiyun #size-cells = <2>; 229*4882a593Smuzhiyun ranges = <0x00 0x28380000 0x00 0x28380000 0x00 0x03880000>, /* MCU NAVSS */ 230*4882a593Smuzhiyun <0x00 0x41000000 0x00 0x41000000 0x00 0x00020000>, /* MCU R5F Core0 */ 231*4882a593Smuzhiyun <0x00 0x41400000 0x00 0x41400000 0x00 0x00020000>, /* MCU R5F Core1 */ 232*4882a593Smuzhiyun <0x00 0x41c00000 0x00 0x41c00000 0x00 0x00080000>; /* MCU SRAM */ 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun /* AM65x MCU R5FSS node */ 235*4882a593Smuzhiyun mcu_r5fss0: r5fss@41000000 { 236*4882a593Smuzhiyun compatible = "ti,am654-r5fss"; 237*4882a593Smuzhiyun power-domains = <&k3_pds 129>; 238*4882a593Smuzhiyun ti,cluster-mode = <1>; 239*4882a593Smuzhiyun #address-cells = <1>; 240*4882a593Smuzhiyun #size-cells = <1>; 241*4882a593Smuzhiyun ranges = <0x41000000 0x00 0x41000000 0x20000>, 242*4882a593Smuzhiyun <0x41400000 0x00 0x41400000 0x20000>; 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun mcu_r5f0: r5f@41000000 { 245*4882a593Smuzhiyun compatible = "ti,am654-r5f"; 246*4882a593Smuzhiyun reg = <0x41000000 0x00008000>, 247*4882a593Smuzhiyun <0x41010000 0x00008000>; 248*4882a593Smuzhiyun reg-names = "atcm", "btcm"; 249*4882a593Smuzhiyun ti,sci = <&dmsc>; 250*4882a593Smuzhiyun ti,sci-dev-id = <159>; 251*4882a593Smuzhiyun ti,sci-proc-ids = <0x01 0xFF>; 252*4882a593Smuzhiyun resets = <&k3_reset 159 1>; 253*4882a593Smuzhiyun firmware-name = "am65x-mcu-r5f0_0-fw"; 254*4882a593Smuzhiyun ti,atcm-enable = <1>; 255*4882a593Smuzhiyun ti,btcm-enable = <1>; 256*4882a593Smuzhiyun ti,loczrama = <1>; 257*4882a593Smuzhiyun mboxes = <&mailbox0 &mbox_mcu_r5fss0_core0>; 258*4882a593Smuzhiyun memory-region = <&mcu_r5fss0_core0_dma_memory_region>, 259*4882a593Smuzhiyun <&mcu_r5fss0_core0_memory_region>; 260*4882a593Smuzhiyun sram = <&mcu_r5fss0_core0_sram>; 261*4882a593Smuzhiyun }; 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun mcu_r5f1: r5f@41400000 { 264*4882a593Smuzhiyun compatible = "ti,am654-r5f"; 265*4882a593Smuzhiyun reg = <0x41400000 0x00008000>, 266*4882a593Smuzhiyun <0x41410000 0x00008000>; 267*4882a593Smuzhiyun reg-names = "atcm", "btcm"; 268*4882a593Smuzhiyun ti,sci = <&dmsc>; 269*4882a593Smuzhiyun ti,sci-dev-id = <245>; 270*4882a593Smuzhiyun ti,sci-proc-ids = <0x02 0xFF>; 271*4882a593Smuzhiyun resets = <&k3_reset 245 1>; 272*4882a593Smuzhiyun firmware-name = "am65x-mcu-r5f0_1-fw"; 273*4882a593Smuzhiyun ti,atcm-enable = <1>; 274*4882a593Smuzhiyun ti,btcm-enable = <1>; 275*4882a593Smuzhiyun ti,loczrama = <1>; 276*4882a593Smuzhiyun mboxes = <&mailbox1 &mbox_mcu_r5fss0_core1>; 277*4882a593Smuzhiyun }; 278*4882a593Smuzhiyun }; 279*4882a593Smuzhiyun }; 280*4882a593Smuzhiyun }; 281*4882a593Smuzhiyun }; 282