← Documents Documentation/devicetree/bindings/timer/samsung,exynos4210-mct.yaml GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings / Timer

Samsung Exynos Multi Core Timer

Samsung Exynos MCT의 global·local timer와 SoC별 interrupt 수를 설명합니다.

Source pathDocumentation/devicetree/bindings/timer/samsung,exynos4210-mct.yaml
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

요약과 해설

samsung,exynos4210-mct.yaml:1-247

Samsung Exynos MCT의 global·local timer와 SoC별 interrupt 수를 설명합니다. 접을 수 있는 영어 원문 전체와 한국어 전문 번역을 함께 제공하며 compatible, interrupt, clock, register, phandle, 수치와 줄 좌표를 원형대로 보존합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 # SPDX-License-Identifier: GPL-2.0
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/timer/samsung,exynos4210-mct.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Samsung Exynos SoC Multi Core Timer (MCT)
8
9 maintainers:
10 - Krzysztof Kozlowski <[email protected]>
11
12 description: |+
13 The Samsung's Multi Core Timer (MCT) module includes two main blocks, the
14 global timer and CPU local timers. The global timer is a 64-bit free running
15 up-counter and can generate 4 interrupts when the counter reaches one of the
16 four preset counter values. The CPU local timers are 32-bit free running
17 down-counters and generate an interrupt when the counter expires. There is
18 one CPU local timer instantiated in MCT for every CPU in the system.
19
20 properties:
21 compatible:
22 oneOf:
23 - enum:
24 - samsung,exynos4210-mct
25 - samsung,exynos4412-mct
26 - items:
27 - enum:
28 - axis,artpec8-mct
29 - axis,artpec9-mct
30 - google,gs101-mct
31 - samsung,exynos2200-mct-peris
32 - samsung,exynos3250-mct
33 - samsung,exynos5250-mct
34 - samsung,exynos5260-mct
35 - samsung,exynos5420-mct
36 - samsung,exynos5433-mct
37 - samsung,exynos850-mct
38 - samsung,exynos8895-mct
39 - samsung,exynos990-mct
40 - tesla,fsd-mct
41 - const: samsung,exynos4210-mct
42
43 clocks:
44 maxItems: 2
45
46 clock-names:
47 items:
48 - const: fin_pll
49 - const: mct
50
51 reg:
52 maxItems: 1
53
54 samsung,frc-shared:
55 type: boolean
56 description: |
57 Indicates that the hardware requires that this processor share the
58 free-running counter with a different (main) processor.
59
60 samsung,local-timers:
61 $ref: /schemas/types.yaml#/definitions/uint32-array
62 minItems: 1
63 maxItems: 16
64 description: |
65 List of indices of local timers usable from this processor.
66
67 interrupts:
68 description: |
69 Interrupts should be put in specific order. This is, the local timer
70 interrupts should be specified after the four global timer interrupts
71 have been specified:
72 0: Global Timer Interrupt 0
73 1: Global Timer Interrupt 1
74 2: Global Timer Interrupt 2
75 3: Global Timer Interrupt 3
76 4: Local Timer Interrupt 0
77 5: Local Timer Interrupt 1
78 6: ..
79 7: ..
80 i: Local Timer Interrupt n
81 For MCT block that uses a per-processor interrupt for local timers, such
82 as ones compatible with "samsung,exynos4412-mct", only one local timer
83 interrupt might be specified, meaning that all local timers use the same
84 per processor interrupt.
85 minItems: 5 # 4 Global + 1 local
86 maxItems: 20 # 4 Global + 16 local
87
88 required:
89 - compatible
90 - clock-names
91 - clocks
92 - interrupts
93 - reg
94
95 allOf:
96 - if:
97 not:
98 properties:
99 compatible:
100 contains:
101 enum:
102 - axis,artpec8-mct
103 then:
104 properties:
105 samsung,local-timers: false
106 samsung,frc-shared: false
107 - if:
108 properties:
109 compatible:
110 contains:
111 const: samsung,exynos3250-mct
112 then:
113 properties:
114 interrupts:
115 minItems: 8
116 maxItems: 8
117
118 - if:
119 properties:
120 compatible:
121 contains:
122 const: samsung,exynos5250-mct
123 then:
124 properties:
125 interrupts:
126 minItems: 6
127 maxItems: 6
128
129 - if:
130 properties:
131 compatible:
132 contains:
133 enum:
134 - axis,artpec8-mct
135 - axis,artpec9-mct
136 - google,gs101-mct
137 - samsung,exynos2200-mct-peris
138 - samsung,exynos5260-mct
139 - samsung,exynos5420-mct
140 - samsung,exynos5433-mct
141 - samsung,exynos850-mct
142 - samsung,exynos8895-mct
143 - samsung,exynos990-mct
144 then:
145 properties:
146 interrupts:
147 minItems: 12
148 maxItems: 12
149
150 - if:
151 properties:
152 compatible:
153 contains:
154 enum:
155 - tesla,fsd-mct
156 then:
157 properties:
158 interrupts:
159 minItems: 16
160 maxItems: 16
161
162 additionalProperties: false
163
164 examples:
165 - |
166 // In this example, the IP contains two local timers, using separate
167 // interrupts, so two local timer interrupts have been specified,
168 // in addition to four global timer interrupts.
169 #include <dt-bindings/clock/exynos4.h>
170 #include <dt-bindings/interrupt-controller/arm-gic.h>
171
172 timer@10050000 {
173 compatible = "samsung,exynos4210-mct";
174 reg = <0x10050000 0x800>;
175 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
176 clock-names = "fin_pll", "mct";
177
178 interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
179 <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
180 <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
181 <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
182 <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
183 <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
184 };
185
186 - |
187 // In this example, the timer interrupts are connected to two separate
188 // interrupt controllers. Hence, an interrupts-extended is needed.
189 #include <dt-bindings/clock/exynos4.h>
190 #include <dt-bindings/interrupt-controller/arm-gic.h>
191
192 timer@101c0000 {
193 compatible = "samsung,exynos4210-mct";
194 reg = <0x101C0000 0x800>;
195 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
196 clock-names = "fin_pll", "mct";
197
198 interrupts-extended = <&gic GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
199 <&gic GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
200 <&combiner 12 6>,
201 <&combiner 12 7>,
202 <&gic GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
203 <&gic GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
204 };
205
206 - |
207 // In this example, the IP contains four local timers, but using
208 // a per-processor interrupt to handle them. Only one first local
209 // interrupt is specified.
210 #include <dt-bindings/clock/exynos4.h>
211 #include <dt-bindings/interrupt-controller/arm-gic.h>
212
213 timer@10050000 {
214 compatible = "samsung,exynos4412-mct";
215 reg = <0x10050000 0x800>;
216 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
217 clock-names = "fin_pll", "mct";
218
219 interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
220 <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
221 <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
222 <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
223 <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>;
224 };
225
226 - |
227 // In this example, the IP contains four local timers, but using
228 // a per-processor interrupt to handle them. All the local timer
229 // interrupts are specified.
230 #include <dt-bindings/clock/exynos4.h>
231 #include <dt-bindings/interrupt-controller/arm-gic.h>
232
233 timer@10050000 {
234 compatible = "samsung,exynos4412-mct";
235 reg = <0x10050000 0x800>;
236 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
237 clock-names = "fin_pll", "mct";
238
239 interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
240 <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
241 <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
242 <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
243 <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>,
244 <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>,
245 <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>,
246 <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>;
247 };
248

