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

Linux 6.18.37 · Devicetree Bindings / UFS

Qualcomm SM8650 and Other SoCs UFS Controllers

Kaanapali·SM8650·SM8750 UFS controller의 MCQ register, 8-clock 구성과 OPP table을 설명합니다.

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

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

1. 요약·해설

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

요약과 해설

qcom,sm8650-ufshc.yaml:1-180

Kaanapali·SM8650·SM8750 UFS controller의 MCQ register, 8-clock 구성과 OPP table을 설명합니다. 접을 수 있는 영어 원문 전체와 한국어 전문 번역을 함께 제공하며 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,sm8650-ufshc.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Qualcomm SM8650 and Other SoCs UFS Controllers
8
9 maintainers:
10 - Bjorn Andersson <[email protected]>
11
12 # Select only our matches, not all jedec,ufs-2.0
13 select:
14 properties:
15 compatible:
16 contains:
17 enum:
18 - qcom,kaanapali-ufshc
19 - qcom,sm8650-ufshc
20 - qcom,sm8750-ufshc
21 required:
22 - compatible
23
24 properties:
25 compatible:
26 items:
27 - enum:
28 - qcom,kaanapali-ufshc
29 - qcom,sm8650-ufshc
30 - qcom,sm8750-ufshc
31 - const: qcom,ufshc
32 - const: jedec,ufs-2.0
33
34 reg:
35 minItems: 1
36 maxItems: 2
37
38 reg-names:
39 minItems: 1
40 items:
41 - const: std
42 - const: mcq
43
44 clocks:
45 minItems: 8
46 maxItems: 8
47
48 clock-names:
49 items:
50 - const: core_clk
51 - const: bus_aggr_clk
52 - const: iface_clk
53 - const: core_clk_unipro
54 - const: ref_clk
55 - const: tx_lane0_sync_clk
56 - const: rx_lane0_sync_clk
57 - const: rx_lane1_sync_clk
58
59 qcom,ice:
60 $ref: /schemas/types.yaml#/definitions/phandle
61 description: phandle to the Inline Crypto Engine node
62
63 required:
64 - compatible
65 - reg
66
67 allOf:
68 - $ref: qcom,ufs-common.yaml
69
70 unevaluatedProperties: false
71
72 examples:
73 - |
74 #include <dt-bindings/clock/qcom,sm8650-gcc.h>
75 #include <dt-bindings/clock/qcom,sm8650-tcsr.h>
76 #include <dt-bindings/clock/qcom,rpmh.h>
77 #include <dt-bindings/gpio/gpio.h>
78 #include <dt-bindings/interconnect/qcom,icc.h>
79 #include <dt-bindings/interconnect/qcom,sm8650-rpmh.h>
80 #include <dt-bindings/interrupt-controller/arm-gic.h>
81
82 soc {
83 #address-cells = <2>;
84 #size-cells = <2>;
85
86 ufshc@1d84000 {
87 compatible = "qcom,sm8650-ufshc", "qcom,ufshc", "jedec,ufs-2.0";
88 reg = <0x0 0x01d84000 0x0 0x3000>;
89
90 interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH 0>;
91
92 clocks = <&gcc GCC_UFS_PHY_AXI_CLK>,
93 <&gcc GCC_AGGRE_UFS_PHY_AXI_CLK>,
94 <&gcc GCC_UFS_PHY_AHB_CLK>,
95 <&gcc GCC_UFS_PHY_UNIPRO_CORE_CLK>,
96 <&tcsr TCSR_UFS_PAD_CLKREF_EN>,
97 <&gcc GCC_UFS_PHY_TX_SYMBOL_0_CLK>,
98 <&gcc GCC_UFS_PHY_RX_SYMBOL_0_CLK>,
99 <&gcc GCC_UFS_PHY_RX_SYMBOL_1_CLK>;
100 clock-names = "core_clk",
101 "bus_aggr_clk",
102 "iface_clk",
103 "core_clk_unipro",
104 "ref_clk",
105 "tx_lane0_sync_clk",
106 "rx_lane0_sync_clk",
107 "rx_lane1_sync_clk";
108
109 resets = <&gcc GCC_UFS_PHY_BCR>;
110 reset-names = "rst";
111 reset-gpios = <&tlmm 210 GPIO_ACTIVE_LOW>;
112
113 interconnects = <&aggre1_noc MASTER_UFS_MEM QCOM_ICC_TAG_ALWAYS
114 &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
115 <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_ONLY
116 &config_noc SLAVE_UFS_MEM_CFG QCOM_ICC_TAG_ACTIVE_ONLY>;
117 interconnect-names = "ufs-ddr",
118 "cpu-ufs";
119
120 power-domains = <&gcc UFS_PHY_GDSC>;
121 required-opps = <&rpmhpd_opp_nom>;
122
123 operating-points-v2 = <&ufs_opp_table>;
124
125 iommus = <&apps_smmu 0x60 0>;
126
127 lanes-per-direction = <2>;
128 qcom,ice = <&ice>;
129
130 phys = <&ufs_mem_phy>;
131 phy-names = "ufsphy";
132
133 #reset-cells = <1>;
134
135 vcc-supply = <&vreg_l7b_2p5>;
136 vcc-max-microamp = <1100000>;
137 vccq-supply = <&vreg_l9b_1p2>;
138 vccq-max-microamp = <1200000>;
139
140 ufs_opp_table: opp-table {
141 compatible = "operating-points-v2";
142
143 opp-100000000 {
144 opp-hz = /bits/ 64 <100000000>,
145 /bits/ 64 <0>,
146 /bits/ 64 <0>,
147 /bits/ 64 <100000000>,
148 /bits/ 64 <0>,
149 /bits/ 64 <0>,
150 /bits/ 64 <0>,
151 /bits/ 64 <0>;
152 required-opps = <&rpmhpd_opp_low_svs>;
153 };
154
155 opp-201500000 {
156 opp-hz = /bits/ 64 <201500000>,
157 /bits/ 64 <0>,
158 /bits/ 64 <0>,
159 /bits/ 64 <201500000>,
160 /bits/ 64 <0>,
161 /bits/ 64 <0>,
162 /bits/ 64 <0>,
163 /bits/ 64 <0>;
164 required-opps = <&rpmhpd_opp_svs>;
165 };
166
167 opp-403000000 {
168 opp-hz = /bits/ 64 <403000000>,
169 /bits/ 64 <0>,
170 /bits/ 64 <0>,
171 /bits/ 64 <403000000>,
172 /bits/ 64 <0>,
173 /bits/ 64 <0>,
174 /bits/ 64 <0>,
175 /bits/ 64 <0>;
176 required-opps = <&rpmhpd_opp_nom>;
177 };
178 };
179 };
180 };
181

