1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/firmware/qcom,scm.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: QCOM Secure Channel Manager (SCM)
8
9description: |
10  Qualcomm processors include an interface to communicate to the secure firmware.
11  This interface allows for clients to request different types of actions.
12  These can include CPU power up/down, HDCP requests, loading of firmware,
13  and other assorted actions.
14
15maintainers:
16  - Bjorn Andersson <[email protected]>
17  - Robert Marko <[email protected]>
18  - Guru Das Srinagesh <[email protected]>
19
20properties:
21  compatible:
22    items:
23      - enum:
24          - qcom,scm-apq8064
25          - qcom,scm-apq8084
26          - qcom,scm-ipq4019
27          - qcom,scm-ipq5018
28          - qcom,scm-ipq5332
29          - qcom,scm-ipq5424
30          - qcom,scm-ipq6018
31          - qcom,scm-ipq806x
32          - qcom,scm-ipq8074
33          - qcom,scm-ipq9574
34          - qcom,scm-mdm9607
35          - qcom,scm-msm8226
36          - qcom,scm-msm8660
37          - qcom,scm-msm8916
38          - qcom,scm-msm8953
39          - qcom,scm-msm8960
40          - qcom,scm-msm8974
41          - qcom,scm-msm8976
42          - qcom,scm-msm8994
43          - qcom,scm-msm8996
44          - qcom,scm-msm8998
45          - qcom,scm-qcm2290
46          - qcom,scm-qcs615
47          - qcom,scm-qcs8300
48          - qcom,scm-qdu1000
49          - qcom,scm-sa8255p
50          - qcom,scm-sa8775p
51          - qcom,scm-sar2130p
52          - qcom,scm-sc7180
53          - qcom,scm-sc7280
54          - qcom,scm-sc8180x
55          - qcom,scm-sc8280xp
56          - qcom,scm-sdm670
57          - qcom,scm-sdm845
58          - qcom,scm-sdx55
59          - qcom,scm-sdx65
60          - qcom,scm-sdx75
61          - qcom,scm-sm6115
62          - qcom,scm-sm6125
63          - qcom,scm-sm6350
64          - qcom,scm-sm6375
65          - qcom,scm-sm7150
66          - qcom,scm-sm8150
67          - qcom,scm-sm8250
68          - qcom,scm-sm8350
69          - qcom,scm-sm8450
70          - qcom,scm-sm8550
71          - qcom,scm-sm8650
72          - qcom,scm-sm8750
73          - qcom,scm-qcs404
74          - qcom,scm-x1e80100
75      - const: qcom,scm
76
77  clocks:
78    minItems: 1
79    maxItems: 3
80
81  clock-names:
82    minItems: 1
83    maxItems: 3
84
85  dma-coherent: true
86
87  interconnects:
88    maxItems: 1
89
90  interconnect-names:
91    maxItems: 1
92
93  '#reset-cells':
94    const: 1
95
96  interrupts:
97    description:
98      The wait-queue interrupt that firmware raises as part of handshake
99      protocol to handle sleeping SCM calls.
100    maxItems: 1
101
102  memory-region:
103    description:
104      Phandle to the memory region reserved for the shared memory bridge to TZ.
105    maxItems: 1
106
107  qcom,sdi-enabled:
108    description:
109      Indicates that the SDI (Secure Debug Image) has been enabled by TZ
110      by default and it needs to be disabled.
111      If not disabled WDT assertion or reboot will cause the board to hang
112      in the debug mode.
113    type: boolean
114
115  qcom,dload-mode:
116    $ref: /schemas/types.yaml#/definitions/phandle-array
117    items:
118      - items:
119          - description: phandle to TCSR hardware block
120          - description: offset of the download mode control register
121    description: TCSR hardware block
122
123allOf:
124  # Clocks
125  - if:
126      properties:
127        compatible:
128          contains:
129            enum:
130              - qcom,scm-apq8064
131              - qcom,scm-apq8084
132              - qcom,scm-mdm9607
133              - qcom,scm-msm8226
134              - qcom,scm-msm8660
135              - qcom,scm-msm8916
136              - qcom,scm-msm8953
137              - qcom,scm-msm8960
138              - qcom,scm-msm8974
139              - qcom,scm-msm8976
140              - qcom,scm-qcm2290
141              - qcom,scm-sm6375
142    then:
143      required:
144        - clocks
145        - clock-names
146    else:
147      properties:
148        clock-names: false
149        clocks: false
150
151  - if:
152      properties:
153        compatible:
154          contains:
155            enum:
156              - qcom,scm-apq8064
157              - qcom,scm-msm8660
158              - qcom,scm-msm8960
159              - qcom,scm-qcm2290
160              - qcom,scm-sm6375
161    then:
162      properties:
163        clock-names:
164          items:
165            - const: core
166
167        clocks:
168          maxItems: 1
169
170  - if:
171      properties:
172        compatible:
173          contains:
174            enum:
175              - qcom,scm-apq8084
176              - qcom,scm-mdm9607
177              - qcom,scm-msm8226
178              - qcom,scm-msm8916
179              - qcom,scm-msm8953
180              - qcom,scm-msm8974
181              - qcom,scm-msm8976
182    then:
183      properties:
184        clock-names:
185          items:
186            - const: core
187            - const: bus
188            - const: iface
189
190        clocks:
191          minItems: 3
192          maxItems: 3
193
194  # Interrupts
195  - if:
196      not:
197        properties:
198          compatible:
199            contains:
200              enum:
201                - qcom,scm-sm8450
202                - qcom,scm-sm8550
203                - qcom,scm-sm8650
204                - qcom,scm-sm8750
205    then:
206      properties:
207        interrupts: false
208  - if:
209      not:
210        properties:
211          compatible:
212            contains:
213              enum:
214                - qcom,scm-sa8255p
215                - qcom,scm-sa8775p
216    then:
217      properties:
218        memory-region: false
219
220required:
221  - compatible
222
223additionalProperties: false
224
225examples:
226  - |
227    #include <dt-bindings/clock/qcom,gcc-msm8916.h>
228
229    firmware {
230        scm {
231            compatible = "qcom,scm-msm8916", "qcom,scm";
232            clocks = <&gcc GCC_CRYPTO_CLK>,
233                     <&gcc GCC_CRYPTO_AXI_CLK>,
234                     <&gcc GCC_CRYPTO_AHB_CLK>;
235            clock-names = "core", "bus", "iface";
236        };
237    };
238