3. 한국어 전문 번역

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

Samsung Exynos Multi Core Timer

1-19

GPL-2.0 라이선스의 이 스키마는 Samsung Exynos SoC Multi Core Timer(MCT)를 정의합니다. MCT module은 global timer와 CPU local timer라는 두 main block을 포함합니다. Global timer는 64-bit free-running up-counter이며 counter가 미리 설정한 네 값 중 하나에 도달하면 네 interrupt 중 해당 interrupt를 생성합니다. CPU local timer는 32-bit free-running down-counter이고 counter가 만료되면 interrupt를 생성합니다. System의 CPU마다 MCT 안에 local timer 하나가 구현됩니다. Maintainer는 Krzysztof Kozlowski입니다.

Compatible·clock과 processor 공유 속성

20-66

Exynos4210과 Exynos4412는 각각 `samsung,exynos4210-mct`, `samsung,exynos4412-mct`를 단독 사용합니다. Axis ARTPEC-8·9, Google GS101, Exynos2200 PERIS, Exynos3250·5250·5260·5420·5433·850·8895·990, Tesla FSD는 SoC별 compatible 뒤에 `samsung,exynos4210-mct` fallback을 둡니다.

`clocks`는 최대 두 항목이며 clock 이름과 순서는 `fin_pll`, `mct`입니다. `reg`는 최대 한 영역입니다. Boolean `samsung,frc-shared`는 이 processor가 다른 main processor와 free-running counter를 공유해야 하는 hardware임을 나타냅니다. `samsung,local-timers`는 이 processor가 사용할 수 있는 local timer index 목록이며 1~16개를 허용합니다.

