Public bug reported:
# amd_pmc: hard hang entering s2idle on ThinkPad P14s Gen 6 AMD (Ryzen
AI 9 HX PRO 370)
## Summary
On a Lenovo ThinkPad P14s Gen 6 AMD, entering suspend-to-idle wedges the machine
permanently. The kernel writes `PM: suspend entry (s2idle)` and never returns.
There is no oops, no panic, no watchdog reset — the system is simply dead and
only a hard power-off recovers it.
**Unloading `amd_pmc` makes suspend work reliably. Reloading it brings the hang
straight back.** This was verified as an A/B/A within four minutes on an
otherwise idle machine.
The hang is *past* every device suspend callback (proven with
`/sys/power/pm_test`),
so it is in the platform/SMU hardware-entry path rather than in any device
driver.
## Affected system
| | |
|---|---|
| Model | Lenovo ThinkPad P14s Gen 6 AMD, `21RV0016CK` |
| CPU | AMD Ryzen AI 9 HX PRO 370 w/ Radeon 890M (family 26, model 36, stepping
0) |
| BIOS | LENOVO `R2XET40W (1.20 )`, 2026-05-26 (latest available per `fwupdmgr
get-upgrades`) |
| Distro | Ubuntu 25.10 (Questing Quokka) |
| Kernels | 6.17.0-41-generic **and** 6.17.0-40-generic — both affected |
| Driver | `amd_pmc`, `CONFIG_AMD_PMC=m`, ACPI device `AMDI000A:00` |
| SMU | `smu_fw_version` 93.23.0, `smu_program` 11 |
| Sleep | `/sys/power/state` = `freeze mem`; `mem_sleep` = `[s2idle]`; no S3
offered by firmware |
| | `Low-power S0 idle used by default for system suspend` |
Kernel command line:
```
BOOT_IMAGE=/boot/vmlinuz-6.17.0-41-generic root=UUID=... ro quiet splash
amd_pstate=active resume=UUID=... resume_offset=123500544 amdgpu.sg_display=0
crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M
vt.handoff=7
```
`amd_pmc` probes silently — it emits no messages at all on a normal
boot.
## Symptom
Every log ends identically:
```
kernel: PM: suspend entry (s2idle)
<nothing further; journal never flushed>
```
No resume, no error return, no `last_failed_dev`. `/sys/power/suspend_stats`
shows the attempt was never completed rather than failed.
## Reproducer
```sh
modprobe amd_pmc # if not already loaded
rtcwake -m mem -s 20 # or: echo mem > /sys/power/state
```
On this machine, since 2026-09-11 10:08 this hangs **100% of the time**.
## Evidence: A/B/A
All timestamps 2026-09-11, same boot session where noted, machine
otherwise idle.
### A — `amd_pmc` loaded: 7 hangs, 7 attempts
| Time | Method | Kernel | Dock | Power | Result |
|---|---|---|---|---|---|
| 10:08:54 | logind (`systemctl suspend`) | 6.17.0-41 | docked | AC | hang |
| 11:49:56 | logind | 6.17.0-41 | docked | AC | hang |
| 12:47:48 | `rtcwake -m mem -s 20` | 6.17.0-41 | docked | AC | hang |
| 12:55:55 | `rtcwake -m mem -s 20` | **6.17.0-40** | docked | AC | hang |
| 13:11:05 | `echo mem > /sys/power/state` (no RTC alarm) | 6.17.0-41 |
**undocked** | **battery** | hang |
| 13:24:07 | plain write, from text VT, `pm_debug_messages=1` | 6.17.0-41 |
undocked | battery | hang |
| 13:31:23 | `rtcwake` — control, after reload | 6.17.0-41 | undocked | battery
| hang |
Independent of kernel version, dock state, AC vs battery, and suspend
method.
### B — `amd_pmc` removed: 3 clean cycles
```
13:28:28 ######## amd_pmc REMOVAL TEST kernel=6.17.0-41-generic cycles=3
########
13:28:28 before: amd_pmc loaded=1 refcnt=0
13:28:29 amd_pmc REMOVED ok (lsmod now: 0)
13:28:29 mem_sleep=[s2idle] state=freeze mem
13:28:29 START #1 (no amd_pmc)
13:28:35 RESUMED #1 rc=0 total_hw_sleep=0
13:28:40 START #2 (no amd_pmc)
13:28:46 RESUMED #2 rc=0 total_hw_sleep=0
13:28:51 START #3 (no amd_pmc)
13:28:55 RESUMED #3 rc=0 total_hw_sleep=0
13:29:00 ######## SURVIVED 3/3 WITHOUT amd_pmc ########
13:29:00 amd_pmc reloaded
```
`total_hw_sleep` stays 0 without the driver, i.e. the SoC is not reaching deep
s0ix — suspend/resume is simply shallower, but it works.
### A again — reloaded, hangs immediately
```
13:31:23 ######## CONTROL: amd_pmc LOADED kernel=6.17.0-41-generic ########
13:31:23 amd_pmc loaded=1 bound=1
13:31:23 START #1 (amd_pmc LOADED - expect hang)
rtcwake: wakeup from "mem" using /dev/rtc0 at ...
<dead>
```
This control rules out the alternative explanation that the failure window
simply closed on its own between B and the end of A.
## What was ruled out
**Phase bisect via `/sys/power/pm_test` — 30 cycles, 0 failures:**
| Mode | Cycles | Result |
|---|---|---|
| `freezer` | 10 | clean |
| `devices` | 10 | clean |
| `platform` | 10 | clean |
| `processors` | — | rejected: `PM: Unsupported test mode for suspend to idle`
(-EAGAIN) |
| `core` | — | rejected, same |
`freezer`/`devices`/`platform` are the complete set s2idle accepts, and all
pass.
So task freezing, every device suspend callback, and ACPI platform prepare are
all clean. The wedge is in what happens *after* those — the hardware entry.
Also eliminated by direct test:
- **Kernel regression** — 6.17.0-40 and 6.17.0-41 behave identically.
- **Device drivers** — xHCI controllers, USB4/Thunderbolt routers
(`NHI0`/`NHI1`),
r8169 Wake-on-LAN: all covered by the clean `devices` stage.
- **Dock / external display / USB-C** — hangs occur docked and undocked.
- **AC vs battery** — hangs occur on both.
- **`rtcwake` as a confound** — a plain `echo mem > /sys/power/state` with no
RTC
alarm hangs identically.
- **Userspace** — hangs occur via logind and via a direct sysfs write that
bypasses logind, NetworkManager teardown and all sleep hooks entirely.
- **Out-of-tree modules** — `/proc/sys/kernel/tainted` = 0, none loaded.
## Why there is no trace to attach
This is the frustrating part, and it is structural rather than a lack of
trying:
- **`pm_trace=1`** recorded nothing usable. The next boot read
`PM: RTC time: 00:00:15, date: 2001-01-01` → `PM: Magic number: 1:0:0`, i.e.
file hash 0 and dev hash 0 — no trace event was ever stored. Consistent with
the hang being past all device callbacks, which is where `pm_trace` hooks.
- **Console capture is impossible.** The hang is after device suspend, so amdgpu
has already powered off the panel. Nothing printed after that point can be
displayed, at any loglevel, on any VT. Confirmed empirically with
`pm_debug_messages=1` + `console_suspend=N` from a text console: blank.
- **netconsole / USB-serial** fail for the same reason — NIC and USB are already
suspended at that point. The machine has no physical serial port.
- **pstore** backend is `efi_pstore` only (no ramoops); it captures oops/panic,
and a wedge is neither. `/sys/fs/pstore` is empty. No BERT, no MCE.
## Gap I could not close
`/sys/kernel/debug/amd_pmc/` (`s0ix_stats`, `smu_fw_info`, `amd_pmc_idlemask`)
is
**unreadable even as root**, because the kernel is locked down under EFI Secure
Boot:
```
Kernel is locked down from EFI Secure Boot mode; see man kernel_lockdown.7
/sys/kernel/security/lockdown: none [integrity] confidentiality
```
If `s0ix_stats` would help, I can disable Secure Boot and re-run — please say so
and I will attach it.
## Additional data point: the failure rate changed
From 2026-08-18 to 2026-09-10 the hang rate was roughly **16% (10 hangs / 51
suspends)**. Since 2026-09-11 10:08 it has been **100% (7/7)**. Nothing in the
software changed in that window — the only package activity was userspace
(browsers, JDKs, mssql-tools); no kernel, firmware, or driver update, and the
BIOS is unchanged. This suggests a state-dependent trigger that can latch, which
may be a useful clue about the SMU handshake's failure mode.
## Workaround
```sh
echo "blacklist amd_pmc" | sudo tee /etc/modprobe.d/blacklist-amd-pmc.conf
sudo update-initramfs -u
```
Suspend then works; deep s0ix residency is lost, so sleep power draw
increases.
## Happy to provide
Anything else that would help — `acpidump`, full `dmesg`, `s0ix_stats` with
Secure
Boot disabled, or testing a patch or a debug kernel. The machine reproduces this
100% of the time right now, so patch turnaround is fast.
ProblemType: Bug
DistroRelease: Ubuntu 25.10
Package: linux-image-6.17.0-41-generic 6.17.0-41.41
ProcVersionSignature: Ubuntu 6.17.0-41.41-generic 6.17.13
Uname: Linux 6.17.0-41-generic x86_64
ApportVersion: 2.33.1-0ubuntu3
Architecture: amd64
CasperMD5CheckResult: pass
CurrentDesktop: ubuntu:GNOME
Date: Fri Sep 11 16:13:30 2026
InstallationDate: Installed on 2025-12-03 (282 days ago)
InstallationMedia: Ubuntu 25.10 "Questing Quokka" - Release amd64 (20251007)
MachineType: LENOVO 21RV0016CK
ProcFB: 0 amdgpudrmfb
ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-6.17.0-41-generic
root=UUID=2b934d1c-fc0d-4007-bf73-a6b393110cfd ro quiet splash
amd_pstate=active resume=UUID=2b934d1c-fc0d-4007-bf73-a6b393110cfd
resume_offset=123500544 amdgpu.sg_display=0
crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M
vt.handoff=7
RelatedPackageVersions:
firmware-sof N/A
linux-firmware 20250901.git993ff19b-0ubuntu1.11
SourcePackage: linux
UpgradeStatus: No upgrade log present (probably fresh install)
dmi.bios.date: 05/26/2026
dmi.bios.release: 1.20
dmi.bios.vendor: LENOVO
dmi.bios.version: R2XET40W (1.20 )
dmi.board.asset.tag: Not Available
dmi.board.name: 21RV0016CK
dmi.board.vendor: LENOVO
dmi.board.version: SDK0T76576 WIN
dmi.chassis.asset.tag: No Asset Tag
dmi.chassis.type: 10
dmi.chassis.vendor: LENOVO
dmi.chassis.version: None
dmi.ec.firmware.release: 1.12
dmi.modalias:
dmi:bvnLENOVO:bvrR2XET40W(1.20):bd05/26/2026:br1.20:efr1.12:svnLENOVO:pn21RV0016CK:pvrThinkPadP14sGen6AMD:rvnLENOVO:rn21RV0016CK:rvrSDK0T76576WIN:cvnLENOVO:ct10:cvrNone:skuLENOVO_MT_21RV_BU_Think_FM_ThinkPadP14sGen6AMD:
dmi.product.family: ThinkPad P14s Gen 6 AMD
dmi.product.name: 21RV0016CK
dmi.product.sku: LENOVO_MT_21RV_BU_Think_FM_ThinkPad P14s Gen 6 AMD
dmi.product.version: ThinkPad P14s Gen 6 AMD
dmi.sys.vendor: LENOVO
** Affects: linux (Ubuntu)
Importance: Undecided
Status: New
** Tags: amd64 apport-bug questing wayland-session
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2167115
Title:
amd_pmc: hard hang entering s2idle on ThinkPad P14s Gen 6 AMD (Ryzen
AI 9 HX PRO 370)
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2167115/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs