summaryrefslogtreecommitdiff
path: root/Documentation/devicetree/bindings/remoteproc/ti,omap-remoteproc.yaml
blob: 0ef0bc4983579bb02f0f53bed3c287fd26e0dd7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/remoteproc/ti,omap-remoteproc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: OMAP4+ Remoteproc Devices

maintainers:
  - Suman Anna <s-anna@ti.com>

description:
  The OMAP family of SoCs usually have one or more slave processor sub-systems
  that are used to offload some of the processor-intensive tasks, or to manage
  other hardware accelerators, for achieving various system level goals.

  The processor cores in the sub-system are usually behind an IOMMU, and may
  contain additional sub-modules like Internal RAM and/or ROMs, L1 and/or L2
  caches, an Interrupt Controller, a Cache Controller etc.

  The OMAP SoCs usually have a DSP processor sub-system and/or an IPU processor
  sub-system. The DSP processor sub-system can contain any of the TI's C64x,
  C66x or C67x family of DSP cores as the main execution unit. The IPU processor
  sub-system usually contains either a Dual-Core Cortex-M3 or Dual-Core
  Cortex-M4 processors.

  Each remote processor sub-system is represented as a single DT node. Each node
  has a number of required or optional properties that enable the OS running on
  the host processor (MPU) to perform the device management of the remote
  processor and to communicate with the remote processor. The various properties
  can be classified as constant or variable. The constant properties are
  dictated by the SoC and does not change from one board to another having the
  same SoC. Examples of constant properties include 'iommus', 'reg'. The
  variable properties are dictated by the system integration aspects such as
  memory on the board, or configuration used within the corresponding firmware
  image. Examples of variable properties include 'mboxes', 'memory-region',
  'timers', 'watchdog-timers' etc.

properties:
  compatible:
    enum:
      - ti,omap4-dsp
      - ti,omap5-dsp
      - ti,dra7-dsp
      - ti,omap4-ipu
      - ti,omap5-ipu
      - ti,dra7-ipu

  iommus:
    minItems: 1
    maxItems: 2
    description: |
      phandles to OMAP IOMMU nodes, that need to be programmed
      for this remote processor to access any external RAM memory or
      other peripheral device address spaces. This property usually
      has only a single phandle. Multiple phandles are used only in
      cases where the sub-system has different ports for different
      sub-modules within the processor sub-system (eg: DRA7 DSPs),
      and need the same programming in both the MMUs.

  mboxes:
    minItems: 1
    maxItems: 2
    description: |
      OMAP Mailbox specifier denoting the sub-mailbox, to be used for
      communication with the remote processor. The specifier format is
      as per the bindings,
      Documentation/devicetree/bindings/mailbox/ti,omap-mailbox.yaml
      This property should match with the sub-mailbox node used in
      the firmware image.

  clocks:
    maxItems: 1
    description: |
      Main functional clock for the remote processor

  resets:
    minItems: 1
    maxItems: 2
    description: |
      Reset handles for the remote processor

  firmware-name:
    description: |
      Default name of the firmware to load to the remote processor.

# Optional properties:
# --------------------
# Some of these properties are mandatory on some SoCs, and some are optional
# depending on the configuration of the firmware image to be executed on the
# remote processor. The conditions are mentioned for each property.
#
# The following are the optional properties:

  memory-region:
    maxItems: 1
    description: |
      phandle to the reserved memory node to be associated
      with the remoteproc device. The reserved memory node
      can be a CMA memory node, and should be defined as
      per the bindings,
      Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt

  reg:
    description: |
      Address space for any remoteproc memories present on
      the SoC. Should contain an entry for each value in
      'reg-names'. These are mandatory for all DSP and IPU
      processors that have them (OMAP4/OMAP5 DSPs do not have
      any RAMs)

  reg-names:
    description: |
      Required names for each of the address spaces defined in
      the 'reg' property. Expects the names from the following
      list, in the specified order, each representing the corresponding
      internal RAM memory region.
    minItems: 1
    maxItems: 3
    items:
      - const: l2ram
      - const: l1pram
      - const: l1dram

  ti,bootreg:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    description: |
      Should be a triple of the phandle to the System Control
      Configuration region that contains the boot address
      register, the register offset of the boot address
      register within the System Control module, and the bit
      shift within the register. This property is required for
      all the DSP instances on OMAP4, OMAP5 and DRA7xx SoCs.

  ti,autosuspend-delay-ms:
    description: |
      Custom autosuspend delay for the remoteproc in milliseconds.
      Recommended values is preferable to be in the order of couple
      of seconds. A negative value can also be used to disable the
      autosuspend behavior.

  ti,timers:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    description: |
      One or more phandles to OMAP DMTimer nodes, that serve
      as System/Tick timers for the OS running on the remote
      processors. This will usually be a single timer if the
      processor sub-system is running in SMP mode, or one per
      core in the processor sub-system. This can also be used
      to reserve specific timers to be dedicated to the
      remote processors.

      This property is mandatory on remote processors requiring
      external tick wakeup, and to support Power Management
      features. The timers to be used should match with the
      timers used in the firmware image.

  ti,watchdog-timers:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    description: |
      One or more phandles to OMAP DMTimer nodes, used to
      serve as Watchdog timers for the processor cores. This
      will usually be one per executing processor core, even
      if the processor sub-system is running a SMP OS.

      The timers to be used should match with the watchdog
      timers used in the firmware image.