3. 한국어 전문 번역

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

Qualcomm SM8650 계열 UFS controller

1-11

GPL-2.0-only 또는 BSD-2-Clause 이중 라이선스의 이 스키마는 Qualcomm SM8650 및 다른 최신 SoC의 UFS controller를 정의합니다. 관리자는 Bjorn Andersson입니다.

Kaanapali·SM8650·SM8750 선택

12-23

이 스키마는 모든 `jedec,ufs-2.0` 장치가 아니라 `compatible`에 `qcom,kaanapali-ufshc`, `qcom,sm8650-ufshc`, `qcom,sm8750-ufshc` 가운데 하나가 포함된 node만 선택합니다. `compatible`은 필수입니다.

# Select only our matches, not all jedec,ufs-2.0
select:
  properties:
    compatible:
      contains:
        enum:
          - qcom,kaanapali-ufshc
          - qcom,sm8650-ufshc
          - qcom,sm8750-ufshc
  required:
    - compatible

MCQ register, 8 clocks 및 inline crypto

24-70

`compatible`은 SoC별 값 뒤에 `qcom,ufshc`와 `jedec,ufs-2.0`을 순서대로 둡니다. `reg`는 1~2개이고 `reg-names`는 표준 register `std`와 선택적인 Multi-Circular Queue register `mcq` 순서입니다.

Clock은 정확히 8개이며 이름은 `core_clk`, `bus_aggr_clk`, `iface_clk`, `core_clk_unipro`, `ref_clk`, `tx_lane0_sync_clk`, `rx_lane0_sync_clk`, `rx_lane1_sync_clk` 순서입니다. `qcom,ice`는 Inline Crypto Engine node의 phandle입니다. 필수 속성은 `compatible`과 `reg`이고, 공통 속성은 `qcom,ufs-common.yaml`을 참조하며 평가되지 않은 추가 속성은 허용하지 않습니다.

properties:
  compatible:
    items:
      - enum:
          - qcom,kaanapali-ufshc
          - qcom,sm8650-ufshc
          - qcom,sm8750-ufshc
      - const: qcom,ufshc
      - const: jedec,ufs-2.0

  reg:
    minItems: 1
    maxItems: 2

  reg-names:
    minItems: 1
    items:
      - const: std
      - const: mcq

  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: rx_lane1_sync_clk

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

required:
  - compatible
  - reg

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

unevaluatedProperties: false

SM8650 UFS resource 예제

71-139

