Why Won't My CPU Sleep? Debugging CPUIdle Mysteries on ARM SoCs
summary
ARM64 systems fail to reach or exit deep CPU idle when device tree idle states are missing or firmware rejects PSCI parameters; adding a DT idle entry and implementing PSCI validate_power_state in Trusted Firmware fixes the first failure, while adding an always-on clock event provider and extending the timer driver lets CPUIdle pick deeper states despite a local-timer-stop flag. Debugging uses trace-cmd + KernelShark, Perfetto, trace_printk and GPIO logic-analyzer toggles; the fixes are upstream and suspend-to-idle then works (zero wake activity in traces).
AI-written summary · about
chapters (9)
- 0:00Introduction and context
- 3:16CPU idle fundamentals
- 4:30Case study one: initial setup
- 14:55PSCI and firmware basics
- 18:03Case study two: deep sleep
- 30:41Device tree configuration
- 36:26Case study three: wakeup
- 38:50Debugging tools and methods
- 41:58Future work and conclusion
related talks
30mPreparing Linux Real-Time Kernel and Tuning Robotics Platform with Modern ARM..
52mUnlocking the Potential of Suspend to RAM Using Linux in a Multi-Core, Multi-Fi...
31mTweaking Device Drivers for Achieving Real-Time Performance in Embedded...
26mCommSec D2 - Hiding Tasks via Hardware Task Switching
42mPower Debugging with JTAG
26mA Bad Dream: Subverting Trusted Platform Module While You Are Sleeping
31mOn this Rock I will Build my System - Why Open-Source Firmware Matters
24mTriaging Crashed With Backward Taint Analysis For Arm Architecture
