← Documents Documentation/devicetree/bindings/ufs/qcom,ufs.yaml GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings / UFS

Qualcomm Universal Flash Storage Controller

여러 Qualcomm SoC의 clock·register·Inline Crypto Engine 조건 분기와 SM8150 예제를 설명합니다.

Source pathDocumentation/devicetree/bindings/ufs/qcom,ufs.yaml
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

qcom,ufs.yaml:1-243

여러 Qualcomm SoC의 clock·register·Inline Crypto Engine 조건 분기와 SM8150 예제를 설명합니다. 접을 수 있는 영어 원문 전체와 한국어 전문 번역을 함께 제공하며 compatible, clock name, register, phandle, OPP, interrupt, source path 및 원문 줄 좌표를 원형대로 보존합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 # SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/ufs/qcom,ufs.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Qualcomm Universal Flash Storage (UFS) Controller
8
9 maintainers:
10 - Bjorn Andersson <[email protected]>
11 - Andy Gross <[email protected]>
12
13 # Select only our matches, not all jedec,ufs-2.0
14 select:
15 properties:
16 compatible:
17 contains:
18 enum:
19 - qcom,msm8994-ufshc
20 - qcom,msm8996-ufshc
21 - qcom,qcs615-ufshc
22 - qcom,sdm845-ufshc
23 - qcom,sm6115-ufshc
24 - qcom,sm6125-ufshc
25 - qcom,sm6350-ufshc
26 - qcom,sm8150-ufshc
27 required:
28 - compatible
29
30 properties:
31 compatible:
32 items:
33 - enum:
34 - qcom,msm8994-ufshc
35 - qcom,msm8996-ufshc
36 - qcom,qcs615-ufshc
37 - qcom,sdm845-ufshc
38 - qcom,sm6115-ufshc
39 - qcom,sm6125-ufshc
40 - qcom,sm6350-ufshc
41 - qcom,sm8150-ufshc
42 - const: qcom,ufshc
43 - const: jedec,ufs-2.0
44
45 qcom,ice:
46 $ref: /schemas/types.yaml#/definitions/phandle
47 description: phandle to the Inline Crypto Engine node
48
49 reg:
50 minItems: 1
51 maxItems: 2
52
53 reg-names:
54 items:
55 - const: std
56 - const: ice
57
58 required:
59 - compatible
60 - reg
61
62 allOf:
63 - $ref: qcom,ufs-common.yaml
64
65 - if:
66 properties:
67 compatible:
68 contains:
69 enum:
70 - qcom,sdm845-ufshc
71 - qcom,sm6350-ufshc
72 - qcom,sm8150-ufshc
73 then:
74 properties:
75 clocks:
76 minItems: 9
77 maxItems: 9
78 clock-names:
79 items:
80 - const: core_clk
81 - const: bus_aggr_clk
82 - const: iface_clk
83 - const: core_clk_unipro
84 - const: ref_clk
85 - const: tx_lane0_sync_clk
86 - const: rx_lane0_sync_clk
87 - const: rx_lane1_sync_clk
88 - const: ice_core_clk
89 reg:
90 minItems: 2
91 maxItems: 2
92 reg-names:
93 minItems: 2
94 required:
95 - reg-names
96
97 - if:
98 properties:
99 compatible:
100 contains:
101 enum:
102 - qcom,msm8996-ufshc
103 then:
104 properties:
105 clocks:
106 minItems: 9
107 maxItems: 9
108 clock-names:
109 items:
110 - const: core_clk
111 - const: bus_clk
112 - const: bus_aggr_clk
113 - const: iface_clk
114 - const: core_clk_unipro
115 - const: core_clk_ice
116 - const: ref_clk
117 - const: tx_lane0_sync_clk
118 - const: rx_lane0_sync_clk
119 reg:
120 minItems: 1
121 maxItems: 1
122 reg-names:
123 maxItems: 1
124
125 - if:
126 properties:
127 compatible:
128 contains:
129 enum:
130 - qcom,qcs615-ufshc
131 - qcom,sm6115-ufshc
132 - qcom,sm6125-ufshc
133 then:
134 properties:
135 clocks:
136 minItems: 8
137 maxItems: 8
138 clock-names:
139 items:
140 - const: core_clk
141 - const: bus_aggr_clk
142 - const: iface_clk
143 - const: core_clk_unipro
144 - const: ref_clk
145 - const: tx_lane0_sync_clk
146 - const: rx_lane0_sync_clk
147 - const: ice_core_clk
148 reg:
149 minItems: 2
150 maxItems: 2
151 reg-names:
152 minItems: 2
153 required:
154 - reg-names
155
156 # TODO: define clock bindings for qcom,msm8994-ufshc
157
158 - if:
159 required:
160 - qcom,ice
161 then:
162 properties:
163 reg:
164 maxItems: 1
165 clocks:
166 minItems: 7
167 maxItems: 8
168 else:
169 properties:
170 reg:
171 minItems: 1
172 maxItems: 2
173 clocks:
174 minItems: 7
175 maxItems: 9
176
177 unevaluatedProperties: false
178
179 examples:
180 - |
181 #include <dt-bindings/clock/qcom,gcc-sm8150.h>
182 #include <dt-bindings/clock/qcom,rpmh.h>
183 #include <dt-bindings/gpio/gpio.h>
184 #include <dt-bindings/interconnect/qcom,sm8150.h>
185 #include <dt-bindings/interrupt-controller/arm-gic.h>
186
187 soc {
188 #address-cells = <2>;
189 #size-cells = <2>;
190
191 ufs@1d84000 {
192 compatible = "qcom,sm8150-ufshc", "qcom,ufshc",
193 "jedec,ufs-2.0";
194 reg = <0x0 0x01d84000 0x0 0x2500>,
195 <0x0 0x01d90000 0x0 0x8000>;
196 reg-names = "std", "ice";
197
198 interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH>;
199 phys = <&ufs_mem_phy_lanes>;
200 phy-names = "ufsphy";
201 lanes-per-direction = <2>;
202 #reset-cells = <1>;
203 resets = <&gcc GCC_UFS_PHY_BCR>;
204 reset-names = "rst";
205 reset-gpios = <&tlmm 210 GPIO_ACTIVE_LOW>;
206
207 vcc-supply = <&vreg_l7b_2p5>;
208 vcc-max-microamp = <1100000>;
209 vccq-supply = <&vreg_l9b_1p2>;
210 vccq-max-microamp = <1200000>;
211
212 power-domains = <&gcc UFS_PHY_GDSC>;
213 iommus = <&apps_smmu 0x300 0>;
214
215 clocks = <&gcc GCC_UFS_PHY_AXI_CLK>,
216 <&gcc GCC_AGGRE_UFS_PHY_AXI_CLK>,
217 <&gcc GCC_UFS_PHY_AHB_CLK>,
218 <&gcc GCC_UFS_PHY_UNIPRO_CORE_CLK>,
219 <&rpmhcc RPMH_CXO_CLK>,
220 <&gcc GCC_UFS_PHY_TX_SYMBOL_0_CLK>,
221 <&gcc GCC_UFS_PHY_RX_SYMBOL_0_CLK>,
222 <&gcc GCC_UFS_PHY_RX_SYMBOL_1_CLK>,
223 <&gcc GCC_UFS_PHY_ICE_CORE_CLK>;
224 clock-names = "core_clk",
225 "bus_aggr_clk",
226 "iface_clk",
227 "core_clk_unipro",
228 "ref_clk",
229 "tx_lane0_sync_clk",
230 "rx_lane0_sync_clk",
231 "rx_lane1_sync_clk",
232 "ice_core_clk";
233 freq-table-hz = <37500000 300000000>,
234 <0 0>,
235 <0 0>,
236 <37500000 300000000>,
237 <0 0>,
238 <0 0>,
239 <0 0>,
240 <0 0>,
241 <0 300000000>;
242 };
243 };
244

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