properties:
  compatible:
    oneOf:
      - enum:
          - samsung,exynos4210-mct
          - samsung,exynos4412-mct
      - items:
          - enum:
              - axis,artpec8-mct
              - axis,artpec9-mct
              - google,gs101-mct
              - samsung,exynos2200-mct-peris
              - samsung,exynos3250-mct
              - samsung,exynos5250-mct
              - samsung,exynos5260-mct
              - samsung,exynos5420-mct
              - samsung,exynos5433-mct
              - samsung,exynos850-mct
              - samsung,exynos8895-mct
              - samsung,exynos990-mct
              - tesla,fsd-mct
          - const: samsung,exynos4210-mct

  clocks:
    maxItems: 2

  clock-names:
    items:
      - const: fin_pll
      - const: mct

  reg:
    maxItems: 1

  samsung,frc-shared:
    type: boolean
    description: |
      Indicates that the hardware requires that this processor share the
      free-running counter with a different (main) processor.

  samsung,local-timers:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 1
    maxItems: 16
    description: |
      List of indices of local timers usable from this processor.

Global 네 개 뒤의 local interrupt

67-94

`interrupts`는 반드시 정해진 순서를 사용합니다. Index 0~3은 Global Timer Interrupt 0~3이고 그 뒤 index 4부터 Local Timer Interrupt 0~n을 둡니다. Exynos4412처럼 local timer에 per-processor interrupt를 사용하는 MCT는 local interrupt 하나만 지정할 수 있으며, 이 경우 모든 local timer가 같은 processor별 interrupt를 사용합니다. 전체 항목 수는 최소 5개, 최대 20개로 global 네 개와 local 1~16개를 합한 값입니다. `compatible`, `clock-names`, `clocks`, `interrupts`, `reg`가 필수입니다.

  interrupts:
    description: |
      Interrupts should be put in specific order. This is, the local timer
      interrupts should be specified after the four global timer interrupts
      have been specified:
      0: Global Timer Interrupt 0
      1: Global Timer Interrupt 1
      2: Global Timer Interrupt 2
      3: Global Timer Interrupt 3
      4: Local Timer Interrupt 0
      5: Local Timer Interrupt 1
      6: ..
      7: ..
      i: Local Timer Interrupt n
      For MCT block that uses a per-processor interrupt for local timers, such
      as ones compatible with "samsung,exynos4412-mct", only one local timer
      interrupt might be specified, meaning that all local timers use the same
      per processor interrupt.
    minItems: 5               # 4 Global + 1 local
    maxItems: 20              # 4 Global + 16 local

required:
  - compatible
  - clock-names
  - clocks
  - interrupts
  - reg

ARTPEC-8 전용 processor 속성

95-107

Compatible에 `axis,artpec8-mct`가 포함되지 않으면 `samsung,local-timers`와 `samsung,frc-shared`는 허용되지 않습니다. 따라서 processor별 local timer 선택과 free-running counter 공유 표시는 ARTPEC-8 MCT에서만 사용할 수 있습니다.

allOf:
  - if:
      not:
        properties:
          compatible:
            contains:
              enum:
                - axis,artpec8-mct
    then:
      properties:
        samsung,local-timers: false
        samsung,frc-shared: false
  - if:

Exynos3250·5250 interrupt 수

108-128

`samsung,exynos3250-mct`는 interrupt를 정확히 8개 사용하여 global 네 개와 local 네 개를 지정합니다. `samsung,exynos5250-mct`는 정확히 6개를 사용하여 global 네 개와 local 두 개를 지정합니다.

    properties:
      compatible:
        contains:
          const: samsung,exynos3250-mct
  then:
    properties:
      interrupts:
        minItems: 8
        maxItems: 8

- if:
    properties:
      compatible:
        contains:
          const: samsung,exynos5250-mct
  then:
    properties:
      interrupts:
        minItems: 6
        maxItems: 6

12개·16개 interrupt variant

129-163

