← Documents Documentation/devicetree/bindings/watchdog/qcom-wdt.yaml GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings / Watchdog

Qualcomm KPSS Watchdog Timer

Qualcomm APSS·KPSS 워치독의 호환 계열, per-CPU offset과 interrupt 조건을 설명합니다.

Source pathDocumentation/devicetree/bindings/watchdog/qcom-wdt.yaml
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

요약과 해설

qcom-wdt.yaml:1-149

Qualcomm APSS·KPSS 워치독의 호환 계열, per-CPU offset과 interrupt 조건을 설명합니다. 접을 수 있는 영어 원문 전체와 한국어 전문 번역을 함께 제공하며, compatible, register, clock, interrupt, reset, timeout, 예제와 원문 줄 좌표를 원형대로 보존합니다.

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/watchdog/qcom-wdt.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Qualcomm Krait Processor Sub-system (KPSS) Watchdog timer
8
9 maintainers:
10 - Rajendra Nayak <quic_rjendra@quicinc.com>
11
12 properties:
13 $nodename:
14 pattern: "^(watchdog|timer)@[0-9a-f]+$"
15
16 compatible:
17 oneOf:
18 - items:
19 - enum:
20 - qcom,kpss-wdt-ipq4019
21 - qcom,apss-wdt-ipq5018
22 - qcom,apss-wdt-ipq5332
23 - qcom,apss-wdt-ipq5424
24 - qcom,apss-wdt-ipq9574
25 - qcom,apss-wdt-msm8226
26 - qcom,apss-wdt-msm8974
27 - qcom,apss-wdt-msm8994
28 - qcom,apss-wdt-qcm2290
29 - qcom,apss-wdt-qcs404
30 - qcom,apss-wdt-qcs615
31 - qcom,apss-wdt-qcs8300
32 - qcom,apss-wdt-sa8255p
33 - qcom,apss-wdt-sa8775p
34 - qcom,apss-wdt-sc7180
35 - qcom,apss-wdt-sc7280
36 - qcom,apss-wdt-sc8180x
37 - qcom,apss-wdt-sc8280xp
38 - qcom,apss-wdt-sdm845
39 - qcom,apss-wdt-sdx55
40 - qcom,apss-wdt-sdx65
41 - qcom,apss-wdt-sm6115
42 - qcom,apss-wdt-sm6350
43 - qcom,apss-wdt-sm8150
44 - qcom,apss-wdt-sm8250
45 - const: qcom,kpss-wdt
46 - const: qcom,kpss-wdt
47 deprecated: true
48 - items:
49 - const: qcom,scss-timer
50 - const: qcom,msm-timer
51 - items:
52 - enum:
53 - qcom,kpss-wdt-apq8064
54 - qcom,kpss-wdt-ipq8064
55 - qcom,kpss-wdt-mdm9615
56 - qcom,kpss-wdt-msm8960
57 - const: qcom,kpss-timer
58 - const: qcom,msm-timer
59
60 reg:
61 maxItems: 1
62
63 clocks:
64 maxItems: 1
65
66 clock-names:
67 items:
68 - const: sleep
69
70 clock-frequency:
71 description:
72 The frequency of the general purpose timer in Hz.
73
74 cpu-offset:
75 $ref: /schemas/types.yaml#/definitions/uint32
76 description:
77 Per-CPU offset used when the timer is accessed without the CPU remapping
78 facilities. The offset is cpu-offset + (0x10000 * cpu-nr).
79
80 interrupts:
81 minItems: 1
82 maxItems: 5
83
84 required:
85 - compatible
86 - reg
87 - clocks
88
89 allOf:
90 - $ref: watchdog.yaml#
91
92 - if:
93 properties:
94 compatible:
95 contains:
96 const: qcom,kpss-wdt
97 then:
98 properties:
99 clock-frequency: false
100 cpu-offset: false
101 interrupts:
102 minItems: 1
103 items:
104 - description: Bark
105 - description: Bite
106
107 else:
108 properties:
109 interrupts:
110 minItems: 3
111 items:
112 - description: Debug
113 - description: First general purpose timer
114 - description: Second general purpose timer
115 - description: First watchdog
116 - description: Second watchdog
117 required:
118 - clock-frequency
119
120 unevaluatedProperties: false
121
122 examples:
123 - |
124 #include <dt-bindings/interrupt-controller/arm-gic.h>
125
126 watchdog@17c10000 {
127 compatible = "qcom,apss-wdt-sm8150", "qcom,kpss-wdt";
128 reg = <0x17c10000 0x1000>;
129 clocks = <&sleep_clk>;
130 interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>;
131 timeout-sec = <10>;
132 };
133
134 - |
135 #include <dt-bindings/interrupt-controller/arm-gic.h>
136
137 watchdog@200a000 {
138 compatible = "qcom,kpss-wdt-ipq8064", "qcom,kpss-timer", "qcom,msm-timer";
139 interrupts = <GIC_PPI 1 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>,
140 <GIC_PPI 2 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>,
141 <GIC_PPI 3 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>,
142 <GIC_PPI 4 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>,
143 <GIC_PPI 5 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>;
144 reg = <0x0200a000 0x100>;
145 clock-frequency = <25000000>;
146 clocks = <&sleep_clk>;
147 clock-names = "sleep";
148 cpu-offset = <0x80000>;
149 };
150

