こんにちは、
ファイル内で以下の熱構成が確認されました。
アーチ/arm64/ブート/dts/freescale/imx93.dtsi
熱ゾーン {
CPUサーマル {
ポーリング遅延(パッシブ)= <250>;
ポーリング遅延 = <2000>;
熱センサ = <&tmu 0>;
旅行 {
cpu_alert: cpu-alert {
温度 = <80000>;
ヒステリシス = <2000>;
タイプ = "パッシブ";
};
cpu_crit: cpu-crit {
温度 = <90000>;
ヒステリシス = <2000>;
タイプ = "クリティカル";
};
};
};
};
しかし、実行中のシステムでは、sysfsエントリは異なる値を報告します。
cat /sys/class/thermal/thermal_zone0/trip_point_0_temp
95000
cat /sys/class/thermal/thermal_zone0/trip_point_1_temp
105000
これは、実行時にパッシブトリップポイントが95℃、クリティカルトリップポイントが105℃に設定されていることを示しており、DTSファイルで定義されている値(80℃と90℃)とは異なります。
これらの値が異なる理由を説明していただけますか?カーネル、ドライバ、またはプラットフォームコードの中で、これらの熱遮断ポイントが実行時に変更または上書きされている箇所は他にありますか?
この現象についてさらに調査を進めるため、どこを調査すればよいか教えていただけますでしょうか。
よろしくお願いいたします。
ジャマル・ディーン
imx93evkボードで、以下のdts構成を確認しました。
root@imx93evk:/tmp# hexdump -C /sys/firmware/devicetree/base/thermal-zones/cpu-thermal/trips/cpu-alert/temperature
00000000 00 01 73 18 |..s.|
00000004
root@imx93evk:/tmp# hexdump -C /sys/firmware/devicetree/base/thermal-zones/cpu-thermal/trips/cpu-crit/temperature
00000000 00 01 9a 28 |...(|
00000004
HEX 19a28 = 105000(DEC)
HEX 17318 = 95000(DEC)
これは、Linuxカーネルによってロードされる前に、DTSがすでにu-bootによって変更されていることを意味します。
u-bootソースコードのarch/arm/mach-imx/fdt.cにあるfixup_thermal_trips関数を参照してください。
get_cpu_temp_grade(&minc, &maxc);
fdt_for_each_subnode(trip, blob, node) {
const char *type;
int temp、ret;
type = fdt_getprop(blob, trip, "type", NULL);
(!type) の場合
続く;
temp = 0;
if (!strcmp(type, "critical"))
温度 = 1000 * 最大温度;
else if (!strcmp(type, "passive"))
temp = 1000 * (maxc - 10);
if (temp) {
ret = fdt_setprop_u32(blob, trip, "temperature", temp);
if (ret)
return ret;
}