요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/thermal/nvidia,tegra124-soctherm.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: NVIDIA Tegra124 SOCTHERM Thermal Management System
maintainers:
- Thierry Reding <thierry.reding@gmail.com>
- Jon Hunter <jonathanh@nvidia.com>
description: The SOCTHERM IP block contains thermal sensors, support for
polled or interrupt-based thermal monitoring, CPU and GPU throttling based
on temperature trip points, and handling external overcurrent notifications.
It is also used to manage emergency shutdown in an overheating situation.
properties:
compatible:
enum:
- nvidia,tegra114-soctherm
- nvidia,tegra124-soctherm
- nvidia,tegra132-soctherm
- nvidia,tegra210-soctherm
- nvidia,tegra210b01-soctherm
reg:
maxItems: 2
reg-names:
maxItems: 2
interrupts:
items:
- description: module interrupt
- description: EDP interrupt
interrupt-names:
items:
- const: thermal
- const: edp
clocks:
items:
- description: thermal sensor clock
- description: module clock
clock-names:
items:
- const: tsensor
- const: soctherm
resets:
items:
- description: module reset
reset-names:
items:
- const: soctherm
"#thermal-sensor-cells":
const: 1
throttle-cfgs:
$ref: thermal-cooling-devices.yaml
description: A sub-node which is a container of configuration for each
hardware throttle events. These events can be set as cooling devices.
Throttle event sub-nodes must be named as "light" or "heavy".
unevaluatedProperties: false
patternProperties:
"^(light|heavy|oc1)$":
type: object
additionalProperties: false
properties:
"#cooling-cells":
const: 2
nvidia,priority:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 1
maximum: 100
description: Each throttles has its own throttle settings, so the
SW need to set priorities for various throttle, the HW arbiter
can select the final throttle settings. Bigger value indicates
higher priority, In general, higher priority translates to lower
target frequency. SW needs to ensure that critical thermal
alarms are given higher priority, and ensure that there is no
race if priority of two vectors is set to the same value.
nvidia,cpu-throt-percent:
description: This property is for Tegra124 and Tegra210. It is the
throttling depth of pulse skippers, it's the percentage
throttling.
minimum: 0
maximum: 100
nvidia,cpu-throt-level:
$ref: /schemas/types.yaml#/definitions/uint32
description: This property is only for Tegra132, it is the level
of pulse skippers, which used to throttle clock frequencies. It
indicates cpu clock throttling depth, and the depth can be
programmed.
enum:
# none (TEGRA_SOCTHERM_THROT_LEVEL_NONE)
- 0
# low (TEGRA_SOCTHERM_THROT_LEVEL_LOW)
- 1
# medium (TEGRA_SOCTHERM_THROT_LEVEL_MED)
- 2
# high (TEGRA_SOCTHERM_THROT_LEVEL_HIGH)
- 3
nvidia,gpu-throt-level:
$ref: /schemas/types.yaml#/definitions/uint32
description: This property is for Tegra124 and Tegra210. It is the
level of pulse skippers, which used to throttle clock
frequencies. It indicates gpu clock throttling depth and can be
programmed to any of the following values which represent a
throttling percentage.
enum:
# none (0%, TEGRA_SOCTHERM_THROT_LEVEL_NONE)
- 0
# low (50%, TEGRA_SOCTHERM_THROT_LEVEL_LOW)
- 1
# medium (75%, TEGRA_SOCTHERM_THROT_LEVEL_MED)
- 2
# high (85%, TEGRA_SOCTHERM_THROT_LEVEL_HIGH)
- 3
# optional
# Tegra210 specific and valid only for OCx throttle events
nvidia,count-threshold:
$ref: /schemas/types.yaml#/definitions/uint32
description: Specifies the number of OC events that are required
for triggering an interrupt. Interrupts are not triggered if the
property is missing. A value of 0 will interrupt on every OC
alarm.
nvidia,polarity-active-low:
$ref: /schemas/types.yaml#/definitions/flag
description: Configures the polarity of the OC alaram signal. If
present, this means assert low, otherwise assert high.
nvidia,alarm-filter:
$ref: /schemas/types.yaml#/definitions/uint32
description: Number of clocks to filter event. When the filter
expires (which means the OC event has not occurred for a long
time), the counter is cleared and filter is rearmed.
default: 0
nvidia,throttle-period-us:
description: Specifies the number of microseconds for which
throttling is engaged after the OC event is deasserted.
default: 0
# optional
nvidia,thermtrips:
$ref: /schemas/types.yaml#/definitions/uint32-matrix
description: |
When present, this property specifies the temperature at which the
SOCTHERM hardware will assert the thermal trigger signal to the Power
Management IC, which can be configured to reset or shutdown the device.
It is an array of pairs where each pair represents a tsensor ID followed
by a temperature in milli Celcius. In the absence of this property the
critical trip point will be used for thermtrip temperature.
Note:
- the "critical" type trip points will be used to set the temperature at
which the SOCTHERM hardware will assert a thermal trigger if the
"nvidia,thermtrips" property is missing. When the thermtrips property
is present, the breach of a critical trip point is reported back to
the thermal framework to implement software shutdown.
- the "hot" type trip points will be set to SOCTHERM hardware as the
throttle temperature. Once the temperature of this thermal zone is
higher than it, it will trigger the HW throttle event.
items:
items:
- description: sensor ID
oneOf:
- description: CPU sensor
const: 0
- description: MEM sensor
const: 1
- description: GPU sensor
const: 2
- description: PLLX sensor
const: 3
- description: temperature threshold (in millidegree Celsius)
required:
- compatible
- reg
- reg-names
- interrupts
- interrupt-names
- clocks
- clock-names
- resets
- reset-names
allOf:
- $ref: thermal-sensor.yaml
- if:
properties:
compatible:
contains:
enum:
- nvidia,tegra114-soctherm
- nvidia,tegra124-soctherm
- nvidia,tegra210-soctherm
- nvidia,tegra210b01-soctherm
then:
properties:
reg:
items:
- description: SOCTHERM register set
- description: clock and reset controller registers
reg-names:
items:
- const: soctherm-reg
- const: car-reg
else:
properties:
reg:
items:
- description: SOCTHERM register set
- description: CCROC registers
reg-names:
items:
- const: soctherm-reg
- const: ccroc-reg
additionalProperties: false
examples:
- |
#include <dt-bindings/clock/tegra124-car.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/thermal/tegra124-soctherm.h>
soctherm@700e2000 {
compatible = "nvidia,tegra124-soctherm";
reg = <0x700e2000 0x600>, /* SOC_THERM reg_base */
<0x60006000 0x400>; /* CAR reg_base */
reg-names = "soctherm-reg", "car-reg";
interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "thermal", "edp";
clocks = <&tegra_car TEGRA124_CLK_TSENSOR>,
<&tegra_car TEGRA124_CLK_SOC_THERM>;
clock-names = "tsensor", "soctherm";
resets = <&tegra_car 78>;
reset-names = "soctherm";
#thermal-sensor-cells = <1>;
nvidia,thermtrips = <TEGRA124_SOCTHERM_SENSOR_CPU 102500>,
<TEGRA124_SOCTHERM_SENSOR_GPU 103000>;
throttle-cfgs {
/*
* When the "heavy" cooling device triggered,
* the HW will skip cpu clock's pulse in 85% depth,
* skip gpu clock's pulse in 85% level
*/
heavy {
nvidia,priority = <100>;
nvidia,cpu-throt-percent = <85>;
nvidia,gpu-throt-level = <TEGRA_SOCTHERM_THROT_LEVEL_HIGH>;
#cooling-cells = <2>;
};
/*
* When the "light" cooling device triggered,
* the HW will skip cpu clock's pulse in 50% depth,
* skip gpu clock's pulse in 50% level
*/
light {
nvidia,priority = <80>;
nvidia,cpu-throt-percent = <50>;
nvidia,gpu-throt-level = <TEGRA_SOCTHERM_THROT_LEVEL_LOW>;
#cooling-cells = <2>;
};
/*
* If these two devices are triggered in same time, the HW throttle
* arbiter will select the highest priority as the final throttle
* settings to skip cpu pulse.
*/
oc1 {
nvidia,priority = <50>;
nvidia,polarity-active-low;
nvidia,count-threshold = <100>;
nvidia,alarm-filter = <5100000>;
nvidia,throttle-period-us = <0>;
nvidia,cpu-throt-percent = <75>;
nvidia,gpu-throt-level = <TEGRA_SOCTHERM_THROT_LEVEL_MED>;
};
};
};
# referring to Tegra132's "reg", "reg-names" and "throttle-cfgs"
- |
thermal-sensor@700e2000 {
compatible = "nvidia,tegra132-soctherm";
reg = <0x700e2000 0x600>, /* SOC_THERM reg_base */
<0x70040000 0x200>; /* CCROC reg_base */
reg-names = "soctherm-reg", "ccroc-reg";
interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "thermal", "edp";
clocks = <&tegra_car TEGRA124_CLK_TSENSOR>,
<&tegra_car TEGRA124_CLK_SOC_THERM>;
clock-names = "tsensor", "soctherm";
resets = <&tegra_car 78>;
reset-names = "soctherm";
#thermal-sensor-cells = <1>;
throttle-cfgs {
/*
* When the "heavy" cooling device triggered,
* the HW will skip cpu clock's pulse in HIGH level
*/
heavy {
nvidia,priority = <100>;
nvidia,cpu-throt-level = <TEGRA_SOCTHERM_THROT_LEVEL_HIGH>;
#cooling-cells = <2>;
};
/*
* When the "light" cooling device triggered,
* the HW will skip cpu clock's pulse in MED level
*/
light {
nvidia,priority = <80>;
nvidia,cpu-throt-level = <TEGRA_SOCTHERM_THROT_LEVEL_MED>;
#cooling-cells = <2>;
};
/*
* If these two devices are triggered in same time, the HW throttle
* arbiter will select the highest priority as the final throttle
* settings to skip cpu pulse.
*/
};
};
# referring to thermal sensors
- |
thermal-zones {
cpu-thermal {
polling-delay-passive = <1000>;
polling-delay = <1000>;
thermal-sensors = <&soctherm TEGRA124_SOCTHERM_SENSOR_CPU>;
trips {
cpu_shutdown_trip: shutdown-trip {
temperature = <102500>;
hysteresis = <1000>;
type = "critical";
};
cpu_throttle_trip: throttle-trip {
temperature = <100000>;
hysteresis = <1000>;
type = "hot";
};
};
cooling-maps {
map0 {
trip = <&cpu_throttle_trip>;
cooling-device = <&throttle_heavy 1 1>;
};
};
};
};
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
NVIDIA Tegra SOCTHERM
1-17이 GPL-2.0-only 또는 BSD-2-Clause YAML 스키마는 NVIDIA Tegra124 SOCTHERM thermal management system을 정의합니다. SOCTHERM IP block은 thermal sensor, polling 또는 interrupt 기반 monitoring, temperature trip point에 따른 CPU·GPU throttling, 외부 overcurrent notification 처리를 제공합니다. Overheat 상황의 emergency shutdown도 관리합니다. Maintainer는 Thierry Reding과 Jon Hunter입니다.
SoC, register, interrupt, clock, reset
18-63`compatible`은 `nvidia,tegra114-soctherm`, `nvidia,tegra124-soctherm`, `nvidia,tegra132-soctherm`, `nvidia,tegra210-soctherm`, `nvidia,tegra210b01-soctherm` 중 하나입니다. `reg`와 `reg-names`는 각각 최대 두 항목입니다.
`interrupts`는 module interrupt와 EDP interrupt 순서이며 이름은 `thermal`, `edp`입니다. `clocks`는 thermal sensor clock과 module clock 순서이고 이름은 `tsensor`, `soctherm`입니다. `resets`는 module reset 한 항목이며 이름은 `soctherm`입니다. `#thermal-sensor-cells`는 sensor ID 하나를 받도록 1입니다.
Hardware throttle event container
64-78`throttle-cfgs`는 `thermal-cooling-devices.yaml`을 따르며 hardware throttle event별 설정을 담는 container입니다. Event를 cooling device로 사용할 수 있습니다. 설명상 event child 이름은 `light` 또는 `heavy`이고, pattern은 `light`, `heavy`, `oc1`을 허용합니다. 각 child는 `#cooling-cells = 2`를 사용하며 명시되지 않은 추가 속성은 금지됩니다.
Throttle priority arbitration
79-90`nvidia,priority`는 1~100의 `uint32` 값입니다. Throttle마다 설정이 다르므로 software가 priority를 정하면 hardware arbiter가 최종 throttle 설정을 선택합니다. 값이 클수록 priority가 높고 일반적으로 목표 frequency가 더 낮아집니다. Critical thermal alarm에는 더 높은 priority를 부여해야 하며 두 vector에 같은 값을 설정해 race가 생기지 않도록 해야 합니다.
CPU·GPU pulse skipper 깊이
91-130Tegra124와 Tegra210의 `nvidia,cpu-throt-percent`는 pulse skipper의 percentage throttling depth이며 0~100입니다. Tegra132 전용 `nvidia,cpu-throt-level`은 CPU clock throttling depth를 0 `TEGRA_SOCTHERM_THROT_LEVEL_NONE`, 1 `LOW`, 2 `MED`, 3 `HIGH` 중 하나로 설정합니다.
Tegra124와 Tegra210의 `nvidia,gpu-throt-level`도 0~3 단계입니다. 각 값은 none 0%, low 50%, medium 75%, high 85% throttling을 뜻하며 대응 symbol은 `TEGRA_SOCTHERM_THROT_LEVEL_NONE`, `LOW`, `MED`, `HIGH`입니다.
Tegra210 OC event 제어
131-156이 선택적 속성들은 Tegra210의 OCx throttle event에만 유효합니다. `nvidia,count-threshold`는 interrupt를 발생시키는 데 필요한 OC event 수입니다. 속성이 없으면 interrupt가 발생하지 않고 0이면 모든 OC alarm마다 interrupt합니다.
`nvidia,polarity-active-low` flag가 있으면 OC alarm signal은 low assert, 없으면 high assert입니다. `nvidia,alarm-filter`는 event를 filter할 clock 수이며 기본값은 0입니다. Filter가 만료되면 OC event가 오랫동안 없었다는 뜻이므로 counter를 지우고 filter를 다시 arm합니다. `nvidia,throttle-period-us`는 OC event가 deassert된 뒤 throttling을 유지할 microsecond 수이며 기본값은 0입니다.
Hardware thermtrip matrix
157-191선택적 `nvidia,thermtrips`는 `uint32-matrix`이며 SOCTHERM hardware가 PMIC에 thermal trigger signal을 assert할 온도를 지정합니다. PMIC는 이 signal로 device reset 또는 shutdown을 수행할 수 있습니다. 각 행은 tsensor ID와 millidegree Celsius 온도의 쌍입니다. Sensor ID는 CPU 0, MEM 1, GPU 2, PLLX 3입니다.
이 속성이 없으면 `critical` trip point를 thermtrip temperature로 사용해 hardware thermal trigger를 설정합니다. 속성이 있으면 critical trip 위반을 thermal framework에 보고해 software shutdown을 구현합니다. `hot` trip point는 hardware throttle temperature로 설정되며 zone 온도가 이를 넘으면 HW throttle event가 발생합니다.
필수 속성
192-202필수 속성은 `compatible`, `reg`, `reg-names`, `interrupts`, `interrupt-names`, `clocks`, `clock-names`, `resets`, `reset-names`입니다.
CAR와 CCROC register 분기
203-239공통 `thermal-sensor.yaml`을 포함합니다. Tegra114, Tegra124, Tegra210, Tegra210B01은 첫 `reg`에 SOCTHERM register set, 두 번째에 clock/reset controller register를 두고 이름을 `soctherm-reg`, `car-reg`로 지정합니다. 그 밖의 Tegra132는 두 번째 범위가 CCROC register이며 이름을 `soctherm-reg`, `ccroc-reg`로 지정합니다. `additionalProperties: false`로 추가 속성을 금지합니다.
Tegra124 SOCTHERM 기본 설정
240-264첫 예제는 0x700e2000 SOCTHERM와 0x60006000 CAR register, GIC SPI 48 thermal interrupt와 51 EDP interrupt, TSENSOR·SOC_THERM clock, reset 78을 구성합니다. `nvidia,thermtrips`는 CPU 102500 millidegree와 GPU 103000 millidegree를 지정합니다.
#include <dt-bindings/clock/tegra124-car.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/thermal/tegra124-soctherm.h>
soctherm@700e2000 {
compatible = "nvidia,tegra124-soctherm";
reg = <0x700e2000 0x600>, /* SOC_THERM reg_base */
<0x60006000 0x400>; /* CAR reg_base */
reg-names = "soctherm-reg", "car-reg";
interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "thermal", "edp";
clocks = <&tegra_car TEGRA124_CLK_TSENSOR>,
<&tegra_car TEGRA124_CLK_SOC_THERM>;
clock-names = "tsensor", "soctherm";
resets = <&tegra_car 78>;
reset-names = "soctherm";
#thermal-sensor-cells = <1>;
nvidia,thermtrips = <TEGRA124_SOCTHERM_SENSOR_CPU 102500>,
<TEGRA124_SOCTHERM_SENSOR_GPU 103000>;
Heavy·light·OC1 throttle 설정
265-308`heavy`는 priority 100으로 CPU pulse 85%와 GPU `HIGH` 85%를 skip합니다. `light`는 priority 80으로 CPU 50%와 GPU `LOW` 50%를 적용합니다. 둘이 동시에 발생하면 hardware arbiter가 priority가 높은 설정을 선택합니다.
`oc1`은 priority 50, active-low polarity, count threshold 100, alarm filter 5100000, throttle period 0 µs를 사용하며 CPU 75%와 GPU `MED` 75% throttling을 설정합니다.
throttle-cfgs {
/*
* When the "heavy" cooling device triggered,
* the HW will skip cpu clock's pulse in 85% depth,
* skip gpu clock's pulse in 85% level
*/
heavy {
nvidia,priority = <100>;
nvidia,cpu-throt-percent = <85>;
nvidia,gpu-throt-level = <TEGRA_SOCTHERM_THROT_LEVEL_HIGH>;
#cooling-cells = <2>;
};
/*
* When the "light" cooling device triggered,
* the HW will skip cpu clock's pulse in 50% depth,
* skip gpu clock's pulse in 50% level
*/
light {
nvidia,priority = <80>;
nvidia,cpu-throt-percent = <50>;
nvidia,gpu-throt-level = <TEGRA_SOCTHERM_THROT_LEVEL_LOW>;
#cooling-cells = <2>;
};
/*
* If these two devices are triggered in same time, the HW throttle
* arbiter will select the highest priority as the final throttle
* settings to skip cpu pulse.
*/
oc1 {
nvidia,priority = <50>;
nvidia,polarity-active-low;
nvidia,count-threshold = <100>;
nvidia,alarm-filter = <5100000>;
nvidia,throttle-period-us = <0>;
nvidia,cpu-throt-percent = <75>;
nvidia,gpu-throt-level = <TEGRA_SOCTHERM_THROT_LEVEL_MED>;
};
};
};
Tegra132 CCROC throttle 설정
309-357Tegra132 예제는 0x700e2000 SOCTHERM register와 0x70040000 CCROC register를 `soctherm-reg`, `ccroc-reg`로 매핑합니다. `heavy`는 priority 100과 CPU `HIGH`, `light`는 priority 80과 CPU `MED` level을 사용하며 동시 발생 시 arbiter가 높은 priority를 선택합니다.
thermal-sensor@700e2000 {
compatible = "nvidia,tegra132-soctherm";
reg = <0x700e2000 0x600>, /* SOC_THERM reg_base */
<0x70040000 0x200>; /* CCROC reg_base */
reg-names = "soctherm-reg", "ccroc-reg";
interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "thermal", "edp";
clocks = <&tegra_car TEGRA124_CLK_TSENSOR>,
<&tegra_car TEGRA124_CLK_SOC_THERM>;
clock-names = "tsensor", "soctherm";
resets = <&tegra_car 78>;
reset-names = "soctherm";
#thermal-sensor-cells = <1>;
throttle-cfgs {
/*
* When the "heavy" cooling device triggered,
* the HW will skip cpu clock's pulse in HIGH level
*/
heavy {
nvidia,priority = <100>;
nvidia,cpu-throt-level = <TEGRA_SOCTHERM_THROT_LEVEL_HIGH>;
#cooling-cells = <2>;
};
/*
* When the "light" cooling device triggered,
* the HW will skip cpu clock's pulse in MED level
*/
light {
nvidia,priority = <80>;
nvidia,cpu-throt-level = <TEGRA_SOCTHERM_THROT_LEVEL_MED>;
#cooling-cells = <2>;
};
/*
* If these two devices are triggered in same time, the HW throttle
* arbiter will select the highest priority as the final throttle
* settings to skip cpu pulse.
*/
};
};
CPU thermal zone과 cooling map
358-388CPU zone은 passive·regular polling delay를 모두 1000 ms로 두고 `TEGRA124_SOCTHERM_SENSOR_CPU`를 참조합니다. 102500 millidegree critical shutdown trip과 100000 millidegree hot throttle trip은 각각 hysteresis 1000을 사용합니다. Cooling map은 hot trip을 `throttle_heavy` cooling device의 state 1로 연결합니다.
thermal-zones {
cpu-thermal {
polling-delay-passive = <1000>;
polling-delay = <1000>;
thermal-sensors = <&soctherm TEGRA124_SOCTHERM_SENSOR_CPU>;
trips {
cpu_shutdown_trip: shutdown-trip {
temperature = <102500>;
hysteresis = <1000>;
type = "critical";
};
cpu_throttle_trip: throttle-trip {
temperature = <100000>;
hysteresis = <1000>;
type = "hot";
};
};
cooling-maps {
map0 {
trip = <&cpu_throttle_trip>;
cooling-device = <&throttle_heavy 1 1>;
};
};
};
};
요약과 해설
nvidia,tegra124-soctherm.yaml:1-388Tegra SOCTHERM의 sensor·thermtrip·hardware throttle·overcurrent·emergency shutdown 구성을 설명합니다. 접을 수 있는 영어 원문 전체는 줄 좌표를 보존하고, 한국어 전문 번역에서는 compatible·property·phandle·register·interrupt·수치·예제 코드를 원형대로 유지합니다.