Thermal management (Axel)
Software thermal protection[edit | edit source]
Axel Embedded Linux Kit (XELK)[edit | edit source]
In XELK, two software thermal protection mechanisms are implemented. Both are based on the processor's temperature sensor. It is worth remembering that maximum junction temperature (also denoted as Tj in the rest of the document) is:
- 95°C for commercial parts
- 105°C for extended commercial and industrial parts
- 125°C for automotive parts.
U-Boot[edit | edit source]
At U-Boot level, automatic boot procedure is halted until Tj is smaller than (following temperatures might seem excessively low but they take into account the intrinsic poor precision of the temperature sensor to provide a reasonable safe margin):
- 80°C for commercial parts
- 90 for extended commercial and industrial parts
- 110°C for automotive parts.
Linux kernel[edit | edit source]
At Linux level, a more sophisticated protection mechanism is implemented. Please refer to the following sections for more details.
XELK 2.x.y series[edit | edit source]
Practically speaking, for XELK 2.x.y series this mechanism makes use of two different thresholds, denoted as
trip_point0 (also known as passive threshold) and
trip_point1 (also known as critical threshold. When Tj reaches
trip_point0, Linux kernel scales down processor frequency:
System is too hot. GPU3D will work at 1/64 clock.
If Tj reaches
trip_point1, a complete shutdown is triggered:
thermal thermal_zone0: critical temperature reached(100 C),shutting down
By default, temperature thresholds are set up as follows:
Trip point thresholds can be accessed via
sysfs interface from user space. The following example shows how to read the values of the trip points:
root@axel-lite:~# cat /sys/devices/virtual/thermal/thermal_zone0/trip_point_0_temp 85000 root@axel-lite:~# cat /sys/devices/virtual/thermal/thermal_zone0/trip_point_1_temp 100000
This example shows how to set trip points 0 and 1 to 95°C and 100°C respectively:
echo 95000 > /sys/class/thermal/thermal_zone0/trip_point_0_temp echo 100000 > /sys/class/thermal/thermal_zone0/trip_point_1_temp
Please note that
To read current processor temperature please issue this command (reported temperature is 36.676°C in the example):
root@axel-lite:~# cat /sys/class/thermal/thermal_zone0/temp 36676
For more details about this functionality, please refer to
Documentation/thermal/sysfs-api.txt in the kernel sources.
XELK 3.x.y series[edit | edit source]
XELK 3.x.y kernels implement the same mechanism of XELK 2.x.y series. However a notable difference exists, that is default temperature thresholds depend on the silicon grade, as follows:
- for commercial parts
- passive threshold: 85°C
- critical threshold: 90°C
- for extended commercial and industrial parts
- passive threshold: 95°C
- critical threshold: 100°C
- for automotive parts
- passive threshold: 115°C
- critical threshold: 120°C.