Qualcomm UFS controller

1-12

GPL-2.0-only 또는 BSD-2-Clause 이중 라이선스의 이 스키마는 여러 세대의 Qualcomm Universal Flash Storage(UFS) controller를 정의합니다. 관리자는 Bjorn Andersson과 Andy Gross입니다.

적용되는 8개 Qualcomm SoC

13-29

이 스키마는 `qcom,msm8994-ufshc`, `qcom,msm8996-ufshc`, `qcom,qcs615-ufshc`, `qcom,sdm845-ufshc`, `qcom,sm6115-ufshc`, `qcom,sm6125-ufshc`, `qcom,sm6350-ufshc`, `qcom,sm8150-ufshc` 가운데 하나가 `compatible`에 포함된 node만 선택합니다. 모든 `jedec,ufs-2.0` node에 적용되는 것은 아니며 `compatible`은 필수입니다.

# Select only our matches, not all jedec,ufs-2.0
select:
  properties:
    compatible:
      contains:
        enum:
          - qcom,msm8994-ufshc
          - qcom,msm8996-ufshc
          - qcom,qcs615-ufshc
          - qcom,sdm845-ufshc
          - qcom,sm6115-ufshc
          - qcom,sm6125-ufshc
          - qcom,sm6350-ufshc
          - qcom,sm8150-ufshc
  required:
    - compatible

기본 compatible, ICE 및 register

