1c9ccf3a3SEmmanuel Vadot# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2c9ccf3a3SEmmanuel Vadot%YAML 1.2
3c9ccf3a3SEmmanuel Vadot---
4c9ccf3a3SEmmanuel Vadot$id: http://devicetree.org/schemas/ufs/qcom,ufs.yaml#
5c9ccf3a3SEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
6c9ccf3a3SEmmanuel Vadot
7c9ccf3a3SEmmanuel Vadottitle: Qualcomm Universal Flash Storage (UFS) Controller
8c9ccf3a3SEmmanuel Vadot
9c9ccf3a3SEmmanuel Vadotmaintainers:
10c9ccf3a3SEmmanuel Vadot  - Bjorn Andersson <bjorn.andersson@linaro.org>
11c9ccf3a3SEmmanuel Vadot  - Andy Gross <agross@kernel.org>
12c9ccf3a3SEmmanuel Vadot
13c9ccf3a3SEmmanuel Vadot# Select only our matches, not all jedec,ufs-2.0
14c9ccf3a3SEmmanuel Vadotselect:
15c9ccf3a3SEmmanuel Vadot  properties:
16c9ccf3a3SEmmanuel Vadot    compatible:
17c9ccf3a3SEmmanuel Vadot      contains:
18c9ccf3a3SEmmanuel Vadot        const: qcom,ufshc
19c9ccf3a3SEmmanuel Vadot  required:
20c9ccf3a3SEmmanuel Vadot    - compatible
21c9ccf3a3SEmmanuel Vadot
22c9ccf3a3SEmmanuel Vadotproperties:
23c9ccf3a3SEmmanuel Vadot  compatible:
24c9ccf3a3SEmmanuel Vadot    items:
25c9ccf3a3SEmmanuel Vadot      - enum:
26c9ccf3a3SEmmanuel Vadot          - qcom,msm8994-ufshc
27c9ccf3a3SEmmanuel Vadot          - qcom,msm8996-ufshc
28c9ccf3a3SEmmanuel Vadot          - qcom,msm8998-ufshc
29f126890aSEmmanuel Vadot          - qcom,sa8775p-ufshc
30*8d13bc63SEmmanuel Vadot          - qcom,sc7280-ufshc
31b97ee269SEmmanuel Vadot          - qcom,sc8280xp-ufshc
32c9ccf3a3SEmmanuel Vadot          - qcom,sdm845-ufshc
33aa1a8ff2SEmmanuel Vadot          - qcom,sm6115-ufshc
34c9ccf3a3SEmmanuel Vadot          - qcom,sm6350-ufshc
35c9ccf3a3SEmmanuel Vadot          - qcom,sm8150-ufshc
36c9ccf3a3SEmmanuel Vadot          - qcom,sm8250-ufshc
37c9ccf3a3SEmmanuel Vadot          - qcom,sm8350-ufshc
38c9ccf3a3SEmmanuel Vadot          - qcom,sm8450-ufshc
39cb7aa33aSEmmanuel Vadot          - qcom,sm8550-ufshc
4084943d6fSEmmanuel Vadot          - qcom,sm8650-ufshc
41c9ccf3a3SEmmanuel Vadot      - const: qcom,ufshc
42c9ccf3a3SEmmanuel Vadot      - const: jedec,ufs-2.0
43c9ccf3a3SEmmanuel Vadot
44c9ccf3a3SEmmanuel Vadot  clocks:
45c9ccf3a3SEmmanuel Vadot    minItems: 8
46c9ccf3a3SEmmanuel Vadot    maxItems: 11
47c9ccf3a3SEmmanuel Vadot
48c9ccf3a3SEmmanuel Vadot  clock-names:
49c9ccf3a3SEmmanuel Vadot    minItems: 8
50c9ccf3a3SEmmanuel Vadot    maxItems: 11
51c9ccf3a3SEmmanuel Vadot
52cb7aa33aSEmmanuel Vadot  dma-coherent: true
53cb7aa33aSEmmanuel Vadot
54c9ccf3a3SEmmanuel Vadot  interconnects:
55c9ccf3a3SEmmanuel Vadot    minItems: 2
56c9ccf3a3SEmmanuel Vadot    maxItems: 2
57c9ccf3a3SEmmanuel Vadot
58c9ccf3a3SEmmanuel Vadot  interconnect-names:
59c9ccf3a3SEmmanuel Vadot    items:
60c9ccf3a3SEmmanuel Vadot      - const: ufs-ddr
61c9ccf3a3SEmmanuel Vadot      - const: cpu-ufs
62c9ccf3a3SEmmanuel Vadot
63c9ccf3a3SEmmanuel Vadot  iommus:
64c9ccf3a3SEmmanuel Vadot    minItems: 1
65c9ccf3a3SEmmanuel Vadot    maxItems: 2
66c9ccf3a3SEmmanuel Vadot
67c9ccf3a3SEmmanuel Vadot  phys:
68c9ccf3a3SEmmanuel Vadot    maxItems: 1
69c9ccf3a3SEmmanuel Vadot
70c9ccf3a3SEmmanuel Vadot  phy-names:
71c9ccf3a3SEmmanuel Vadot    items:
72c9ccf3a3SEmmanuel Vadot      - const: ufsphy
73c9ccf3a3SEmmanuel Vadot
74c9ccf3a3SEmmanuel Vadot  power-domains:
75c9ccf3a3SEmmanuel Vadot    maxItems: 1
76c9ccf3a3SEmmanuel Vadot
77f126890aSEmmanuel Vadot  qcom,ice:
78f126890aSEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/phandle
79f126890aSEmmanuel Vadot    description: phandle to the Inline Crypto Engine node
80f126890aSEmmanuel Vadot
81c9ccf3a3SEmmanuel Vadot  reg:
82c9ccf3a3SEmmanuel Vadot    minItems: 1
83c9ccf3a3SEmmanuel Vadot    maxItems: 2
84c9ccf3a3SEmmanuel Vadot
85aa1a8ff2SEmmanuel Vadot  reg-names:
86aa1a8ff2SEmmanuel Vadot    items:
87aa1a8ff2SEmmanuel Vadot      - const: std
88aa1a8ff2SEmmanuel Vadot      - const: ice
89aa1a8ff2SEmmanuel Vadot
90cb7aa33aSEmmanuel Vadot  required-opps:
91cb7aa33aSEmmanuel Vadot    maxItems: 1
92cb7aa33aSEmmanuel Vadot
93c9ccf3a3SEmmanuel Vadot  resets:
94c9ccf3a3SEmmanuel Vadot    maxItems: 1
95c9ccf3a3SEmmanuel Vadot
96c9ccf3a3SEmmanuel Vadot  '#reset-cells':
97c9ccf3a3SEmmanuel Vadot    const: 1
98c9ccf3a3SEmmanuel Vadot
99c9ccf3a3SEmmanuel Vadot  reset-names:
100c9ccf3a3SEmmanuel Vadot    items:
101c9ccf3a3SEmmanuel Vadot      - const: rst
102c9ccf3a3SEmmanuel Vadot
103c9ccf3a3SEmmanuel Vadot  reset-gpios:
104c9ccf3a3SEmmanuel Vadot    maxItems: 1
105c9ccf3a3SEmmanuel Vadot    description:
106c9ccf3a3SEmmanuel Vadot      GPIO connected to the RESET pin of the UFS memory device.
107c9ccf3a3SEmmanuel Vadot
108c9ccf3a3SEmmanuel Vadotrequired:
109c9ccf3a3SEmmanuel Vadot  - compatible
110c9ccf3a3SEmmanuel Vadot  - reg
111c9ccf3a3SEmmanuel Vadot
112c9ccf3a3SEmmanuel VadotallOf:
113c9ccf3a3SEmmanuel Vadot  - $ref: ufs-common.yaml
114c9ccf3a3SEmmanuel Vadot
115c9ccf3a3SEmmanuel Vadot  - if:
116c9ccf3a3SEmmanuel Vadot      properties:
117c9ccf3a3SEmmanuel Vadot        compatible:
118c9ccf3a3SEmmanuel Vadot          contains:
119c9ccf3a3SEmmanuel Vadot            enum:
120c9ccf3a3SEmmanuel Vadot              - qcom,msm8998-ufshc
121f126890aSEmmanuel Vadot              - qcom,sa8775p-ufshc
122*8d13bc63SEmmanuel Vadot              - qcom,sc7280-ufshc
123b97ee269SEmmanuel Vadot              - qcom,sc8280xp-ufshc
124c9ccf3a3SEmmanuel Vadot              - qcom,sm8250-ufshc
125c9ccf3a3SEmmanuel Vadot              - qcom,sm8350-ufshc
126c9ccf3a3SEmmanuel Vadot              - qcom,sm8450-ufshc
127cb7aa33aSEmmanuel Vadot              - qcom,sm8550-ufshc
12884943d6fSEmmanuel Vadot              - qcom,sm8650-ufshc
129c9ccf3a3SEmmanuel Vadot    then:
130c9ccf3a3SEmmanuel Vadot      properties:
131c9ccf3a3SEmmanuel Vadot        clocks:
132c9ccf3a3SEmmanuel Vadot          minItems: 8
133c9ccf3a3SEmmanuel Vadot          maxItems: 8
134c9ccf3a3SEmmanuel Vadot        clock-names:
135c9ccf3a3SEmmanuel Vadot          items:
136c9ccf3a3SEmmanuel Vadot            - const: core_clk
137c9ccf3a3SEmmanuel Vadot            - const: bus_aggr_clk
138c9ccf3a3SEmmanuel Vadot            - const: iface_clk
139c9ccf3a3SEmmanuel Vadot            - const: core_clk_unipro
140c9ccf3a3SEmmanuel Vadot            - const: ref_clk
141c9ccf3a3SEmmanuel Vadot            - const: tx_lane0_sync_clk
142c9ccf3a3SEmmanuel Vadot            - const: rx_lane0_sync_clk
143c9ccf3a3SEmmanuel Vadot            - const: rx_lane1_sync_clk
144c9ccf3a3SEmmanuel Vadot        reg:
145c9ccf3a3SEmmanuel Vadot          minItems: 1
146c9ccf3a3SEmmanuel Vadot          maxItems: 1
147aa1a8ff2SEmmanuel Vadot        reg-names:
148aa1a8ff2SEmmanuel Vadot          maxItems: 1
149c9ccf3a3SEmmanuel Vadot
150c9ccf3a3SEmmanuel Vadot  - if:
151c9ccf3a3SEmmanuel Vadot      properties:
152c9ccf3a3SEmmanuel Vadot        compatible:
153c9ccf3a3SEmmanuel Vadot          contains:
154c9ccf3a3SEmmanuel Vadot            enum:
155c9ccf3a3SEmmanuel Vadot              - qcom,sdm845-ufshc
156c9ccf3a3SEmmanuel Vadot              - qcom,sm6350-ufshc
157c9ccf3a3SEmmanuel Vadot              - qcom,sm8150-ufshc
158c9ccf3a3SEmmanuel Vadot    then:
159c9ccf3a3SEmmanuel Vadot      properties:
160c9ccf3a3SEmmanuel Vadot        clocks:
161c9ccf3a3SEmmanuel Vadot          minItems: 9
162c9ccf3a3SEmmanuel Vadot          maxItems: 9
163c9ccf3a3SEmmanuel Vadot        clock-names:
164c9ccf3a3SEmmanuel Vadot          items:
165c9ccf3a3SEmmanuel Vadot            - const: core_clk
166c9ccf3a3SEmmanuel Vadot            - const: bus_aggr_clk
167c9ccf3a3SEmmanuel Vadot            - const: iface_clk
168c9ccf3a3SEmmanuel Vadot            - const: core_clk_unipro
169c9ccf3a3SEmmanuel Vadot            - const: ref_clk
170c9ccf3a3SEmmanuel Vadot            - const: tx_lane0_sync_clk
171c9ccf3a3SEmmanuel Vadot            - const: rx_lane0_sync_clk
172c9ccf3a3SEmmanuel Vadot            - const: rx_lane1_sync_clk
173c9ccf3a3SEmmanuel Vadot            - const: ice_core_clk
174c9ccf3a3SEmmanuel Vadot        reg:
175c9ccf3a3SEmmanuel Vadot          minItems: 2
176c9ccf3a3SEmmanuel Vadot          maxItems: 2
177aa1a8ff2SEmmanuel Vadot        reg-names:
178aa1a8ff2SEmmanuel Vadot          minItems: 2
179aa1a8ff2SEmmanuel Vadot      required:
180aa1a8ff2SEmmanuel Vadot        - reg-names
181c9ccf3a3SEmmanuel Vadot
182c9ccf3a3SEmmanuel Vadot  - if:
183c9ccf3a3SEmmanuel Vadot      properties:
184c9ccf3a3SEmmanuel Vadot        compatible:
185c9ccf3a3SEmmanuel Vadot          contains:
186c9ccf3a3SEmmanuel Vadot            enum:
187c9ccf3a3SEmmanuel Vadot              - qcom,msm8996-ufshc
188c9ccf3a3SEmmanuel Vadot    then:
189c9ccf3a3SEmmanuel Vadot      properties:
190c9ccf3a3SEmmanuel Vadot        clocks:
191c9ccf3a3SEmmanuel Vadot          minItems: 11
192c9ccf3a3SEmmanuel Vadot          maxItems: 11
193c9ccf3a3SEmmanuel Vadot        clock-names:
194c9ccf3a3SEmmanuel Vadot          items:
195c9ccf3a3SEmmanuel Vadot            - const: core_clk_src
196c9ccf3a3SEmmanuel Vadot            - const: core_clk
197c9ccf3a3SEmmanuel Vadot            - const: bus_clk
198c9ccf3a3SEmmanuel Vadot            - const: bus_aggr_clk
199c9ccf3a3SEmmanuel Vadot            - const: iface_clk
200c9ccf3a3SEmmanuel Vadot            - const: core_clk_unipro_src
201c9ccf3a3SEmmanuel Vadot            - const: core_clk_unipro
202c9ccf3a3SEmmanuel Vadot            - const: core_clk_ice
203c9ccf3a3SEmmanuel Vadot            - const: ref_clk
204c9ccf3a3SEmmanuel Vadot            - const: tx_lane0_sync_clk
205c9ccf3a3SEmmanuel Vadot            - const: rx_lane0_sync_clk
206c9ccf3a3SEmmanuel Vadot        reg:
207c9ccf3a3SEmmanuel Vadot          minItems: 1
208c9ccf3a3SEmmanuel Vadot          maxItems: 1
209aa1a8ff2SEmmanuel Vadot        reg-names:
210aa1a8ff2SEmmanuel Vadot          maxItems: 1
211aa1a8ff2SEmmanuel Vadot
212aa1a8ff2SEmmanuel Vadot  - if:
213aa1a8ff2SEmmanuel Vadot      properties:
214aa1a8ff2SEmmanuel Vadot        compatible:
215aa1a8ff2SEmmanuel Vadot          contains:
216aa1a8ff2SEmmanuel Vadot            enum:
217aa1a8ff2SEmmanuel Vadot              - qcom,sm6115-ufshc
218aa1a8ff2SEmmanuel Vadot    then:
219aa1a8ff2SEmmanuel Vadot      properties:
220aa1a8ff2SEmmanuel Vadot        clocks:
221aa1a8ff2SEmmanuel Vadot          minItems: 8
222aa1a8ff2SEmmanuel Vadot          maxItems: 8
223aa1a8ff2SEmmanuel Vadot        clock-names:
224aa1a8ff2SEmmanuel Vadot          items:
225aa1a8ff2SEmmanuel Vadot            - const: core_clk
226aa1a8ff2SEmmanuel Vadot            - const: bus_aggr_clk
227aa1a8ff2SEmmanuel Vadot            - const: iface_clk
228aa1a8ff2SEmmanuel Vadot            - const: core_clk_unipro
229aa1a8ff2SEmmanuel Vadot            - const: ref_clk
230aa1a8ff2SEmmanuel Vadot            - const: tx_lane0_sync_clk
231aa1a8ff2SEmmanuel Vadot            - const: rx_lane0_sync_clk
232aa1a8ff2SEmmanuel Vadot            - const: ice_core_clk
233aa1a8ff2SEmmanuel Vadot        reg:
234aa1a8ff2SEmmanuel Vadot          minItems: 2
235aa1a8ff2SEmmanuel Vadot          maxItems: 2
236aa1a8ff2SEmmanuel Vadot        reg-names:
237aa1a8ff2SEmmanuel Vadot          minItems: 2
238aa1a8ff2SEmmanuel Vadot      required:
239aa1a8ff2SEmmanuel Vadot        - reg-names
240c9ccf3a3SEmmanuel Vadot
241c9ccf3a3SEmmanuel Vadot    # TODO: define clock bindings for qcom,msm8994-ufshc
242c9ccf3a3SEmmanuel Vadot
243f126890aSEmmanuel Vadot  - if:
244f126890aSEmmanuel Vadot      required:
245f126890aSEmmanuel Vadot        - qcom,ice
246f126890aSEmmanuel Vadot    then:
247f126890aSEmmanuel Vadot      properties:
248f126890aSEmmanuel Vadot        reg:
249f126890aSEmmanuel Vadot          maxItems: 1
250f126890aSEmmanuel Vadot        clocks:
251f126890aSEmmanuel Vadot          minItems: 8
252f126890aSEmmanuel Vadot          maxItems: 8
253f126890aSEmmanuel Vadot    else:
254f126890aSEmmanuel Vadot      properties:
255f126890aSEmmanuel Vadot        reg:
256f126890aSEmmanuel Vadot          minItems: 1
257f126890aSEmmanuel Vadot          maxItems: 2
258f126890aSEmmanuel Vadot        clocks:
259f126890aSEmmanuel Vadot          minItems: 8
260f126890aSEmmanuel Vadot          maxItems: 11
261f126890aSEmmanuel Vadot
262c9ccf3a3SEmmanuel VadotunevaluatedProperties: false
263c9ccf3a3SEmmanuel Vadot
264c9ccf3a3SEmmanuel Vadotexamples:
265c9ccf3a3SEmmanuel Vadot  - |
266c9ccf3a3SEmmanuel Vadot    #include <dt-bindings/clock/qcom,gcc-sm8450.h>
267c9ccf3a3SEmmanuel Vadot    #include <dt-bindings/clock/qcom,rpmh.h>
268c9ccf3a3SEmmanuel Vadot    #include <dt-bindings/gpio/gpio.h>
269c9ccf3a3SEmmanuel Vadot    #include <dt-bindings/interconnect/qcom,sm8450.h>
270c9ccf3a3SEmmanuel Vadot    #include <dt-bindings/interrupt-controller/arm-gic.h>
271c9ccf3a3SEmmanuel Vadot
272c9ccf3a3SEmmanuel Vadot    soc {
273c9ccf3a3SEmmanuel Vadot        #address-cells = <2>;
274c9ccf3a3SEmmanuel Vadot        #size-cells = <2>;
275c9ccf3a3SEmmanuel Vadot
276c9ccf3a3SEmmanuel Vadot        ufs@1d84000 {
277c9ccf3a3SEmmanuel Vadot            compatible = "qcom,sm8450-ufshc", "qcom,ufshc",
278c9ccf3a3SEmmanuel Vadot                         "jedec,ufs-2.0";
279c9ccf3a3SEmmanuel Vadot            reg = <0 0x01d84000 0 0x3000>;
280c9ccf3a3SEmmanuel Vadot            interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH>;
281c9ccf3a3SEmmanuel Vadot            phys = <&ufs_mem_phy_lanes>;
282c9ccf3a3SEmmanuel Vadot            phy-names = "ufsphy";
283c9ccf3a3SEmmanuel Vadot            lanes-per-direction = <2>;
284c9ccf3a3SEmmanuel Vadot            #reset-cells = <1>;
285c9ccf3a3SEmmanuel Vadot            resets = <&gcc GCC_UFS_PHY_BCR>;
286c9ccf3a3SEmmanuel Vadot            reset-names = "rst";
287c9ccf3a3SEmmanuel Vadot            reset-gpios = <&tlmm 210 GPIO_ACTIVE_LOW>;
288c9ccf3a3SEmmanuel Vadot
289c9ccf3a3SEmmanuel Vadot            vcc-supply = <&vreg_l7b_2p5>;
290c9ccf3a3SEmmanuel Vadot            vcc-max-microamp = <1100000>;
291c9ccf3a3SEmmanuel Vadot            vccq-supply = <&vreg_l9b_1p2>;
292c9ccf3a3SEmmanuel Vadot            vccq-max-microamp = <1200000>;
293c9ccf3a3SEmmanuel Vadot
294c9ccf3a3SEmmanuel Vadot            power-domains = <&gcc UFS_PHY_GDSC>;
295c9ccf3a3SEmmanuel Vadot            iommus = <&apps_smmu 0xe0 0x0>;
296c9ccf3a3SEmmanuel Vadot            interconnects = <&aggre1_noc MASTER_UFS_MEM &mc_virt SLAVE_EBI1>,
297c9ccf3a3SEmmanuel Vadot                            <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_UFS_MEM_CFG>;
298c9ccf3a3SEmmanuel Vadot            interconnect-names = "ufs-ddr", "cpu-ufs";
299c9ccf3a3SEmmanuel Vadot
300c9ccf3a3SEmmanuel Vadot            clock-names = "core_clk",
301c9ccf3a3SEmmanuel Vadot                          "bus_aggr_clk",
302c9ccf3a3SEmmanuel Vadot                          "iface_clk",
303c9ccf3a3SEmmanuel Vadot                          "core_clk_unipro",
304c9ccf3a3SEmmanuel Vadot                          "ref_clk",
305c9ccf3a3SEmmanuel Vadot                          "tx_lane0_sync_clk",
306c9ccf3a3SEmmanuel Vadot                          "rx_lane0_sync_clk",
307c9ccf3a3SEmmanuel Vadot                          "rx_lane1_sync_clk";
308c9ccf3a3SEmmanuel Vadot            clocks = <&gcc GCC_UFS_PHY_AXI_CLK>,
309c9ccf3a3SEmmanuel Vadot                     <&gcc GCC_AGGRE_UFS_PHY_AXI_CLK>,
310c9ccf3a3SEmmanuel Vadot                     <&gcc GCC_UFS_PHY_AHB_CLK>,
311c9ccf3a3SEmmanuel Vadot                     <&gcc GCC_UFS_PHY_UNIPRO_CORE_CLK>,
312c9ccf3a3SEmmanuel Vadot                     <&rpmhcc RPMH_CXO_CLK>,
313c9ccf3a3SEmmanuel Vadot                     <&gcc GCC_UFS_PHY_TX_SYMBOL_0_CLK>,
314c9ccf3a3SEmmanuel Vadot                     <&gcc GCC_UFS_PHY_RX_SYMBOL_0_CLK>,
315c9ccf3a3SEmmanuel Vadot                     <&gcc GCC_UFS_PHY_RX_SYMBOL_1_CLK>;
316c9ccf3a3SEmmanuel Vadot            freq-table-hz = <75000000 300000000>,
317c9ccf3a3SEmmanuel Vadot                            <0 0>,
318c9ccf3a3SEmmanuel Vadot                            <0 0>,
319c9ccf3a3SEmmanuel Vadot                            <75000000 300000000>,
320c9ccf3a3SEmmanuel Vadot                            <75000000 300000000>,
321c9ccf3a3SEmmanuel Vadot                            <0 0>,
322c9ccf3a3SEmmanuel Vadot                            <0 0>,
323c9ccf3a3SEmmanuel Vadot                            <0 0>;
324aa1a8ff2SEmmanuel Vadot            qcom,ice = <&ice>;
325c9ccf3a3SEmmanuel Vadot        };
326c9ccf3a3SEmmanuel Vadot    };
327