Skip to main content
Qualcomm® Linux provides multiple power management subsystems CPUIdle, runtime PM, thermal throttling, system suspend, regulators, and clocks, that must be configured together to achieve optimal power consumption on ARM64 platforms. This page covers each subsystem and its key configuration and runtime controls.

CPUIdle states and governors

CPUIdle manages idle state selection when a CPU has no runnable tasks. On Qualcomm platforms, idle states are defined in the device tree and communicated to Linux through the PSCI (Power State Coordination Interface) firmware.

Idle state hierarchy

Qualcomm ARM64 SoCs typically expose three PSCI-backed idle states per CPU: Table: Typical Qualcomm PSCI idle states The exact PSCI state identifiers and residency values are defined in the SoC DTSI under each CPU node. Inspect them:

Inspect idle states at runtime

CPUIdle governors

Table: CPUIdle governors

PM QoS latency constraints

Drivers and user space can prevent CPUs from entering deep idle states by registering a latency constraint. Per-CPU constraints via sysfs:
Required Kconfig:

Runtime PM for peripherals

Runtime PM allows individual peripheral devices to enter low-power states while the system is running. On Qualcomm SoCs, power domains are managed by the RPMh hardware resource manager through the qcom-rpmhpd driver.

Enable runtime PM in a driver

Set an autosuspend delay to prevent rapid power cycling:

Monitor runtime PM state

Replace the following:
  • <device> by the platform device name from /sys/bus/platform/devices/.

Qualcomm power domains

RPMh power domains are registered by the qcom-rpmhpd driver. Inspect registered domains:
Required Kconfig:

Thermal throttling

The Linux thermal framework monitors temperature sensors and applies cooling actions when trip points are crossed. Qualcomm SoCs expose thermal zones through TSENS (temperature sensor) hardware, with cooling devices implemented as CPU frequency caps and CPU hotplug.

Inspect thermal zones

Thermal governors

Table: Thermal governors
Required Kconfig:

System suspend (S2RAM)

System suspend powers off most SoC subsystems while retaining DRAM in self-refresh. On Qualcomm platforms, the suspend path issues a PSCI SYSTEM_SUSPEND call in EL3, and the RPMh hardware sequencer powers down voltage rails in dependency order.

Trigger and verify suspend

Identify suspend blockers

Wakeup sources that are active prevent the system from suspending. Identify them:

Debug suspend failures

Enable per-device suspend and resume tracing:
Required Kconfig:

Regulator and clock management

Reducing unnecessary always-on regulators and unused clock consumers can significantly reduce static power draw.

Regulator state

Inspect all regulators and their enable state:
Remove regulator-always-on from DT bindings of optional peripherals (for example, MIPI-CSI sensors not populated on all boards) to allow runtime power gating. Retain it only for critical rails:

Clock tree

The Qualcomm clock controllers (GCC, CAMCC, DISPCC, and others) are managed by the clk-qcom driver family. Inspect enabled clocks:
Use devm_clk_get_enabled() (available since kernel v5.20) in drivers to acquire, enable, and automatically release a clock when the device is unbound or runtime-suspended:

Power analysis tools

powertop

powertop identifies power consumers, reports idle state residency, and shows per-process wakeup event rates:
Key metrics to examine:
  • C-state residency: deep idle states (C2/C3) should exceed 80% residency when the system is idle.
  • Wakeups/s: any single source exceeding 50 wakeups per second warrants investigation.

pm_debug debugfs

cpuidle tracing with ftrace