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 <bjorn.andersson@linaro.org>
17  - Robert Marko <robimarko@gmail.com>
18  - Guru Das Srinagesh <quic_gurus@quicinc.com>
19
20properties:
21  compatible:
22    items:
23      - enum:
24          - qcom,scm-apq8064
25          - qcom,scm-apq8084
26          - qcom,scm-ipq4019
27          - qcom,scm-ipq6018
28          - qcom,scm-ipq806x
29          - qcom,scm-ipq8074
30          - qcom,scm-mdm9607
31          - qcom,scm-msm8226
32          - qcom,scm-msm8660
33          - qcom,scm-msm8916
34          - qcom,scm-msm8953
35          - qcom,scm-msm8960
36          - qcom,scm-msm8974
37          - qcom,scm-msm8976
38          - qcom,scm-msm8994
39          - qcom,scm-msm8996
40          - qcom,scm-msm8998
41          - qcom,scm-qdu1000
42          - qcom,scm-sa8775p
43          - qcom,scm-sc7180
44          - qcom,scm-sc7280
45          - qcom,scm-sc8280xp
46          - qcom,scm-sdm670
47          - qcom,scm-sdm845
48          - qcom,scm-sdx55
49          - qcom,scm-sdx65
50          - qcom,scm-sm6115
51          - qcom,scm-sm6125
52          - qcom,scm-sm6350
53          - qcom,scm-sm6375
54          - qcom,scm-sm8150
55          - qcom,scm-sm8250
56          - qcom,scm-sm8350
57          - qcom,scm-sm8450
58          - qcom,scm-sm8550
59          - qcom,scm-qcs404
60      - const: qcom,scm
61
62  clocks:
63    minItems: 1
64    maxItems: 3
65
66  clock-names:
67    minItems: 1
68    maxItems: 3
69
70  interconnects:
71    maxItems: 1
72
73  interconnect-names:
74    maxItems: 1
75
76  '#reset-cells':
77    const: 1
78
79  interrupts:
80    description:
81      The wait-queue interrupt that firmware raises as part of handshake
82      protocol to handle sleeping SCM calls.
83    maxItems: 1
84
85  qcom,dload-mode:
86    $ref: /schemas/types.yaml#/definitions/phandle-array
87    items:
88      - items:
89          - description: phandle to TCSR hardware block
90          - description: offset of the download mode control register
91    description: TCSR hardware block
92
93allOf:
94  # Clocks
95  - if:
96      properties:
97        compatible:
98          contains:
99            enum:
100              - qcom,scm-apq8064
101              - qcom,scm-apq8084
102              - qcom,scm-mdm9607
103              - qcom,scm-msm8226
104              - qcom,scm-msm8660
105              - qcom,scm-msm8916
106              - qcom,scm-msm8953
107              - qcom,scm-msm8960
108              - qcom,scm-msm8974
109              - qcom,scm-msm8976
110              - qcom,scm-sm6375
111    then:
112      required:
113        - clocks
114        - clock-names
115    else:
116      properties:
117        clock-names: false
118        clocks: false
119
120  - if:
121      properties:
122        compatible:
123          contains:
124            enum:
125              - qcom,scm-apq8064
126              - qcom,scm-msm8660
127              - qcom,scm-msm8960
128              - qcom,scm-sm6375
129    then:
130      properties:
131        clock-names:
132          items:
133            - const: core
134
135        clocks:
136          maxItems: 1
137
138  - if:
139      properties:
140        compatible:
141          contains:
142            enum:
143              - qcom,scm-apq8084
144              - qcom,scm-mdm9607
145              - qcom,scm-msm8226
146              - qcom,scm-msm8916
147              - qcom,scm-msm8953
148              - qcom,scm-msm8974
149              - qcom,scm-msm8976
150    then:
151      properties:
152        clock-names:
153          items:
154            - const: core
155            - const: bus
156            - const: iface
157
158        clocks:
159          minItems: 3
160          maxItems: 3
161
162  # Interconnects
163  - if:
164      not:
165        properties:
166          compatible:
167            contains:
168              enum:
169                - qcom,scm-sm8450
170                - qcom,scm-sm8550
171    then:
172      properties:
173        interconnects: false
174
175  # Interrupts
176  - if:
177      not:
178        properties:
179          compatible:
180            contains:
181              enum:
182                - qcom,scm-sm8450
183                - qcom,scm-sm8550
184    then:
185      properties:
186        interrupts: false
187
188required:
189  - compatible
190
191additionalProperties: false
192
193examples:
194  - |
195    #include <dt-bindings/clock/qcom,gcc-msm8916.h>
196
197    firmware {
198        scm {
199            compatible = "qcom,scm-msm8916", "qcom,scm";
200            clocks = <&gcc GCC_CRYPTO_CLK>,
201                     <&gcc GCC_CRYPTO_AXI_CLK>,
202                     <&gcc GCC_CRYPTO_AHB_CLK>;
203            clock-names = "core", "bus", "iface";
204        };
205    };
206