Re: [PATCH] pmdomain: mediatek: mt8183: Fix silent audio from premature sync_state

From: Ulf Hansson

Date: Tue Nov 10 2026 - 06:02:14 EST


On Mon, Oct 5, 2026 at 3:19 PM Nils Büchner <nils@xxxxxxxxxxx> wrote:
>
> Commit 0e789b491ba0 ("pmdomain: core: Leave powered-on genpds on until
> sync_state") made genpd trust that a power domain already on at probe
> time is correctly, fully initialized, and stopped forcing a real
> power-off/power-on cycle for it until the devicetree provider's
> sync_state() callback fires.
>
> On the Juniper board (Acer Chromebook Spin 311, MT8183), the firmware
> leaves the audio power domain in exactly this misleading state: genpd
> reports it as on, so this new behavior never runs the real hardware
> sequencing in scpsys_power_on() that clears the domain's AXI bus
> protection. Register access to the AFE block over APB keeps working
> normally, giving no obvious sign anything is wrong, but the memif DMA
> engine's own bus transactions silently never complete: its current-
> position register stays frozen at the value it was reset to, the
> period-elapsed interrupt is never raised, and ALSA playback fails with
> -EIO. The net effect is silent internal speakers on every boot.
>
> This is the same class of problem already fixed for the MFG/GPU
> domains in commit 818d56ac1d ("pmdomain: mediatek: Fix mt8183 hang on
> boot"), which does not cover the audio domain. Apply the identical,
> already-reviewed fix here: MTK_SCPD_KEEP_DEFAULT_OFF makes genpd start
> the domain in GENPD_STATE_OFF instead of trusting the bootloader's
> "on" state, so the AFE driver's own first pm_runtime resume triggers a
> genuine power-on transition and actually runs the bus-protection
> clear.
>
> Root-caused with a git bisect across released kernel versions on real
> Juniper hardware (audio works on v6.6, fails from v6.16 onward),
> narrowing the regression down to this exact commit, and confirmed
> fixed with speaker-test playback after applying this change.
>
> Fixes: 0e789b491ba0 ("pmdomain: core: Leave powered-on genpds on until sync_state")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Nils Büchner <nils@xxxxxxxxxxx>

Applied for fixes, thanks!

Kind regards
Uffe


> ---
> drivers/pmdomain/mediatek/mt8183-pm-domains.h | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/drivers/pmdomain/mediatek/mt8183-pm-domains.h b/drivers/pmdomain/mediatek/mt8183-pm-domains.h
> index 5e33b8628..8e29e5117 100644
> --- a/drivers/pmdomain/mediatek/mt8183-pm-domains.h
> +++ b/drivers/pmdomain/mediatek/mt8183-pm-domains.h
> @@ -22,6 +22,15 @@ static const struct scpsys_domain_data scpsys_domain_data_mt8183[] = {
> .pwr_sta2nd_offs = 0x0184,
> .sram_pdn_bits = GENMASK(11, 8),
> .sram_pdn_ack_bits = GENMASK(15, 12),
> + /*
> + * Depending on firmware, the audio domain may be left
> + * partially on at boot, with genpd detecting it as on when
> + * it isn't fully initialized. Force a real off/on cycle
> + * instead of trusting that state, same as the MFG domains
> + * in commit 818d56ac1d ("pmdomain: mediatek: Fix mt8183
> + * hang on boot").
> + */
> + .caps = MTK_SCPD_KEEP_DEFAULT_OFF,
> },
> [MT8183_POWER_DOMAIN_CONN] = {
> .name = "conn",
> --
> 2.53.0
>