# Thermal architecture

The thermal architecture shows how the Qualcomm Linux thermal framework interacts with temperature sensors (Tsens) hardware,
cooling map interfaces, and user space clients.

<!--?xml version="1.0" encoding="UTF-8"?-->
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="940.56" height="320" viewbox="0 0 940.56 320" aria-label="../../_images/Thermal-architecture.svg" class="align-center">
  <g>
    <rect x=".5" y=".5" width="939.56" height="319" rx="7.5" ry="7.5" style="fill: #fafafa;"></rect>
    <path d="M932.56,1c3.86,0,7,3.14,7,7v304c0,3.86-3.14,7-7,7H8c-3.86,0-7-3.14-7-7V8c0-3.86,3.14-7,7-7h924.56M932.56,0H8C3.58,0,0,3.58,0,8v304c0,4.42,3.58,8,8,8h924.56c4.42,0,8-3.58,8-8V8c0-4.42-3.58-8-8-8h0Z" style="fill: #d2d7e1;"></path>
  </g>
  <rect x="328.89" y="15" width="178.89" height="40" rx="4" ry="4" style="fill: #6280cc;"></rect>
  <rect x="328.89" y="195" width="178.89" height="40" rx="4" ry="4" style="fill: #6280cc;"></rect>
  <rect x="328.89" y="265" width="178.89" height="40" rx="4" ry="4" style="fill: #6280cc;"></rect>
  <rect x="15" y="105" width="178.89" height="40" rx="4" ry="4" style="fill: #6280cc;"></rect>
  <rect x="328.89" y="85" width="178.89" height="80" rx="4" ry="4" style="fill: #6280cc;"></rect>
  <rect x="746.67" y="85" width="178.89" height="80" rx="4" ry="4" style="fill: #6280cc;"></rect>
  <text transform="translate(353.21 39.68)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">User space clients</tspan></text>
  <text transform="translate(34.34 129.68)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Thermal device tree</tspan></text>
  <text transform="translate(205.15 119.52)" style="font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Netlink interface</tspan></text>
  <text transform="translate(348.62 129.68)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Thermal framework</tspan></text>
  <text transform="translate(757.6 129.68)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Cooling map interface</tspan></text>
  <text transform="translate(371.04 219.68)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Tsens drivers</tspan></text>
  <text transform="translate(361.96 289.68)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Tsens hardware</tspan></text>
  <g>
    <line x1="358.89" y1="55" x2="358.89" y2="79.26" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
    <polygon points="354.9 78.09 358.89 85 362.88 78.09 354.9 78.09"></polygon>
  </g>
  <g>
    <line x1="328.02" y1="125" x2="199.63" y2="125" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
    <polygon points="200.8 121.01 193.89 125 200.8 128.99 200.8 121.01"></polygon>
  </g>
  <g>
    <line x1="477.78" y1="55" x2="477.78" y2="79.26" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
    <polygon points="473.79 78.09 477.78 85 481.77 78.09 473.79 78.09"></polygon>
  </g>
  <text transform="translate(574.11 97)" style="font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Sysfs interface</tspan></text>
  <g>
    <line x1="507.78" y1="105" x2="740.93" y2="105" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
    <polygon points="739.76 108.99 746.67 105 739.76 101.01 739.76 108.99"></polygon>
  </g>
  <g>
    <rect x="537.78" y="125" width="178.89" height="40" rx="4" ry="4" style="fill: #6280cc;"></rect>
    <text transform="translate(564.33 149.68)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Thermal governor</tspan></text>
    <g>
      <line x1="507.78" y1="145" x2="532.04" y2="145" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
      <polygon points="530.87 148.99 537.78 145 530.87 141.01 530.87 148.99"></polygon>
    </g>
    <g>
      <line x1="716.67" y1="145" x2="740.93" y2="145" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
      <polygon points="739.76 148.99 746.67 145 739.76 141.01 739.76 148.99"></polygon>
    </g>
  </g>
  <g>
    <line x1="418.33" y1="170.74" x2="418.33" y2="189.26" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
    <polygon points="414.34 171.91 418.33 165 422.32 171.91 414.34 171.91"></polygon>
    <polygon points="414.34 188.09 418.33 195 422.32 188.09 414.34 188.09"></polygon>
  </g>
  <g>
    <line x1="418.33" y1="240.74" x2="418.33" y2="259.26" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
    <polygon points="414.34 241.91 418.33 235 422.32 241.91 414.34 241.91"></polygon>
    <polygon points="414.34 258.09 418.33 265 422.32 258.09 414.34 258.09"></polygon>
  </g>
</svg>
**Figure: Thermal architecture**

Table: Description of the components of thermal architecture