예제 `ufshc@1d84000`은 `qcom,sm8650-ufshc`, `qcom,ufshc`, `jedec,ufs-2.0` compatible chain, 0x3000-byte register 영역, level-high GIC SPI interrupt 265를 사용합니다. AXI, aggregate AXI, AHB, UniPro core, TCSR pad reference, TX symbol lane 0, RX symbol lane 0과 lane 1 clock을 스키마 순서대로 연결합니다.

`GCC_UFS_PHY_BCR` reset과 `rst` 이름, active-low TLMM GPIO 210 reset을 선언합니다. `ufs-ddr` interconnect에는 `QCOM_ICC_TAG_ALWAYS`, `cpu-ufs`에는 `QCOM_ICC_TAG_ACTIVE_ONLY`를 사용합니다. Power domain은 `UFS_PHY_GDSC`, 기본 required OPP는 `rpmhpd_opp_nom`, OPP table phandle은 `ufs_opp_table`입니다.

Apps SMMU stream은 0x60이고 방향당 lane은 2개입니다. `qcom,ice`는 `ice` node, PHY는 `ufs_mem_phy`를 `ufsphy` 이름으로 연결하며 `#reset-cells`는 1입니다. `vcc-supply`의 최대 전류는 1,100,000 microamps, `vccq-supply`는 1,200,000 microamps입니다.


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

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

        ufshc@1d84000 {
            compatible = "qcom,sm8650-ufshc", "qcom,ufshc", "jedec,ufs-2.0";
            reg = <0x0 0x01d84000 0x0 0x3000>;

            interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH 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>,
                     <&tcsr TCSR_UFS_PAD_CLKREF_EN>,
                     <&gcc GCC_UFS_PHY_TX_SYMBOL_0_CLK>,
                     <&gcc GCC_UFS_PHY_RX_SYMBOL_0_CLK>,
                     <&gcc GCC_UFS_PHY_RX_SYMBOL_1_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";

            resets = <&gcc GCC_UFS_PHY_BCR>;
            reset-names = "rst";
            reset-gpios = <&tlmm 210 GPIO_ACTIVE_LOW>;

            interconnects = <&aggre1_noc MASTER_UFS_MEM QCOM_ICC_TAG_ALWAYS
                             &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
                            <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_ONLY
                             &config_noc SLAVE_UFS_MEM_CFG QCOM_ICC_TAG_ACTIVE_ONLY>;
            interconnect-names = "ufs-ddr",
                         "cpu-ufs";

            power-domains = <&gcc UFS_PHY_GDSC>;
            required-opps = <&rpmhpd_opp_nom>;

            operating-points-v2 = <&ufs_opp_table>;

            iommus = <&apps_smmu 0x60 0>;

            lanes-per-direction = <2>;
            qcom,ice = <&ice>;

            phys = <&ufs_mem_phy>;
            phy-names = "ufsphy";

            #reset-cells = <1>;

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

100·201.5·403 MHz OPP table

140-180

`ufs_opp_table`은 `operating-points-v2`를 사용합니다. `opp-100000000`은 첫 번째 `core_clk`와 네 번째 `core_clk_unipro`를 100 MHz로 설정하고 `rpmhpd_opp_low_svs`를 요구합니다. `opp-201500000`은 같은 두 clock을 201.5 MHz로 설정하고 `rpmhpd_opp_svs`를 요구합니다. `opp-403000000`은 두 clock을 403 MHz로 설정하고 `rpmhpd_opp_nom`을 요구합니다. 나머지 여섯 clock 위치는 각 OPP에서 0으로 유지됩니다.

        ufs_opp_table: opp-table {
            compatible = "operating-points-v2";

            opp-100000000 {
                opp-hz = /bits/ 64 <100000000>,
                         /bits/ 64 <0>,
                         /bits/ 64 <0>,
                         /bits/ 64 <100000000>,
                         /bits/ 64 <0>,
                         /bits/ 64 <0>,
                         /bits/ 64 <0>,
                         /bits/ 64 <0>;
                required-opps = <&rpmhpd_opp_low_svs>;
            };

            opp-201500000 {
                opp-hz = /bits/ 64 <201500000>,
                         /bits/ 64 <0>,
                         /bits/ 64 <0>,
                         /bits/ 64 <201500000>,
                         /bits/ 64 <0>,
                         /bits/ 64 <0>,
                         /bits/ 64 <0>,
                         /bits/ 64 <0>;
                required-opps = <&rpmhpd_opp_svs>;
            };

            opp-403000000 {
                opp-hz = /bits/ 64 <403000000>,
                         /bits/ 64 <0>,
                         /bits/ 64 <0>,
                         /bits/ 64 <403000000>,
                         /bits/ 64 <0>,
                         /bits/ 64 <0>,
                         /bits/ 64 <0>,
                         /bits/ 64 <0>;
                required-opps = <&rpmhpd_opp_nom>;
            };
        };
    };
};