← Documents Documentation/devicetree/bindings/timer/nvidia,tegra-timer.yaml GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings / Timer

NVIDIA Tegra Timer

Tegra20·30·210 timer의 counter·watchdog·interrupt 차이를 설명합니다.

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

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

1. 요약·해설

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

요약과 해설

nvidia,tegra-timer.yaml:1-150

Tegra20·30·210 timer의 counter·watchdog·interrupt 차이를 설명합니다. 접을 수 있는 영어 원문 전체와 한국어 전문 번역을 함께 제공하며 compatible, interrupt, clock, register, phandle, 수치와 줄 좌표를 원형대로 보존합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 # SPDX-License-Identifier: GPL-2.0-only
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/timer/nvidia,tegra-timer.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: NVIDIA Tegra timer
8
9 maintainers:
10 - Stephen Warren <swarren@nvidia.com>
11
12 allOf:
13 - if:
14 properties:
15 compatible:
16 contains:
17 const: nvidia,tegra210-timer
18 then:
19 properties:
20 interrupts:
21 # Either a single combined interrupt or up to 14 individual interrupts
22 minItems: 1
23 maxItems: 14
24 description: >
25 A list of 14 interrupts; one per each timer channels 0 through 13
26
27 - if:
28 properties:
29 compatible:
30 oneOf:
31 - items:
32 - enum:
33 - nvidia,tegra114-timer
34 - nvidia,tegra124-timer
35 - nvidia,tegra132-timer
36 - const: nvidia,tegra30-timer
37 - items:
38 - const: nvidia,tegra30-timer
39 - const: nvidia,tegra20-timer
40 then:
41 properties:
42 interrupts:
43 # Either a single combined interrupt or up to 6 individual interrupts
44 minItems: 1
45 maxItems: 6
46 description: >
47 A list of 6 interrupts; one per each of timer channels 1 through 5,
48 and one for the shared interrupt for the remaining channels.
49
50 - if:
51 properties:
52 compatible:
53 const: nvidia,tegra20-timer
54 then:
55 properties:
56 interrupts:
57 # Either a single combined interrupt or up to 4 individual interrupts
58 minItems: 1
59 maxItems: 4
60 description: |
61 A list of 4 interrupts; one per timer channel.
62
63 properties:
64 compatible:
65 oneOf:
66 - const: nvidia,tegra210-timer
67 description: >
68 The Tegra210 timer provides fourteen 29-bit timer counters and one 32-bit
69 timestamp counter. The TMRs run at either a fixed 1 MHz clock rate derived
70 from the oscillator clock (TMR0-TMR9) or directly at the oscillator clock
71 (TMR10-TMR13). Each TMR can be programmed to generate one-shot, periodic,
72 or watchdog interrupts.
73 - items:
74 - enum:
75 - nvidia,tegra114-timer
76 - nvidia,tegra124-timer
77 - nvidia,tegra132-timer
78 - const: nvidia,tegra30-timer
79 - items:
80 - const: nvidia,tegra30-timer
81 - const: nvidia,tegra20-timer
82 description: >
83 The Tegra30 timer provides ten 29-bit timer channels, a single 32-bit free
84 running counter, and 5 watchdog modules. The first two channels may also
85 trigger a legacy watchdog reset.
86 - const: nvidia,tegra20-timer
87 description: >
88 The Tegra20 timer provides four 29-bit timer channels and a single 32-bit free
89 running counter. The first two channels may also trigger a watchdog reset.
90
91 reg:
92 maxItems: 1
93
94 interrupts: true
95
96 clocks:
97 maxItems: 1
98
99 clock-names:
100 items:
101 - const: timer
102
103
104 required:
105 - compatible
106 - reg
107 - interrupts
108 - clocks
109
110 additionalProperties: false
111
112 examples:
113 - |
114 #include <dt-bindings/interrupt-controller/irq.h>
115 timer@60005000 {
116 compatible = "nvidia,tegra30-timer", "nvidia,tegra20-timer";
117 reg = <0x60005000 0x400>;
118 interrupts = <0 0 IRQ_TYPE_LEVEL_HIGH>,
119 <0 1 IRQ_TYPE_LEVEL_HIGH>,
120 <0 41 IRQ_TYPE_LEVEL_HIGH>,
121 <0 42 IRQ_TYPE_LEVEL_HIGH>,
122 <0 121 IRQ_TYPE_LEVEL_HIGH>,
123 <0 122 IRQ_TYPE_LEVEL_HIGH>;
124 clocks = <&tegra_car 214>;
125 };
126 - |
127 #include <dt-bindings/clock/tegra210-car.h>
128 #include <dt-bindings/interrupt-controller/arm-gic.h>
129 #include <dt-bindings/interrupt-controller/irq.h>
130
131 timer@60005000 {
132 compatible = "nvidia,tegra210-timer";
133 reg = <0x60005000 0x400>;
134 interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>,
135 <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
136 <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
137 <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
138 <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
139 <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
140 <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>,
141 <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>,
142 <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>,
143 <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>,
144 <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>,
145 <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>,
146 <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>,
147 <GIC_SPI 179 IRQ_TYPE_LEVEL_HIGH>;
148 clocks = <&tegra_car TEGRA210_CLK_TIMER>;
149 clock-names = "timer";
150 };
151