| Components of thermal architecture | Description |
| --- | --- |
| Thermal device tree | <ul class="simple"><br><li><p>A thermal device tree consists of various  thermal zones.</p></li><br><li><p>A thermal zone is configured for every Tsens.</p></li><br><li><p>Each thermal zone consists of sensor hardware<br>information, different levels of thermal thresholds, and<br>their respective cooling actions.</p></li><br><li><p>All rules for a thermal zone are defined in the device<br>tree.</p></li><br></ul> |
| Thermal framework | The thermal framework parses the thermal zone rules from the<br>device tree and configures Tsens hardware to generate<br>interrupts when temperature crosses the threshold. |
| Thermal governor | <ul class="simple"><br><li><p>The thermal governor is a temperature monitor algorithm<br>that controls the temperature of a thermal zone.</p></li><br><li><p>It mitigates the cooling devices associated with the zone<br>and keeps the temperature within the limit.</p></li><br><li><p>On receiving an interrupt notification from Tsens<br>hardware, the thermal framework uses a stepwise thermal<br>governor to communicate the cooling actions to the<br>cooling map interface (CPU frequency driver).</p></li><br></ul> |
| Cooling map interface | <ul class="simple"><br><li><p>A cooling map interface is a collection of devices that<br>can be throttled to reduce the temperature of Qualcomm<br>Linux.</p></li><br><li><p>Every trip instance of the thermal zone is associated<br>with a cooling device.</p></li><br><li><p>The thermal core framework aggregates all the cooling<br>device instance requests and places the aggregated<br>requests to the cooling device.</p></li><br></ul> |
| User space clients | User space clients use the following interfaces to<br>communicate with the thermal framework:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>The <code class="docutils literal notranslate"><span class="pre">sysfs</span></code> interface is used to read the temperature<br>> of Tsens and kernel trip information.</p></li><br>> <li><p>The <code class="docutils literal notranslate"><span class="pre">Netlink</span></code> interface gets information on Tsens<br>> temperature notifications.</p></li><br>> </ul> |

## Thermal mitigation policies

Qualcomm Linux uses in-built software and hardware mitigation policies to regulate the device’s thermal behavior.

The thermal framework applies the mitigation policies when required and
operates through the following policies:

- Monitors the thermal response of the system using on-die Tsens
- Applies mitigation based on thermal threshold limits defined in the
device tree
- Implements software throttling, hardware throttling, software shutdown,
and hardware shutdown mitigation policies to control temperature

Table: Temperature management techniques and description

| Temperature management techniques | Description |
| --- | --- |
| Software throttling | <ul><br><li><p>The Tsens triggers an interrupt whenever the temperature<br>in the system crosses the configured threshold.</p></li><br><li><p>The thermal framework initiates the following mitigation<br>actions on the CPU, GPU, and NSP in response to the<br>interrupts:</p><ul><br><li><p>Thermal DCVS</p><ul class="simple"><br><li><p>Reduces the maximum operating frequency if<br>temperature thresholds are crossed</p></li><br><li><p>Voltage scaling occurs according to clock scaling,<br>which reduces power consumption and temperature in<br>turn</p></li><br></ul><br></li><br><li><p>CPU idle injection</p><br><p>The core is put in the deepest low power state for the<br>configured idle time.</p><br></li><br></ul><br></li><br></ul> |
| Hardware throttling | <ul class="simple"><br><li><p>In-built hardware runs the thermal mitigation actions<br>ensuring system reliability</p></li><br><li><p>Reduces CPU and NSP clock speed to quickly recover from<br>high thermal conditions</p></li><br></ul> |
| Software shutdown | The thermal framework initiates graceful shutdown upon<br>receiving an interrupt from Tsens. |
| Hardware shutdown | The hardware initiates a device shutdown. |

Note

The thermal mitigation techniques are for informational purposes only. They help in understanding performance regressions during high thermal conditions.

The following tables list the temperatures at which in-built software and hardware mitigation occur.