30-64

`compatible`은 SoC별 값, `qcom,ufshc`, `jedec,ufs-2.0`의 세 단계 chain입니다. `qcom,ice`는 Inline Crypto Engine node의 phandle입니다. `reg`는 1~2개이고 이름은 표준 UFS register `std`와 별도 crypto register `ice` 순서입니다. 필수 속성은 `compatible`과 `reg`이며 Qualcomm 공통 속성은 `qcom,ufs-common.yaml`을 참조합니다.

properties:
  compatible:
    items:
      - enum:
          - qcom,msm8994-ufshc
          - qcom,msm8996-ufshc
          - qcom,qcs615-ufshc
          - qcom,sdm845-ufshc
          - qcom,sm6115-ufshc
          - qcom,sm6125-ufshc
          - qcom,sm6350-ufshc
          - qcom,sm8150-ufshc
      - const: qcom,ufshc
      - const: jedec,ufs-2.0

  qcom,ice:
    $ref: /schemas/types.yaml#/definitions/phandle
    description: phandle to the Inline Crypto Engine node

  reg:
    minItems: 1
    maxItems: 2

  reg-names:
    items:
      - const: std
      - const: ice

required:
  - compatible
  - reg

allOf:
  - $ref: qcom,ufs-common.yaml

SDM845·SM6350·SM8150 9-clock 구성

65-96

`qcom,sdm845-ufshc`, `qcom,sm6350-ufshc`, `qcom,sm8150-ufshc`는 정확히 9개 clock을 사용합니다. 이름은 `core_clk`, `bus_aggr_clk`, `iface_clk`, `core_clk_unipro`, `ref_clk`, `tx_lane0_sync_clk`, `rx_lane0_sync_clk`, `rx_lane1_sync_clk`, `ice_core_clk` 순서입니다. Register는 정확히 2개이고 `reg-names`도 2개가 필요하므로 `reg-names`가 필수입니다.

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,sdm845-ufshc
            - qcom,sm6350-ufshc
            - qcom,sm8150-ufshc
  then:
    properties:
      clocks:
        minItems: 9
        maxItems: 9
      clock-names:
        items:
          - const: core_clk
          - const: bus_aggr_clk
          - const: iface_clk
          - const: core_clk_unipro
          - const: ref_clk
          - const: tx_lane0_sync_clk
          - const: rx_lane0_sync_clk
          - const: rx_lane1_sync_clk
          - const: ice_core_clk
      reg:
        minItems: 2
        maxItems: 2
      reg-names:
        minItems: 2
    required:
      - reg-names

MSM8996 전용 9-clock 구성

97-124

`qcom,msm8996-ufshc`도 정확히 9개 clock을 사용하지만 순서는 `core_clk`, `bus_clk`, `bus_aggr_clk`, `iface_clk`, `core_clk_unipro`, `core_clk_ice`, `ref_clk`, `tx_lane0_sync_clk`, `rx_lane0_sync_clk`입니다. Register와 register name은 각각 최대 한 개이므로 별도 `ice` register 영역을 두지 않습니다.

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,msm8996-ufshc
  then:
    properties:
      clocks:
        minItems: 9
        maxItems: 9
      clock-names:
        items:
          - const: core_clk
          - const: bus_clk
          - const: bus_aggr_clk
          - const: iface_clk
          - const: core_clk_unipro
          - const: core_clk_ice
          - const: ref_clk
          - const: tx_lane0_sync_clk
          - const: rx_lane0_sync_clk
      reg:
        minItems: 1
        maxItems: 1
      reg-names:
        maxItems: 1

QCS615·SM6115·SM6125 8-clock 구성

125-157

`qcom,qcs615-ufshc`, `qcom,sm6115-ufshc`, `qcom,sm6125-ufshc`는 정확히 8개 clock을 사용합니다. 이름은 `core_clk`, `bus_aggr_clk`, `iface_clk`, `core_clk_unipro`, `ref_clk`, `tx_lane0_sync_clk`, `rx_lane0_sync_clk`, `ice_core_clk` 순서입니다. Register와 register name은 각각 2개이고 `reg-names`가 필수입니다. `qcom,msm8994-ufshc`의 clock binding은 아직 TODO로 남아 있습니다.

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,qcs615-ufshc
            - qcom,sm6115-ufshc
            - qcom,sm6125-ufshc
  then:
    properties:
      clocks:
        minItems: 8
        maxItems: 8
      clock-names:
        items:
          - const: core_clk
          - const: bus_aggr_clk
          - const: iface_clk
          - const: core_clk_unipro
          - const: ref_clk
          - const: tx_lane0_sync_clk
          - const: rx_lane0_sync_clk
          - const: ice_core_clk
      reg:
        minItems: 2
        maxItems: 2
      reg-names:
        minItems: 2
    required:
      - reg-names

  # TODO: define clock bindings for qcom,msm8994-ufshc