3. 한국어 전문 번역

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

Legacy NVIDIA Tegra timer

1-11

GPL-2.0-only 라이선스의 이 스키마는 NVIDIA Tegra20·30·114·124·132·210 timer를 정의합니다. Maintainer는 Stephen Warren입니다.

Tegra210의 14 interrupt

12-26

Tegra210은 combined interrupt 하나 또는 channel 0~13마다 하나씩 최대 14개 individual interrupt를 사용할 수 있습니다.

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: nvidia,tegra210-timer
    then:
      properties:
        interrupts:
          # Either a single combined interrupt or up to 14 individual interrupts
          minItems: 1
          maxItems: 14
          description: >
            A list of 14 interrupts; one per each timer channels 0 through 13

Tegra30 계열의 6 interrupt

27-49

Tegra114·124·132는 Tegra30 fallback을 사용하고 Tegra30은 Tegra20 fallback을 사용합니다. 이 계열은 combined interrupt 하나 또는 최대 6개 individual interrupt를 사용합니다. 여섯 항목은 timer channel 1~5 각각의 interrupt와 나머지 channel이 공유하는 interrupt 하나입니다.

- if:
    properties:
      compatible:
        oneOf:
          - items:
              - enum:
                  - nvidia,tegra114-timer
                  - nvidia,tegra124-timer
                  - nvidia,tegra132-timer
              - const: nvidia,tegra30-timer
          - items:
              - const: nvidia,tegra30-timer
              - const: nvidia,tegra20-timer
  then:
    properties:
      interrupts:
        # Either a single combined interrupt or up to 6 individual interrupts
        minItems: 1
        maxItems: 6
        description: >
          A list of 6 interrupts; one per each of timer channels 1 through 5,
          and one for the shared interrupt for the remaining channels.

Tegra20의 4 interrupt

50-62

Tegra20은 combined interrupt 하나 또는 네 timer channel 각각에 대한 최대 4개 individual interrupt를 사용할 수 있습니다.

- if:
    properties:
      compatible:
        const: nvidia,tegra20-timer
  then:
    properties:
      interrupts:
        # Either a single combined interrupt or up to 4 individual interrupts
        minItems: 1
        maxItems: 4
        description: |
          A list of 4 interrupts; one per timer channel.

Counter·watchdog와 timer clock

63-111