> 
> 
> Tab QCS6490/QCS5430
> Tab IQ-9075
> Tab IQ-8275
> Tab IQ-615
> 
> | Mitigation actions | CPU | NSP | GPU |
> | --- | --- | --- | --- |
> | Software throttling | 115 ºC<br><br><br>Mitigation action: Core idle injection | 110 ºC<br><br><br>Mitigation action: Frequency throttling | 105 ºC<br><br><br>Mitigation action: Frequency throttling |
> | Hardware throttling | 95 ºC/105 ºC<br><br><br>Note<br><br><br>105 °C thermal mitigation is applied only for 300-AA parts.<br><br><br>Mitigation action: Frequency throttling | 102 ºC<br><br><br>Mitigation action: Frequency throttling | Not applicable |
> | Software shutdown | 118 ºC<br><br><br>Mitigation action: Device shutdown | 118 ºC<br><br><br>Mitigation action: Device shutdown | 118 ºC<br><br><br>Mitigation action: Device shutdown |
> | Hardware shutdown | 120 ºC<br><br><br>Mitigation action: Device shutdown | 120 ºC<br><br><br>Mitigation action: Device shutdown | 120 ºC<br><br><br>Mitigation action: Device shutdown |
> 
> See qcs9100-thermal.dtsi to review the kernel thermal rules.
> 
> 
> 
> > 
> > 
> > | Mitigation actions | CPU | NSP | GPU |
> > | --- | --- | --- | --- |
> > | Software throttling | 116 ºC<br><br><br>Mitigation action: Core idle injection | 105 ºC<br><br><br>Mitigation action: Frequency throttling | 105 ºC<br><br><br>Mitigation action: Frequency throttling |
> > | Hardware throttling | 110 ºC<br><br><br>Mitigation action: Frequency throttling | 110 ºC<br><br><br>Mitigation action: Frequency throttling | Not applicable |
> > | Software shutdown | 118 ºC<br><br><br>Mitigation action: Device shutdown | 118 ºC<br><br><br>Mitigation action: Device shutdown | 118 ºC<br><br><br>Mitigation action: Device shutdown |
> > | Hardware shutdown | 120 ºC<br><br><br>Mitigation action: Device shutdown | 120 ºC<br><br><br>Mitigation action: Device shutdown | 120 ºC<br><br><br>Mitigation action: Device shutdown |
> 
> See qcs8300.dtsi to review kernel thermal rules.
> 
> 
> 
> > 
> > 
> > | Mitigation actions | CPU | NSP | GPU |
> > | --- | --- | --- | --- |
> > | Software throttling | 116 ºC<br><br><br>Mitigation action: Core idle injection | 105 ºC<br><br><br>Mitigation action: Frequency throttling | 105 ºC<br><br><br>Mitigation action: Frequency throttling |
> > | Hardware throttling | 110 ºC<br><br><br>Mitigation action: Frequency throttling | 110 ºC<br><br><br>Mitigation action: Frequency throttling | Not applicable |
> > | Software shutdown | 118 ºC<br><br><br>Mitigation action: Device shutdown | 118 ºC<br><br><br>Mitigation action: Device shutdown | 118 ºC<br><br><br>Mitigation action: Device shutdown |
> > | Hardware shutdown | 120 ºC<br><br><br>Mitigation action: Device shutdown | 120 ºC<br><br><br>Mitigation action: Device shutdown | 120 ºC<br><br><br>Mitigation action: Device shutdown |
> 
> Note
> 
> 
> The thermal rules for Dragonwing IQ-8275 will be enabled in the future release.
> 
> 
> See qcs615.dtsi to review kernel thermal rules.
> 
> 
> 
> 
> 
> 
> | Mitigation actions | CPU | NSP | GPU |
> | --- | --- | --- | --- |
> | Software throttling | 115 ºC<br><br><br>Mitigation action: Core idle injection | 105/110 ºC<br><br><br>Mitigation action: Frequency throttling | 105 ºC<br><br><br>Mitigation action: Frequency throttling |
> | Hardware throttling | 105 ºC<br><br><br>Mitigation action: Frequency throttling | 102 ºC<br><br><br>Mitigation action: Frequency throttling | Not applicable |
> | Software shutdown | 118 ºC<br><br><br>Mitigation action: Device shutdown | 118 ºC<br><br><br>Mitigation action: Device shutdown | 118 ºC<br><br><br>Mitigation action: Device shutdown |
> | Hardware shutdown | 120 ºC<br><br><br>Mitigation action: Device shutdown | 120 ºC<br><br><br>Mitigation action: Device shutdown | 120 ºC<br><br><br>Mitigation action: Device shutdown |
> 
> 
> 
> Note
> 
> 
> The core idle injection functionality will be enabled in future release.

## Next steps

- [Learn about thermal interfaces](https://docs.qualcomm.com/doc/80-80022-30/topic/thermal-interfaces.html#thermal-interfaces)

Last Published: May 06, 2026

[Previous Topic
Get started with thermal management workflow](https://docs.qualcomm.com/bundle/publicresource/80-80022-30/topics/get-started-thermal.md) [Next Topic
Learn about thermal interfaces](https://docs.qualcomm.com/bundle/publicresource/80-80022-30/topics/thermal-interfaces.md)

Source: [https://docs.qualcomm.com/doc/80-80022-30/topic/thermal-architecture.html](https://docs.qualcomm.com/doc/80-80022-30/topic/thermal-architecture.html)