3. 한국어 전문 번역

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

Qualcomm KPSS 워치독

1-11

GPL-2.0-only 또는 BSD-2-Clause로 배포되는 이 스키마는 Qualcomm Krait Processor Sub-system(KPSS) Watchdog Timer를 정의합니다. 관리자는 Rajendra Nayak입니다.

노드 이름과 APSS·KPSS 호환 계열

12-59

노드 이름은 `watchdog@주소` 또는 `timer@주소` 형식이어야 합니다. 현대 계열은 SoC별 문자열 뒤에 `qcom,kpss-wdt`를 fallback으로 둡니다.

SoC별 문자열에는 `qcom,kpss-wdt-ipq4019`와 IPQ5018·IPQ5332·IPQ5424·IPQ9574, MSM8226·MSM8974·MSM8994, QCM2290, QCS404·QCS615·QCS8300, SA8255P·SA8775P, SC7180·SC7280·SC8180X·SC8280XP, SDM845, SDX55·SDX65, SM6115·SM6350·SM8150·SM8250의 `qcom,apss-wdt-*` 문자열이 포함됩니다.

단독 `qcom,kpss-wdt`는 deprecated입니다. SCSS timer는 `qcom,scss-timer`와 `qcom,msm-timer`를 함께 사용합니다. APQ8064, IPQ8064, MDM9615, MSM8960용 legacy KPSS는 SoC별 `qcom,kpss-wdt-*` 뒤에 `qcom,kpss-timer`, `qcom,msm-timer`를 차례로 나열합니다.

properties:
  $nodename:
    pattern: "^(watchdog|timer)@[0-9a-f]+$"

  compatible:
    oneOf:
      - items:
          - enum:
              - qcom,kpss-wdt-ipq4019
              - qcom,apss-wdt-ipq5018
              - qcom,apss-wdt-ipq5332
              - qcom,apss-wdt-ipq5424
              - qcom,apss-wdt-ipq9574
              - qcom,apss-wdt-msm8226
              - qcom,apss-wdt-msm8974
              - qcom,apss-wdt-msm8994
              - qcom,apss-wdt-qcm2290
              - qcom,apss-wdt-qcs404
              - qcom,apss-wdt-qcs615
              - qcom,apss-wdt-qcs8300
              - qcom,apss-wdt-sa8255p
              - qcom,apss-wdt-sa8775p
              - qcom,apss-wdt-sc7180
              - qcom,apss-wdt-sc7280
              - qcom,apss-wdt-sc8180x
              - qcom,apss-wdt-sc8280xp
              - qcom,apss-wdt-sdm845
              - qcom,apss-wdt-sdx55
              - qcom,apss-wdt-sdx65
              - qcom,apss-wdt-sm6115
              - qcom,apss-wdt-sm6350
              - qcom,apss-wdt-sm8150
              - qcom,apss-wdt-sm8250
          - const: qcom,kpss-wdt
      - const: qcom,kpss-wdt
        deprecated: true
      - items:
          - const: qcom,scss-timer
          - const: qcom,msm-timer
      - items:
          - enum:
              - qcom,kpss-wdt-apq8064
              - qcom,kpss-wdt-ipq8064
              - qcom,kpss-wdt-mdm9615
              - qcom,kpss-wdt-msm8960
          - const: qcom,kpss-timer
          - const: qcom,msm-timer

