Re: SoundWire: amd: all peripherals stay UNATTACHED after s2idle resume (AMD ACP70, ASUS ProArt PX13 HN7306)

From: Pierre-Louis Bossart

Date: Mon Jul 20 2026 - 15:34:11 EST



> One further detail looks suspicious, though I have not confirmed it is the
> cause: in the POWER_OFF_MODE branch of amd_resume_runtime(), the clock
> resume
> handshake is conditional —
>
> val = readl(amd_manager->mmio + ACP_SW_CLK_RESUME_CTRL);
> if (val) {
> val |= AMD_SDW_CLK_RESUME_REQ;
> ...poll for AMD_SDW_CLK_RESUME_DONE...
> if (val & AMD_SDW_CLK_RESUME_DONE) {
> writel(0, ...);
> amd_manager->clk_stopped = false;
> }
> }
>
> After amd_deinit_sdw_manager() and a D3 transition the register block
> may well
> read back as 0, in which case AMD_SDW_CLK_RESUME_REQ is never issued and
> amd_manager->clk_stopped stays true from suspend. Whether the peripherals
> require that clock-resume handshake before they will re-attach is a
> question for
> someone with the ACP70 programming documentation.

Even without the ACP70 documentation, if the clock line doesn't toggle
nothing will happen on the peripheral sides. That's a generic SoundWire
property, the peripherals can only look for a sync pattern on the data
line if there's a clock signal.

I don't have any specific info on this IP, in general such bugs result
from one of:
- manager IP not powered
- manager IO pins not configured for SoundWire operation
- clock not toggling
- reset sequence not applied