Tegra210은 29-bit timer counter 14개와 32-bit timestamp counter 하나를 제공합니다. TMR0~TMR9는 oscillator에서 유도한 고정 1 MHz로, TMR10~TMR13은 oscillator clock으로 직접 동작하며 one-shot, periodic, watchdog interrupt를 지원합니다. Tegra30은 29-bit channel 10개, 32-bit free-running counter 하나, watchdog module 5개를 제공하고 첫 두 channel은 legacy watchdog reset도 trigger할 수 있습니다. Tegra20은 29-bit channel 4개와 32-bit free-running counter 하나를 제공하며 첫 두 channel이 watchdog reset을 trigger할 수 있습니다. `reg`와 `clocks`는 각각 최대 한 항목이고 선택적인 `clock-names` 값은 `timer`입니다. `compatible`, `reg`, `interrupts`, `clocks`가 필수이며 추가 속성은 허용되지 않습니다.

properties:
  compatible:
    oneOf:
      - const: nvidia,tegra210-timer
        description: >
          The Tegra210 timer provides fourteen 29-bit timer counters and one 32-bit
          timestamp counter. The TMRs run at either a fixed 1 MHz clock rate derived
          from the oscillator clock (TMR0-TMR9) or directly at the oscillator clock
          (TMR10-TMR13). Each TMR can be programmed to generate one-shot, periodic,
          or watchdog interrupts.
      - items:
          - enum:
              - nvidia,tegra114-timer
              - nvidia,tegra124-timer
              - nvidia,tegra132-timer
          - const: nvidia,tegra30-timer
      - items:
          - const: nvidia,tegra30-timer
          - const: nvidia,tegra20-timer
        description: >
          The Tegra30 timer provides ten 29-bit timer channels, a single 32-bit free
          running counter, and 5 watchdog modules. The first two channels may also
          trigger a legacy watchdog reset.
      - const: nvidia,tegra20-timer
        description: >
          The Tegra20 timer provides four 29-bit timer channels and a single 32-bit free
          running counter. The first two channels may also trigger a watchdog reset.

  reg:
    maxItems: 1

  interrupts: true

  clocks:
    maxItems: 1

  clock-names:
    items:
      - const: timer


required:
  - compatible
  - reg
  - interrupts
  - clocks

additionalProperties: false

Tegra30 fallback 예제

112-125

첫 예제는 `timer@60005000`에 Tegra30 compatible과 Tegra20 fallback, 0x400-byte register 영역, 여섯 level-high interrupt, `tegra_car` clock index 214를 지정합니다.

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    timer@60005000 {
        compatible = "nvidia,tegra30-timer", "nvidia,tegra20-timer";
        reg = <0x60005000 0x400>;
        interrupts = <0 0 IRQ_TYPE_LEVEL_HIGH>,
                     <0 1 IRQ_TYPE_LEVEL_HIGH>,
                     <0 41 IRQ_TYPE_LEVEL_HIGH>,
                     <0 42 IRQ_TYPE_LEVEL_HIGH>,
                     <0 121 IRQ_TYPE_LEVEL_HIGH>,
                     <0 122 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&tegra_car 214>;
    };

Tegra210 14-channel 예제

126-150

둘째 예제는 같은 0x400-byte 영역에 Tegra210 compatible을 사용하고 GIC SPI 156, 0, 1, 41, 42, 121, 152~155, 176~179의 14개 level-high interrupt를 지정합니다. `TEGRA210_CLK_TIMER`를 연결하고 이름을 `timer`로 설정합니다.

- |
  #include <dt-bindings/clock/tegra210-car.h>
  #include <dt-bindings/interrupt-controller/arm-gic.h>
  #include <dt-bindings/interrupt-controller/irq.h>

  timer@60005000 {
      compatible = "nvidia,tegra210-timer";
      reg = <0x60005000 0x400>;
      interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 179 IRQ_TYPE_LEVEL_HIGH>;
      clocks = <&tegra_car TEGRA210_CLK_TIMER>;
      clock-names = "timer";
  };