CPU Frequency Thermal Cap
The CPU frequency thermal cap is an optional constraint layer for the CPU Frequency Scaling subsystem. The active policy selects the requested P-state, and the thermal cap limits the highest-performance P-state allowed when the configured temperature trip points are active.
This keeps performance demand and thermal mitigation separate:
the CPU frequency policy selects the requested P-state according to its own metrics and thresholds.
the thermal cap clamps that request to the highest-performance P-state currently allowed by temperature.
After clamping, the resulting P-state is passed to the SoC P-state driver.
Devicetree
Enable the thermal cap by adding a zephyr,cpu-freq-thermal-cap node and enabling
CONFIG_CPU_FREQ_THERMAL_CAP.
Example:
cpu_freq_thermal_cap: cpu_freq_thermal_cap {
compatible = "zephyr,cpu-freq-thermal-cap";
sensor = <&temp0>;
sensor-channel = "die-temp";
polling-delay-ms = <1000>;
trip-active-polling-delay-ms = <100>;
trip_0 {
temperature-millicelsius = <85000>;
hysteresis-millicelsius = <5000>;
cap-pstate = <&pstate_1>;
};
trip_1 {
temperature-millicelsius = <95000>;
hysteresis-millicelsius = <3000>;
cap-pstate = <&pstate_2>;
};
};
When trip_0 is active, CPU frequency requests are capped to pstate_1 or lower.
When trip_1 is active, requests are capped to pstate_2 or lower. A cap does not
force the CPU to run at that P-state; a policy request for a lower-performance P-state
is left unchanged.
Thermal cap constraints use the CPU frequency P-state index order. Lower index P-states
are higher-performance, higher index P-states are lower-performance and more restrictive.
Each cap-pstate must reference a P-state in that ordered table by phandle.
Runtime behavior
Temperature sampling is done from a delayable work item because sensor drivers may use blocking operations. The CPU frequency timer reads only the cached cap when applying a policy result.
If temperature sampling fails repeatedly, the cap applies the lowest-performance P-state (highest index in the table) as a fail-safe constraint.