qcom,ice 유무에 따른 resource 수

158-178

`qcom,ice` phandle을 제공하면 Inline Crypto Engine register를 phandle 대상에서 찾으므로 이 node의 `reg`는 최대 한 개, clock은 7~8개입니다. `qcom,ice`가 없으면 legacy 별도 ICE resource를 포함할 수 있어 `reg`는 1~2개, clock은 7~9개입니다. 평가되지 않은 추가 속성은 허용하지 않습니다.

  - if:
      required:
        - qcom,ice
    then:
      properties:
        reg:
          maxItems: 1
        clocks:
          minItems: 7
          maxItems: 8
    else:
      properties:
        reg:
          minItems: 1
          maxItems: 2
        clocks:
          minItems: 7
          maxItems: 9

unevaluatedProperties: false

SM8150 UFS와 별도 ICE register 예제

179-243

예제 `ufs@1d84000`은 `qcom,sm8150-ufshc`, `qcom,ufshc`, `jedec,ufs-2.0`을 선언합니다. `std` register는 0x2500 bytes, `ice` register는 0x8000 bytes이며 level-high GIC SPI interrupt 265를 사용합니다. PHY는 `ufs_mem_phy_lanes`, 방향당 lane은 2개이고 `GCC_UFS_PHY_BCR` reset과 active-low TLMM GPIO 210 reset을 선언합니다.

`vcc`와 `vccq` supply의 최대 전류는 각각 1,100,000 및 1,200,000 microamps입니다. `UFS_PHY_GDSC` power domain과 Apps SMMU stream 0x300을 사용합니다. Clock 9개는 SDM845·SM6350·SM8150 구성 순서와 일치하고, frequency table에서 `core_clk`와 `core_clk_unipro` 범위는 37.5~300 MHz, `ice_core_clk` 최대값은 300 MHz이며 나머지는 `<0 0>`입니다.

examples:
  - |
    #include <dt-bindings/clock/qcom,gcc-sm8150.h>
    #include <dt-bindings/clock/qcom,rpmh.h>
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interconnect/qcom,sm8150.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    soc {
        #address-cells = <2>;
        #size-cells = <2>;

        ufs@1d84000 {
            compatible = "qcom,sm8150-ufshc", "qcom,ufshc",
                         "jedec,ufs-2.0";
            reg = <0x0 0x01d84000 0x0 0x2500>,
                  <0x0 0x01d90000 0x0 0x8000>;
            reg-names = "std", "ice";

            interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH>;
            phys = <&ufs_mem_phy_lanes>;
            phy-names = "ufsphy";
            lanes-per-direction = <2>;
            #reset-cells = <1>;
            resets = <&gcc GCC_UFS_PHY_BCR>;
            reset-names = "rst";
            reset-gpios = <&tlmm 210 GPIO_ACTIVE_LOW>;

            vcc-supply = <&vreg_l7b_2p5>;
            vcc-max-microamp = <1100000>;
            vccq-supply = <&vreg_l9b_1p2>;
            vccq-max-microamp = <1200000>;

            power-domains = <&gcc UFS_PHY_GDSC>;
            iommus = <&apps_smmu 0x300 0>;

            clocks = <&gcc GCC_UFS_PHY_AXI_CLK>,
                     <&gcc GCC_AGGRE_UFS_PHY_AXI_CLK>,
                     <&gcc GCC_UFS_PHY_AHB_CLK>,
                     <&gcc GCC_UFS_PHY_UNIPRO_CORE_CLK>,
                     <&rpmhcc RPMH_CXO_CLK>,
                     <&gcc GCC_UFS_PHY_TX_SYMBOL_0_CLK>,
                     <&gcc GCC_UFS_PHY_RX_SYMBOL_0_CLK>,
                     <&gcc GCC_UFS_PHY_RX_SYMBOL_1_CLK>,
                     <&gcc GCC_UFS_PHY_ICE_CORE_CLK>;
            clock-names = "core_clk",
                          "bus_aggr_clk",
                          "iface_clk",
                          "core_clk_unipro",
                          "ref_clk",
                          "tx_lane0_sync_clk",
                          "rx_lane0_sync_clk",
                          "rx_lane1_sync_clk",
                          "ice_core_clk";
            freq-table-hz = <37500000 300000000>,
                            <0 0>,
                            <0 0>,
                            <37500000 300000000>,
                            <0 0>,
                            <0 0>,
                            <0 0>,
                            <0 0>,
                            <0 300000000>;
        };
    };