ARTPEC-8·9, Google GS101, Exynos2200 PERIS, Exynos5260·5420·5433·850·8895·990 compatible은 interrupt를 정확히 12개 사용하여 global 네 개와 local 여덟 개를 지정합니다. Tesla FSD는 정확히 16개를 사용하여 global 네 개와 local 열두 개를 지정합니다. 추가 속성은 허용되지 않습니다.

  - if:
      properties:
        compatible:
          contains:
            enum:
              - axis,artpec8-mct
              - axis,artpec9-mct
              - google,gs101-mct
              - samsung,exynos2200-mct-peris
              - samsung,exynos5260-mct
              - samsung,exynos5420-mct
              - samsung,exynos5433-mct
              - samsung,exynos850-mct
              - samsung,exynos8895-mct
              - samsung,exynos990-mct
    then:
      properties:
        interrupts:
          minItems: 12
          maxItems: 12

  - if:
      properties:
        compatible:
          contains:
            enum:
              - tesla,fsd-mct
    then:
      properties:
        interrupts:
          minItems: 16
          maxItems: 16

additionalProperties: false

별도 local interrupt 두 개

164-185

첫 예제의 Exynos4210 MCT는 local timer 두 개가 각각 별도 interrupt를 사용합니다. `timer@10050000`에 0x800-byte register 영역과 `CLK_FIN_PLL`, `CLK_MCT` clock을 지정하고, GIC SPI 57·69·70·71의 global interrupt 네 개 뒤에 GIC SPI 42·48의 local interrupt 두 개를 둡니다. 모두 level-high입니다.

examples:
  - |
    // In this example, the IP contains two local timers, using separate
    // interrupts, so two local timer interrupts have been specified,
    // in addition to four global timer interrupts.
    #include <dt-bindings/clock/exynos4.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    timer@10050000 {
        compatible = "samsung,exynos4210-mct";
        reg = <0x10050000 0x800>;
        clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
        clock-names = "fin_pll", "mct";

        interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
    };

두 interrupt controller 예제

186-205

둘째 Exynos4210 예제는 timer interrupt가 GIC와 interrupt combiner 두 controller에 연결되므로 `interrupts-extended`를 사용합니다. Global interrupt 네 개 중 앞의 두 개는 GIC SPI 57·69, 뒤의 두 개는 combiner 12의 input 6·7이며 local interrupt는 GIC SPI 42·48입니다.

- |
  // In this example, the timer interrupts are connected to two separate
  // interrupt controllers. Hence, an interrupts-extended is needed.
  #include <dt-bindings/clock/exynos4.h>
  #include <dt-bindings/interrupt-controller/arm-gic.h>

  timer@101c0000 {
      compatible = "samsung,exynos4210-mct";
      reg = <0x101C0000 0x800>;
      clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
      clock-names = "fin_pll", "mct";

      interrupts-extended = <&gic GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
                            <&gic GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
                            <&combiner 12 6>,
                            <&combiner 12 7>,
                            <&gic GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
                            <&gic GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
  };

Local PPI 하나만 지정한 예제

206-225

셋째 예제의 Exynos4412 MCT는 local timer 네 개가 하나의 per-processor interrupt를 공유합니다. Global GIC SPI 57·69·70·71 네 개 뒤에 첫 local interrupt인 GIC PPI 42 하나만 지정합니다.

- |
  // In this example, the IP contains four local timers, but using
  // a per-processor interrupt to handle them. Only one first local
  // interrupt is specified.
  #include <dt-bindings/clock/exynos4.h>
  #include <dt-bindings/interrupt-controller/arm-gic.h>

  timer@10050000 {
      compatible = "samsung,exynos4412-mct";
      reg = <0x10050000 0x800>;
      clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
      clock-names = "fin_pll", "mct";

      interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>;
  };

Local PPI 네 개를 모두 지정한 예제

226-247

넷째 Exynos4412 예제도 local timer 네 개가 per-processor interrupt를 사용하지만 모든 local interrupt를 명시합니다. Global GIC SPI 네 개 뒤에 같은 GIC PPI 42를 네 번 지정하여 local timer 네 개에 각각 대응시킵니다.

- |
  // In this example, the IP contains four local timers, but using
  // a per-processor interrupt to handle them. All the local timer
  // interrupts are specified.
  #include <dt-bindings/clock/exynos4.h>
  #include <dt-bindings/interrupt-controller/arm-gic.h>

  timer@10050000 {
      compatible = "samsung,exynos4412-mct";
      reg = <0x10050000 0x800>;
      clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MCT>;
      clock-names = "fin_pll", "mct";

      interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_PPI 42 IRQ_TYPE_LEVEL_HIGH>;
  };