18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause)
28c2ecf20Sopenharmony_ci%YAML 1.2
38c2ecf20Sopenharmony_ci---
48c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/remoteproc/ti,omap-remoteproc.yaml#
58c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_cititle: OMAP4+ Remoteproc Devices
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cimaintainers:
108c2ecf20Sopenharmony_ci  - Suman Anna <s-anna@ti.com>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cidescription:
138c2ecf20Sopenharmony_ci  The OMAP family of SoCs usually have one or more slave processor sub-systems
148c2ecf20Sopenharmony_ci  that are used to offload some of the processor-intensive tasks, or to manage
158c2ecf20Sopenharmony_ci  other hardware accelerators, for achieving various system level goals.
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci  The processor cores in the sub-system are usually behind an IOMMU, and may
188c2ecf20Sopenharmony_ci  contain additional sub-modules like Internal RAM and/or ROMs, L1 and/or L2
198c2ecf20Sopenharmony_ci  caches, an Interrupt Controller, a Cache Controller etc.
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci  The OMAP SoCs usually have a DSP processor sub-system and/or an IPU processor
228c2ecf20Sopenharmony_ci  sub-system. The DSP processor sub-system can contain any of the TI's C64x,
238c2ecf20Sopenharmony_ci  C66x or C67x family of DSP cores as the main execution unit. The IPU processor
248c2ecf20Sopenharmony_ci  sub-system usually contains either a Dual-Core Cortex-M3 or Dual-Core
258c2ecf20Sopenharmony_ci  Cortex-M4 processors.
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci  Each remote processor sub-system is represented as a single DT node. Each node
288c2ecf20Sopenharmony_ci  has a number of required or optional properties that enable the OS running on
298c2ecf20Sopenharmony_ci  the host processor (MPU) to perform the device management of the remote
308c2ecf20Sopenharmony_ci  processor and to communicate with the remote processor. The various properties
318c2ecf20Sopenharmony_ci  can be classified as constant or variable. The constant properties are
328c2ecf20Sopenharmony_ci  dictated by the SoC and does not change from one board to another having the
338c2ecf20Sopenharmony_ci  same SoC. Examples of constant properties include 'iommus', 'reg'. The
348c2ecf20Sopenharmony_ci  variable properties are dictated by the system integration aspects such as
358c2ecf20Sopenharmony_ci  memory on the board, or configuration used within the corresponding firmware
368c2ecf20Sopenharmony_ci  image. Examples of variable properties include 'mboxes', 'memory-region',
378c2ecf20Sopenharmony_ci  'timers', 'watchdog-timers' etc.
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ciproperties:
408c2ecf20Sopenharmony_ci  compatible:
418c2ecf20Sopenharmony_ci    enum:
428c2ecf20Sopenharmony_ci      - ti,omap4-dsp
438c2ecf20Sopenharmony_ci      - ti,omap5-dsp
448c2ecf20Sopenharmony_ci      - ti,dra7-dsp
458c2ecf20Sopenharmony_ci      - ti,omap4-ipu
468c2ecf20Sopenharmony_ci      - ti,omap5-ipu
478c2ecf20Sopenharmony_ci      - ti,dra7-ipu
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci  iommus:
508c2ecf20Sopenharmony_ci    minItems: 1
518c2ecf20Sopenharmony_ci    maxItems: 2
528c2ecf20Sopenharmony_ci    description: |
538c2ecf20Sopenharmony_ci      phandles to OMAP IOMMU nodes, that need to be programmed
548c2ecf20Sopenharmony_ci      for this remote processor to access any external RAM memory or
558c2ecf20Sopenharmony_ci      other peripheral device address spaces. This property usually
568c2ecf20Sopenharmony_ci      has only a single phandle. Multiple phandles are used only in
578c2ecf20Sopenharmony_ci      cases where the sub-system has different ports for different
588c2ecf20Sopenharmony_ci      sub-modules within the processor sub-system (eg: DRA7 DSPs),
598c2ecf20Sopenharmony_ci      and need the same programming in both the MMUs.
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci  mboxes:
628c2ecf20Sopenharmony_ci    minItems: 1
638c2ecf20Sopenharmony_ci    maxItems: 2
648c2ecf20Sopenharmony_ci    description: |
658c2ecf20Sopenharmony_ci      OMAP Mailbox specifier denoting the sub-mailbox, to be used for
668c2ecf20Sopenharmony_ci      communication with the remote processor. The specifier format is
678c2ecf20Sopenharmony_ci      as per the bindings,
688c2ecf20Sopenharmony_ci      Documentation/devicetree/bindings/mailbox/omap-mailbox.txt
698c2ecf20Sopenharmony_ci      This property should match with the sub-mailbox node used in
708c2ecf20Sopenharmony_ci      the firmware image.
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci  clocks:
738c2ecf20Sopenharmony_ci    description: |
748c2ecf20Sopenharmony_ci      Main functional clock for the remote processor
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ci  resets:
778c2ecf20Sopenharmony_ci    description: |
788c2ecf20Sopenharmony_ci      Reset handles for the remote processor
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_ci  firmware-name:
818c2ecf20Sopenharmony_ci    description: |
828c2ecf20Sopenharmony_ci      Default name of the firmware to load to the remote processor.
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ci# Optional properties:
858c2ecf20Sopenharmony_ci# --------------------
868c2ecf20Sopenharmony_ci# Some of these properties are mandatory on some SoCs, and some are optional
878c2ecf20Sopenharmony_ci# depending on the configuration of the firmware image to be executed on the
888c2ecf20Sopenharmony_ci# remote processor. The conditions are mentioned for each property.
898c2ecf20Sopenharmony_ci#
908c2ecf20Sopenharmony_ci# The following are the optional properties:
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_ci  memory-region:
938c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/phandle
948c2ecf20Sopenharmony_ci    description: |
958c2ecf20Sopenharmony_ci      phandle to the reserved memory node to be associated
968c2ecf20Sopenharmony_ci      with the remoteproc device. The reserved memory node
978c2ecf20Sopenharmony_ci      can be a CMA memory node, and should be defined as
988c2ecf20Sopenharmony_ci      per the bindings,
998c2ecf20Sopenharmony_ci      Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt
1008c2ecf20Sopenharmony_ci
1018c2ecf20Sopenharmony_ci  reg:
1028c2ecf20Sopenharmony_ci    description: |
1038c2ecf20Sopenharmony_ci      Address space for any remoteproc memories present on
1048c2ecf20Sopenharmony_ci      the SoC. Should contain an entry for each value in
1058c2ecf20Sopenharmony_ci      'reg-names'. These are mandatory for all DSP and IPU
1068c2ecf20Sopenharmony_ci      processors that have them (OMAP4/OMAP5 DSPs do not have
1078c2ecf20Sopenharmony_ci      any RAMs)
1088c2ecf20Sopenharmony_ci
1098c2ecf20Sopenharmony_ci  reg-names:
1108c2ecf20Sopenharmony_ci    description: |
1118c2ecf20Sopenharmony_ci      Required names for each of the address spaces defined in
1128c2ecf20Sopenharmony_ci      the 'reg' property. Expects the names from the following
1138c2ecf20Sopenharmony_ci      list, in the specified order, each representing the corresponding
1148c2ecf20Sopenharmony_ci      internal RAM memory region.
1158c2ecf20Sopenharmony_ci    minItems: 1
1168c2ecf20Sopenharmony_ci    maxItems: 3
1178c2ecf20Sopenharmony_ci    items:
1188c2ecf20Sopenharmony_ci      - const: l2ram
1198c2ecf20Sopenharmony_ci      - const: l1pram
1208c2ecf20Sopenharmony_ci      - const: l1dram
1218c2ecf20Sopenharmony_ci
1228c2ecf20Sopenharmony_ci  ti,bootreg:
1238c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/phandle-array
1248c2ecf20Sopenharmony_ci    description: |
1258c2ecf20Sopenharmony_ci      Should be a triple of the phandle to the System Control
1268c2ecf20Sopenharmony_ci      Configuration region that contains the boot address
1278c2ecf20Sopenharmony_ci      register, the register offset of the boot address
1288c2ecf20Sopenharmony_ci      register within the System Control module, and the bit
1298c2ecf20Sopenharmony_ci      shift within the register. This property is required for
1308c2ecf20Sopenharmony_ci      all the DSP instances on OMAP4, OMAP5 and DRA7xx SoCs.
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ci  ti,autosuspend-delay-ms:
1338c2ecf20Sopenharmony_ci    description: |
1348c2ecf20Sopenharmony_ci      Custom autosuspend delay for the remoteproc in milliseconds.
1358c2ecf20Sopenharmony_ci      Recommended values is preferable to be in the order of couple
1368c2ecf20Sopenharmony_ci      of seconds. A negative value can also be used to disable the
1378c2ecf20Sopenharmony_ci      autosuspend behavior.
1388c2ecf20Sopenharmony_ci
1398c2ecf20Sopenharmony_ci  ti,timers:
1408c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/phandle-array
1418c2ecf20Sopenharmony_ci    description: |
1428c2ecf20Sopenharmony_ci      One or more phandles to OMAP DMTimer nodes, that serve
1438c2ecf20Sopenharmony_ci      as System/Tick timers for the OS running on the remote
1448c2ecf20Sopenharmony_ci      processors. This will usually be a single timer if the
1458c2ecf20Sopenharmony_ci      processor sub-system is running in SMP mode, or one per
1468c2ecf20Sopenharmony_ci      core in the processor sub-system. This can also be used
1478c2ecf20Sopenharmony_ci      to reserve specific timers to be dedicated to the
1488c2ecf20Sopenharmony_ci      remote processors.
1498c2ecf20Sopenharmony_ci
1508c2ecf20Sopenharmony_ci      This property is mandatory on remote processors requiring
1518c2ecf20Sopenharmony_ci      external tick wakeup, and to support Power Management
1528c2ecf20Sopenharmony_ci      features. The timers to be used should match with the
1538c2ecf20Sopenharmony_ci      timers used in the firmware image.
1548c2ecf20Sopenharmony_ci
1558c2ecf20Sopenharmony_ci  ti,watchdog-timers:
1568c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/phandle-array
1578c2ecf20Sopenharmony_ci    description: |
1588c2ecf20Sopenharmony_ci      One or more phandles to OMAP DMTimer nodes, used to
1598c2ecf20Sopenharmony_ci      serve as Watchdog timers for the processor cores. This
1608c2ecf20Sopenharmony_ci      will usually be one per executing processor core, even
1618c2ecf20Sopenharmony_ci      if the processor sub-system is running a SMP OS.
1628c2ecf20Sopenharmony_ci
1638c2ecf20Sopenharmony_ci      The timers to be used should match with the watchdog
1648c2ecf20Sopenharmony_ci      timers used in the firmware image.
1658c2ecf20Sopenharmony_ci
1668c2ecf20Sopenharmony_ciif:
1678c2ecf20Sopenharmony_ci  properties:
1688c2ecf20Sopenharmony_ci    compatible:
1698c2ecf20Sopenharmony_ci      enum:
1708c2ecf20Sopenharmony_ci        - ti,dra7-dsp
1718c2ecf20Sopenharmony_cithen:
1728c2ecf20Sopenharmony_ci  properties:
1738c2ecf20Sopenharmony_ci    reg:
1748c2ecf20Sopenharmony_ci      minItems: 3
1758c2ecf20Sopenharmony_ci      maxItems: 3
1768c2ecf20Sopenharmony_ci  required:
1778c2ecf20Sopenharmony_ci    - reg
1788c2ecf20Sopenharmony_ci    - reg-names
1798c2ecf20Sopenharmony_ci    - ti,bootreg
1808c2ecf20Sopenharmony_ci
1818c2ecf20Sopenharmony_cielse:
1828c2ecf20Sopenharmony_ci  if:
1838c2ecf20Sopenharmony_ci    properties:
1848c2ecf20Sopenharmony_ci      compatible:
1858c2ecf20Sopenharmony_ci        enum:
1868c2ecf20Sopenharmony_ci          - ti,omap4-ipu
1878c2ecf20Sopenharmony_ci          - ti,omap5-ipu
1888c2ecf20Sopenharmony_ci          - ti,dra7-ipu
1898c2ecf20Sopenharmony_ci  then:
1908c2ecf20Sopenharmony_ci    properties:
1918c2ecf20Sopenharmony_ci      reg:
1928c2ecf20Sopenharmony_ci        minItems: 1
1938c2ecf20Sopenharmony_ci        maxItems: 1
1948c2ecf20Sopenharmony_ci      ti,bootreg: false
1958c2ecf20Sopenharmony_ci    required:
1968c2ecf20Sopenharmony_ci      - reg
1978c2ecf20Sopenharmony_ci      - reg-names
1988c2ecf20Sopenharmony_ci
1998c2ecf20Sopenharmony_ci  else:
2008c2ecf20Sopenharmony_ci    properties:
2018c2ecf20Sopenharmony_ci      reg: false
2028c2ecf20Sopenharmony_ci    required:
2038c2ecf20Sopenharmony_ci      - ti,bootreg
2048c2ecf20Sopenharmony_ci
2058c2ecf20Sopenharmony_cirequired:
2068c2ecf20Sopenharmony_ci  - compatible
2078c2ecf20Sopenharmony_ci  - iommus
2088c2ecf20Sopenharmony_ci  - mboxes
2098c2ecf20Sopenharmony_ci  - clocks
2108c2ecf20Sopenharmony_ci  - resets
2118c2ecf20Sopenharmony_ci  - firmware-name
2128c2ecf20Sopenharmony_ci
2138c2ecf20Sopenharmony_ciadditionalProperties: false
2148c2ecf20Sopenharmony_ci
2158c2ecf20Sopenharmony_ciexamples:
2168c2ecf20Sopenharmony_ci  - |
2178c2ecf20Sopenharmony_ci
2188c2ecf20Sopenharmony_ci    //Example 1: OMAP4 DSP
2198c2ecf20Sopenharmony_ci
2208c2ecf20Sopenharmony_ci    /* DSP Reserved Memory node */
2218c2ecf20Sopenharmony_ci    #include <dt-bindings/clock/omap4.h>
2228c2ecf20Sopenharmony_ci    reserved-memory {
2238c2ecf20Sopenharmony_ci        #address-cells = <1>;
2248c2ecf20Sopenharmony_ci        #size-cells = <1>;
2258c2ecf20Sopenharmony_ci
2268c2ecf20Sopenharmony_ci        dsp_memory_region: dsp-memory@98000000 {
2278c2ecf20Sopenharmony_ci            compatible = "shared-dma-pool";
2288c2ecf20Sopenharmony_ci            reg = <0x98000000 0x800000>;
2298c2ecf20Sopenharmony_ci            reusable;
2308c2ecf20Sopenharmony_ci        };
2318c2ecf20Sopenharmony_ci    };
2328c2ecf20Sopenharmony_ci
2338c2ecf20Sopenharmony_ci    /* DSP node */
2348c2ecf20Sopenharmony_ci    ocp {
2358c2ecf20Sopenharmony_ci        dsp: dsp {
2368c2ecf20Sopenharmony_ci            compatible = "ti,omap4-dsp";
2378c2ecf20Sopenharmony_ci            ti,bootreg = <&scm_conf 0x304 0>;
2388c2ecf20Sopenharmony_ci            iommus = <&mmu_dsp>;
2398c2ecf20Sopenharmony_ci            mboxes = <&mailbox &mbox_dsp>;
2408c2ecf20Sopenharmony_ci            memory-region = <&dsp_memory_region>;
2418c2ecf20Sopenharmony_ci            ti,timers = <&timer5>;
2428c2ecf20Sopenharmony_ci            ti,watchdog-timers = <&timer6>;
2438c2ecf20Sopenharmony_ci            clocks = <&tesla_clkctrl OMAP4_DSP_CLKCTRL 0>;
2448c2ecf20Sopenharmony_ci            resets = <&prm_tesla 0>, <&prm_tesla 1>;
2458c2ecf20Sopenharmony_ci            firmware-name = "omap4-dsp-fw.xe64T";
2468c2ecf20Sopenharmony_ci        };
2478c2ecf20Sopenharmony_ci    };
2488c2ecf20Sopenharmony_ci
2498c2ecf20Sopenharmony_ci  - |+
2508c2ecf20Sopenharmony_ci
2518c2ecf20Sopenharmony_ci    //Example 2: OMAP5 IPU
2528c2ecf20Sopenharmony_ci
2538c2ecf20Sopenharmony_ci    /* IPU Reserved Memory node */
2548c2ecf20Sopenharmony_ci    #include <dt-bindings/clock/omap5.h>
2558c2ecf20Sopenharmony_ci    reserved-memory {
2568c2ecf20Sopenharmony_ci        #address-cells = <2>;
2578c2ecf20Sopenharmony_ci        #size-cells = <2>;
2588c2ecf20Sopenharmony_ci
2598c2ecf20Sopenharmony_ci        ipu_memory_region: ipu-memory@95800000 {
2608c2ecf20Sopenharmony_ci            compatible = "shared-dma-pool";
2618c2ecf20Sopenharmony_ci            reg = <0 0x95800000 0 0x3800000>;
2628c2ecf20Sopenharmony_ci            reusable;
2638c2ecf20Sopenharmony_ci        };
2648c2ecf20Sopenharmony_ci    };
2658c2ecf20Sopenharmony_ci
2668c2ecf20Sopenharmony_ci    /* IPU node */
2678c2ecf20Sopenharmony_ci    ocp {
2688c2ecf20Sopenharmony_ci        #address-cells = <1>;
2698c2ecf20Sopenharmony_ci        #size-cells = <1>;
2708c2ecf20Sopenharmony_ci
2718c2ecf20Sopenharmony_ci        ipu: ipu@55020000 {
2728c2ecf20Sopenharmony_ci            compatible = "ti,omap5-ipu";
2738c2ecf20Sopenharmony_ci            reg = <0x55020000 0x10000>;
2748c2ecf20Sopenharmony_ci            reg-names = "l2ram";
2758c2ecf20Sopenharmony_ci            iommus = <&mmu_ipu>;
2768c2ecf20Sopenharmony_ci            mboxes = <&mailbox &mbox_ipu>;
2778c2ecf20Sopenharmony_ci            memory-region = <&ipu_memory_region>;
2788c2ecf20Sopenharmony_ci            ti,timers = <&timer3>, <&timer4>;
2798c2ecf20Sopenharmony_ci            ti,watchdog-timers = <&timer9>, <&timer11>;
2808c2ecf20Sopenharmony_ci            clocks = <&ipu_clkctrl OMAP5_MMU_IPU_CLKCTRL 0>;
2818c2ecf20Sopenharmony_ci            resets = <&prm_core 2>;
2828c2ecf20Sopenharmony_ci            firmware-name = "omap5-ipu-fw.xem4";
2838c2ecf20Sopenharmony_ci        };
2848c2ecf20Sopenharmony_ci    };
2858c2ecf20Sopenharmony_ci
2868c2ecf20Sopenharmony_ci  - |+
2878c2ecf20Sopenharmony_ci
2888c2ecf20Sopenharmony_ci    //Example 3: DRA7xx/AM57xx DSP
2898c2ecf20Sopenharmony_ci
2908c2ecf20Sopenharmony_ci    /* DSP1 Reserved Memory node */
2918c2ecf20Sopenharmony_ci    #include <dt-bindings/clock/dra7.h>
2928c2ecf20Sopenharmony_ci    reserved-memory {
2938c2ecf20Sopenharmony_ci        #address-cells = <2>;
2948c2ecf20Sopenharmony_ci        #size-cells = <2>;
2958c2ecf20Sopenharmony_ci
2968c2ecf20Sopenharmony_ci        dsp1_memory_region: dsp1-memory@99000000 {
2978c2ecf20Sopenharmony_ci            compatible = "shared-dma-pool";
2988c2ecf20Sopenharmony_ci            reg = <0x0 0x99000000 0x0 0x4000000>;
2998c2ecf20Sopenharmony_ci            reusable;
3008c2ecf20Sopenharmony_ci        };
3018c2ecf20Sopenharmony_ci    };
3028c2ecf20Sopenharmony_ci
3038c2ecf20Sopenharmony_ci    /* DSP1 node */
3048c2ecf20Sopenharmony_ci    ocp {
3058c2ecf20Sopenharmony_ci        #address-cells = <1>;
3068c2ecf20Sopenharmony_ci        #size-cells = <1>;
3078c2ecf20Sopenharmony_ci
3088c2ecf20Sopenharmony_ci        dsp1: dsp@40800000 {
3098c2ecf20Sopenharmony_ci            compatible = "ti,dra7-dsp";
3108c2ecf20Sopenharmony_ci            reg = <0x40800000 0x48000>,
3118c2ecf20Sopenharmony_ci                  <0x40e00000 0x8000>,
3128c2ecf20Sopenharmony_ci                  <0x40f00000 0x8000>;
3138c2ecf20Sopenharmony_ci            reg-names = "l2ram", "l1pram", "l1dram";
3148c2ecf20Sopenharmony_ci            ti,bootreg = <&scm_conf 0x55c 0>;
3158c2ecf20Sopenharmony_ci            iommus = <&mmu0_dsp1>, <&mmu1_dsp1>;
3168c2ecf20Sopenharmony_ci            mboxes = <&mailbox5 &mbox_dsp1_ipc3x>;
3178c2ecf20Sopenharmony_ci            memory-region = <&dsp1_memory_region>;
3188c2ecf20Sopenharmony_ci            ti,timers = <&timer5>;
3198c2ecf20Sopenharmony_ci            ti,watchdog-timers = <&timer10>;
3208c2ecf20Sopenharmony_ci            resets = <&prm_dsp1 0>;
3218c2ecf20Sopenharmony_ci            clocks = <&dsp1_clkctrl DRA7_DSP1_MMU0_DSP1_CLKCTRL 0>;
3228c2ecf20Sopenharmony_ci            firmware-name = "dra7-dsp1-fw.xe66";
3238c2ecf20Sopenharmony_ci        };
3248c2ecf20Sopenharmony_ci    };
325