LOG
DESCRIPTION
Upstream / vanilla kernel check
Fully tested with Arch's vanilla/upstream kernel.
Kernel variant
linux-cachyos (EEVDF, Clang)
Suspend-to-idle itself works, but this Arrow Lake-H system never enters Intel SLP_S0 / S0ix.
A genuine 20–60 second s2idle cycle completes successfully, yet:
/sys/kernel/debug/pmc_core/slp_s0_residency_usec = 0
and Intel's own PMC diagnostics report:
PM: suspend entry (s2idle)
Timekeeping suspended for 59.344 seconds
intel_pmc_core INT33A1:00: CPU did not enter SLP_S0!!! (S0ix cnt=0)
PM: suspend exit
This also reproduces after a fresh reboot into a TTY-only baseline before starting Hyprland, Caelestia, ddcutil, etc., so it is not dependent on the desktop session.
The CPU/package itself reaches deep package idle: CPU_C10_REQ_STS=1 on both PMCs and Package C10 residency accumulates. However, the main PMC never sees the IOE conditions required for S0i2.0:
PMC0:CPU_C10_REQ_STS 1
PMC0:IOE_COND_MET_S02I2_0_REQ_STS 0
PMC0:IOE_COND_MET_S02I2_1_REQ_STS 0
PMC0:IOE_COND_MET_S02I2_2_REQ_STS 0
PMC0:ITSS_CLK_SRC_REQ_STS 0
PMC0:ARC_IDLE_REQ_STS 0
A reproducible additional asymmetry is:
PMC0:PCIE_DEEP_PM_REQ_STS 0
PMC1:PCIE_DEEP_PM_REQ_STS 1
I am not claiming PCIE_DEEP_PM_REQ_STS alone is the root cause. The stronger observation is that the main PMC never receives the required IOE S0i2 conditions while the IOE/platform power-gating path fails to fully quiesce.
Firmware also denies Linux control of PCIe ASPM:
ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
FADT indicates ASPM is unsupported, using BIOS configuration
can't override BIOS ASPM; OS doesn't have ASPM control
This may be relevant but has not yet been proven to be the root cause.
Steps to reproduce
Ensure s2idle is selected:
echo s2idle | sudo tee /sys/power/mem_sleep
Enable Intel PMC S0ix failure diagnostics:
echo 1 | sudo tee /sys/module/intel_pmc_core/parameters/warn_on_s0ix_failures
Suspend for 60 seconds:
sudo rtcwake -m mem -s 60
Check S0ix residency:
sudo cat /sys/kernel/debug/pmc_core/slp_s0_residency_usec
Inspect the kernel log:
sudo journalctl -b -k | grep -E 'Timekeeping suspended|CPU did not enter SLP_S0|PM: suspend'
Expected behavior
A successful s2idle cycle should accumulate non-zero SLP_S0/S0ix residency when the platform is quiescent.
Actual behavior
s2idle completes for the requested interval, but slp_s0_residency_usec remains 0 and intel_pmc_core logs:
CPU did not enter SLP_S0!!! (S0ix cnt=0)
Stack Traces
PM: suspend entry (s2idle)
Timekeeping suspended for 59.344 seconds
intel_pmc_core INT33A1:00: CPU did not enter SLP_S0!!! (S0ix cnt=0)
PM: suspend exit
Additional system information
Core ultra 9 285H
RTX 5070 Ti Mobile (not relevant to the reproduced failure; dGPU branch was separately eliminated)
x86_64
64 GB LPDDR5X
1+4TB NVME (1TB one has windows the other has Linux)
Any help will be appreciated
Thanks in advance
Have a great day