1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/dsp/fsl,dsp.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: NXP i.MX8 DSP core
8
9maintainers:
10  - Daniel Baluta <daniel.baluta@nxp.com>
11  - Shengjiu Wang <shengjiu.wang@nxp.com>
12
13description: |
14  Some boards from i.MX8 family contain a DSP core used for
15  advanced pre- and post- audio processing.
16
17properties:
18  compatible:
19    enum:
20      - fsl,imx8qxp-dsp
21      - fsl,imx8qm-dsp
22      - fsl,imx8mp-dsp
23      - fsl,imx8ulp-dsp
24      - fsl,imx8qxp-hifi4
25      - fsl,imx8qm-hifi4
26      - fsl,imx8mp-hifi4
27      - fsl,imx8ulp-hifi4
28
29  reg:
30    maxItems: 1
31
32  clocks:
33    items:
34      - description: ipg clock
35      - description: ocram clock
36      - description: core clock
37      - description: debug interface clock
38      - description: message unit clock
39    minItems: 3
40
41  clock-names:
42    items:
43      - const: ipg
44      - const: ocram
45      - const: core
46      - const: debug
47      - const: mu
48    minItems: 3
49
50  power-domains:
51    description:
52      List of phandle and PM domain specifier as documented in
53      Documentation/devicetree/bindings/power/power_domain.txt
54    minItems: 1
55    maxItems: 4
56
57  mboxes:
58    description:
59      List of <&phandle type channel> - 2 channels for TXDB, 2 channels for RXDB
60      or - 1 channel for TX, 1 channel for RX, 1 channel for RXDB
61      (see mailbox/fsl,mu.txt)
62    minItems: 3
63    maxItems: 4
64
65  mbox-names:
66    minItems: 3
67    maxItems: 4
68
69  memory-region:
70    description:
71      phandle to a node describing reserved memory (System RAM memory)
72      used by DSP (see bindings/reserved-memory/reserved-memory.txt)
73    minItems: 1
74    maxItems: 4
75
76  firmware-name:
77    description: |
78      Default name of the firmware to load to the remote processor.
79
80  fsl,dsp-ctrl:
81    $ref: /schemas/types.yaml#/definitions/phandle
82    description:
83      Phandle to syscon block which provide access for processor enablement
84
85required:
86  - compatible
87  - reg
88  - clocks
89  - clock-names
90  - power-domains
91  - mboxes
92  - mbox-names
93  - memory-region
94
95allOf:
96  - if:
97      properties:
98        compatible:
99          contains:
100            enum:
101              - fsl,imx8qxp-dsp
102              - fsl,imx8qm-dsp
103              - fsl,imx8qxp-hifi4
104              - fsl,imx8qm-hifi4
105    then:
106      properties:
107        power-domains:
108          minItems: 4
109    else:
110      properties:
111        power-domains:
112          maxItems: 1
113
114  - if:
115      properties:
116        compatible:
117          contains:
118            enum:
119              - fsl,imx8qxp-hifi4
120              - fsl,imx8qm-hifi4
121              - fsl,imx8mp-hifi4
122              - fsl,imx8ulp-hifi4
123    then:
124      properties:
125        memory-region:
126          minItems: 4
127        mboxes:
128          maxItems: 3
129        mbox-names:
130          items:
131            - const: tx
132            - const: rx
133            - const: rxdb
134    else:
135      properties:
136        memory-region:
137          maxItems: 1
138        mboxes:
139          minItems: 4
140        mbox-names:
141          items:
142            - const: txdb0
143            - const: txdb1
144            - const: rxdb0
145            - const: rxdb1
146
147additionalProperties: false
148
149examples:
150  - |
151    #include <dt-bindings/firmware/imx/rsrc.h>
152    #include <dt-bindings/clock/imx8-clock.h>
153    dsp@596e8000 {
154        compatible = "fsl,imx8qxp-dsp";
155        reg = <0x596e8000 0x88000>;
156        clocks = <&adma_lpcg IMX_ADMA_LPCG_DSP_IPG_CLK>,
157                 <&adma_lpcg IMX_ADMA_LPCG_OCRAM_IPG_CLK>,
158                 <&adma_lpcg IMX_ADMA_LPCG_DSP_CORE_CLK>;
159        clock-names = "ipg", "ocram", "core";
160        power-domains = <&pd IMX_SC_R_MU_13A>,
161                        <&pd IMX_SC_R_MU_13B>,
162                        <&pd IMX_SC_R_DSP>,
163                        <&pd IMX_SC_R_DSP_RAM>;
164        mbox-names = "txdb0", "txdb1", "rxdb0", "rxdb1";
165        mboxes = <&lsio_mu13 2 0>, <&lsio_mu13 2 1>, <&lsio_mu13 3 0>, <&lsio_mu13 3 1>;
166        memory-region = <&dsp_reserved>;
167    };
168  - |
169    #include <dt-bindings/clock/imx8mp-clock.h>
170    dsp_reserved: dsp@92400000 {
171      reg = <0x92400000 0x1000000>;
172      no-map;
173    };
174    dsp_vdev0vring0: vdev0vring0@942f0000 {
175      reg = <0x942f0000 0x8000>;
176      no-map;
177    };
178    dsp_vdev0vring1: vdev0vring1@942f8000 {
179      reg = <0x942f8000 0x8000>;
180      no-map;
181    };
182    dsp_vdev0buffer: vdev0buffer@94300000 {
183      compatible = "shared-dma-pool";
184      reg = <0x94300000 0x100000>;
185      no-map;
186    };
187
188    dsp: dsp@3b6e8000 {
189      compatible = "fsl,imx8mp-hifi4";
190      reg = <0x3b6e8000 0x88000>;
191      clocks = <&audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_DSP_ROOT>,
192               <&audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_OCRAMA_IPG>,
193               <&audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_DSP_ROOT>,
194               <&audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_DSPDBG_ROOT>;
195      clock-names = "ipg", "ocram", "core", "debug";
196      firmware-name = "imx/dsp/hifi4.bin";
197      power-domains = <&audiomix_pd>;
198      mbox-names = "tx", "rx", "rxdb";
199      mboxes = <&mu2 0 0>,
200               <&mu2 1 0>,
201               <&mu2 3 0>;
202      memory-region = <&dsp_vdev0buffer>, <&dsp_vdev0vring0>,
203                      <&dsp_vdev0vring1>, <&dsp_reserved>;
204      fsl,dsp-ctrl = <&audio_blk_ctrl>;
205    };
206