if:
  properties:
    compatible:
      enum:
        - ti,dra7-dsp
then:
  properties:
    reg:
      minItems: 3
      maxItems: 3
  required:
    - reg
    - reg-names
    - ti,bootreg

else:
  if:
    properties:
      compatible:
        enum:
          - ti,omap4-ipu
          - ti,omap5-ipu
          - ti,dra7-ipu
  then:
    properties:
      reg:
        minItems: 1
        maxItems: 1
      ti,bootreg: false
    required:
      - reg
      - reg-names

  else:
    properties:
      reg: false
    required:
      - ti,bootreg

required:
  - compatible
  - iommus
  - mboxes
  - clocks
  - resets
  - firmware-name

additionalProperties: false

examples:
  - |

    //Example 1: OMAP4 DSP

    /* DSP Reserved Memory node */
    #include <dt-bindings/clock/omap4.h>
    reserved-memory {
        #address-cells = <1>;
        #size-cells = <1>;

        dsp_memory_region: dsp-memory@98000000 {
            compatible = "shared-dma-pool";
            reg = <0x98000000 0x800000>;
            reusable;
        };
    };

    /* DSP node */
    ocp {
        dsp: dsp {
            compatible = "ti,omap4-dsp";
            ti,bootreg = <&scm_conf 0x304 0>;
            iommus = <&mmu_dsp>;
            mboxes = <&mailbox &mbox_dsp>;
            memory-region = <&dsp_memory_region>;
            ti,timers = <&timer5>;
            ti,watchdog-timers = <&timer6>;
            clocks = <&tesla_clkctrl OMAP4_DSP_CLKCTRL 0>;
            resets = <&prm_tesla 0>, <&prm_tesla 1>;
            firmware-name = "omap4-dsp-fw.xe64T";
        };
    };

  - |+

    //Example 2: OMAP5 IPU

    /* IPU Reserved Memory node */
    #include <dt-bindings/clock/omap5.h>
    reserved-memory {
        #address-cells = <2>;
        #size-cells = <2>;

        ipu_memory_region: ipu-memory@95800000 {
            compatible = "shared-dma-pool";
            reg = <0 0x95800000 0 0x3800000>;
            reusable;
        };
    };

    /* IPU node */
    ocp {
        #address-cells = <1>;
        #size-cells = <1>;

        ipu: ipu@55020000 {
            compatible = "ti,omap5-ipu";
            reg = <0x55020000 0x10000>;
            reg-names = "l2ram";
            iommus = <&mmu_ipu>;
            mboxes = <&mailbox &mbox_ipu>;
            memory-region = <&ipu_memory_region>;
            ti,timers = <&timer3>, <&timer4>;
            ti,watchdog-timers = <&timer9>, <&timer11>;
            clocks = <&ipu_clkctrl OMAP5_MMU_IPU_CLKCTRL 0>;
            resets = <&prm_core 2>;
            firmware-name = "omap5-ipu-fw.xem4";
        };
    };

  - |+

    //Example 3: DRA7xx/AM57xx DSP

    /* DSP1 Reserved Memory node */
    #include <dt-bindings/clock/dra7.h>
    reserved-memory {
        #address-cells = <2>;
        #size-cells = <2>;

        dsp1_memory_region: dsp1-memory@99000000 {
            compatible = "shared-dma-pool";
            reg = <0x0 0x99000000 0x0 0x4000000>;
            reusable;
        };
    };

    /* DSP1 node */
    ocp {
        #address-cells = <1>;
        #size-cells = <1>;

        dsp1: dsp@40800000 {
            compatible = "ti,dra7-dsp";
            reg = <0x40800000 0x48000>,
                  <0x40e00000 0x8000>,
                  <0x40f00000 0x8000>;
            reg-names = "l2ram", "l1pram", "l1dram";
            ti,bootreg = <&scm_conf 0x55c 0>;
            iommus = <&mmu0_dsp1>, <&mmu1_dsp1>;
            mboxes = <&mailbox5 &mbox_dsp1_ipc3x>;
            memory-region = <&dsp1_memory_region>;
            ti,timers = <&timer5>;
            ti,watchdog-timers = <&timer10>;
            resets = <&prm_dsp1 0>;
            clocks = <&dsp1_clkctrl DRA7_DSP1_MMU0_DSP1_CLKCTRL 0>;
            firmware-name = "dra7-dsp1-fw.xe66";
        };
    };