요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/timer/samsung,exynos4210-mct.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Samsung Exynos SoC Multi Core Timer (MCT)
maintainers:
- Krzysztof Kozlowski <krzk@kernel.org>
description: |+
The Samsung's Multi Core Timer (MCT) module includes two main blocks, the
global timer and CPU local timers. The global timer is a 64-bit free running
up-counter and can generate 4 interrupts when the counter reaches one of the
four preset counter values. The CPU local timers are 32-bit free running
down-counters and generate an interrupt when the counter expires. There is
one CPU local timer instantiated in MCT for every CPU in the system.
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.
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
allOf:
- if:
not:
properties:
compatible:
contains:
enum:
- axis,artpec8-mct
then:
properties:
samsung,local-timers: false
samsung,frc-shared: false
- if:
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
- 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
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>;
};
- |
// 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>;
};
- |
// 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>;
};
- |
// 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>;
};
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
Samsung Exynos Multi Core Timer
1-19GPL-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-66Exynos4210과 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-107Compatible에 `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-163ARTPEC-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>;
};
요약과 해설
samsung,exynos4210-mct.yaml:1-247Samsung Exynos MCT의 global·local timer와 SoC별 interrupt 수를 설명합니다. 접을 수 있는 영어 원문 전체와 한국어 전문 번역을 함께 제공하며 compatible, interrupt, clock, register, phandle, 수치와 줄 좌표를 원형대로 보존합니다.