클록·CPU offset·interrupt 수

60-88

`reg`와 `clocks`는 각각 항목 하나만 받습니다. `clock-names`의 이름은 `sleep`이고, `clock-frequency`는 general purpose timer 주파수를 Hz 단위로 지정합니다.

`cpu-offset`은 CPU remapping 기능 없이 timer에 접근할 때 쓰는 per-CPU offset입니다. 실제 offset은 `cpu-offset + (0x10000 * cpu-nr)`로 계산합니다. `interrupts`는 최소 1개, 최대 5개입니다.

`compatible`, `reg`, `clocks`가 필수입니다.

  reg:
    maxItems: 1

  clocks:
    maxItems: 1

  clock-names:
    items:
      - const: sleep

  clock-frequency:
    description:
      The frequency of the general purpose timer in Hz.

  cpu-offset:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      Per-CPU offset used when the timer is accessed without the CPU remapping
      facilities. The offset is cpu-offset + (0x10000 * cpu-nr).

  interrupts:
    minItems: 1
    maxItems: 5

required:
  - compatible
  - reg
  - clocks

KPSS Bark·Bite와 legacy timer 조건

89-121

공통 `watchdog.yaml`을 상속합니다. `compatible` 목록에 `qcom,kpss-wdt`가 있으면 `clock-frequency`와 `cpu-offset`을 사용할 수 없습니다. 이 경우 interrupt는 Bark와 Bite 순서이며 최소 한 항목을 제공합니다.

그 밖의 legacy timer 형식은 interrupt가 최소 3개 필요하고, 순서는 Debug, 첫 번째 general purpose timer, 두 번째 general purpose timer, 첫 번째 watchdog, 두 번째 watchdog입니다. 이 형식에서는 `clock-frequency`가 필수입니다. 평가되지 않은 속성은 허용하지 않습니다.

allOf:
  - $ref: watchdog.yaml#

  - if:
      properties:
        compatible:
          contains:
            const: qcom,kpss-wdt
    then:
      properties:
        clock-frequency: false
        cpu-offset: false
        interrupts:
          minItems: 1
          items:
            - description: Bark
            - description: Bite

    else:
      properties:
        interrupts:
          minItems: 3
          items:
            - description: Debug
            - description: First general purpose timer
            - description: Second general purpose timer
            - description: First watchdog
            - description: Second watchdog
      required:
        - clock-frequency

unevaluatedProperties: false

SM8150 APSS 예제

122-133

첫 번째 예제는 SM8150 APSS 워치독에 `qcom,kpss-wdt` fallback을 지정하고 주소 `0x17c10000`, sleep clock, rising-edge GIC SPI 0, timeout 10초를 설정합니다.

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    watchdog@17c10000 {
        compatible = "qcom,apss-wdt-sm8150", "qcom,kpss-wdt";
        reg = <0x17c10000 0x1000>;
        clocks = <&sleep_clk>;
        interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>;
        timeout-sec = <10>;
    };

IPQ8064 legacy timer 예제

134-149

두 번째 예제는 IPQ8064 legacy KPSS timer에 다섯 GIC PPI를 순서대로 연결합니다. register는 `0x0200a000`, timer 주파수는 25MHz, clock 이름은 `sleep`, per-CPU offset은 `0x80000`입니다.

- |
  #include <dt-bindings/interrupt-controller/arm-gic.h>

  watchdog@200a000 {
      compatible = "qcom,kpss-wdt-ipq8064", "qcom,kpss-timer", "qcom,msm-timer";
      interrupts = <GIC_PPI 1 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>,
                   <GIC_PPI 2 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>,
                   <GIC_PPI 3 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>,
                   <GIC_PPI 4 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>,
                   <GIC_PPI 5 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>;
      reg = <0x0200a000 0x100>;
      clock-frequency = <25000000>;
      clocks = <&sleep_clk>;
      clock-names = "sleep";
      cpu-offset = <0x80000>;
  };