CachyOS / CachyOS/linux-cachyos

Conexant SN6140 HDA codec fails to re-init after s2idle resume (CORBRP=0xFFFF, "no codecs initialized"), needs cold reboot

Open
#950 6 comments 0 reactions 0 assignees View on GitHub
Dominant language
Shell
Stars
4.5k
Forks
160
Avg merge
2d 12h
Merged PRs (30d)
1

Description

# Conexant SN6140 HDA codec fails to re-init after s2idle resume (CORBRP=0xFFFF, "no codecs initialized"), needs cold reboot

## Summary
On an AMD Ryzen 9 8945HX laptop, the analog HD-Audio codec (Conexant SN6140,
behind the AMD "Ryzen HD Audio Controller" at PCI `0000:05:00.6`) stops working
after **every resume from s2idle suspend**. On resume the controller can no
longer talk to the codec (`CORB reset timeout, CORBRP = 65535`, then
`no codecs initialized`). The analog card disappears and PipeWire falls back to a
dummy sink. The codec only comes back after a **full cold reboot** — no warm
recovery works.

## Hardware / software
- Laptop: MECHREVO JIAOLONG Series, board X6xR55xK
- CPU/SoC: AMD Ryzen 9 8945HX with Radeon Graphics
- Audio controller: `05:00.6 Audio device [0403]: AMD Ryzen HD Audio Controller [1022:15e3]`
- Codec: Conexant SN6140 (`snd_hda_codec_conexant`, hdaudioC2D0), line-out pin 0x17 (speaker), hp-out pin 0x16
- Also present: NVIDIA GB205 HDA [10de:2f80] (dGPU), AMD Radeon HDA [1002:1640], AMD Audio Coprocessor [1022:15e2]
- Kernel: 7.1.3-2-cachyos (x86_64)
- BIOS: American Megatrends N.1.19MRO20, 2025-12-18
- Sleep modes available: `/sys/power/mem_sleep = [s2idle]` (no deep/S3)

## Reproduction
1. Cold boot — analog audio works.
2. Let the machine enter s2idle suspend (idle or lid), then resume.
3. On resume the analog codec is dead; no analog output until a cold reboot.
Correlation across boots: ~14 suspend cycles ↔ ~19 `CORB reset timeout` events.

## Evidence (dmesg / journal)
```
PM: suspend entry (s2idle)
amd_pmc AMDI0008:00: Last suspend didn't reach deepest state
PM: suspend exit
snd_hda_intel 0000:05:00.6: CORB reset timeout#2, CORBRP = 65535
hdaudio hdaudioC2D0: no AFG or MFG node found
snd_hda_intel 0000:05:00.6: no codecs initialized
```
wireplumber at the same instant:
```
spa.alsa: Failed to set switch of 'Speaker': Input/output error
spa.alsa: Failed to set switch of 'Headphone': Input/output error
```

## What does NOT recover it (all tested)
- PCI remove + rescan of `0000:05:00.6` → re-probe again yields `no codecs initialized`.
- Driver unbind/bind (`snd_hda_intel`) → same.
- PCI function-level reset (`/sys/bus/pci/devices/0000:05:00.6/reset`) → "Permission denied" (FLR not supported/allowed).
- `hwCxD0/reconfig` → leaves the codec with no PCM at all.
- `snd_hda_intel power_save=0`, `power_save_controller=N`, PCI `power/control=on` → no effect (dies on system suspend, not runtime PM).
- Cannot switch to S3: only s2idle is exposed.

Only a full cold reboot restores the codec.

## Note
`amd_pmc: Last suspend didn't reach deepest state` accompanies the failure —
possibly related. The codec appears to be left unpowered/unresponsive after the
s2idle cycle and never re-establishes CORB/RIRB.

## Requested
A quirk / power-sequencing fix so the SN6140 codec re-initializes on s2idle
resume, or guidance on a working workaround.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.