From: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
To: Vijendar Mukunda <Vijendar.Mukunda@amd.com>, vkoul@kernel.org
Cc: broonie@kernel.org, alsa-devel@alsa-project.org,
yung-chuan.liao@linux.intel.com, Basavaraj.Hiregoudar@amd.com,
Sunil-kumar.Dommati@amd.com, venkataprasad.potturu@amd.com,
Syed.SabaKareem@amd.com, Mario.Limonciello@amd.com,
Richard.Gong@amd.com, linux-sound@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH V3 10/10] soundwire: amd: fix IRQ thread dropping STATUS_0TO7 on simultaneous wake
Date: Sun, 18 Oct 2026 18:49:15 +0200 [thread overview]
Message-ID: <62eefadc-b0c2-41ca-8a33-af330e78932f@linux.dev> (raw)
In-Reply-To: <20261013085111.2009061-11-Vijendar.Mukunda@amd.com>
On 10/13/26 10:49, Vijendar Mukunda wrote:
> When the wake bit and a device-state change arrive at the same time,
> the IRQ thread returned early after handling wake, silently discarding
> STATUS_0TO7. If the manager is already at D0, pm_request_resume() is
> a no-op so the dropped ATTACHED event is never recovered and jack
> detection stops working.
this wording is very very hard to follow. Please consider rewording to
describe the race condition in better ways...
> Remove the early return on wake: call amd_sdw_process_wake_event(),
> strip the wake bit from the local STATUS_8TO11 copy, and continue to
> the normal slave-status processing path. Remove the STATUS_8TO11 clear
> from amd_sdw_process_wake_event() so the single tail clear in
> amd_sdw_irq_thread() is the only write to the register per invocation,
> eliminating the double-clear race where a new event arriving between
> two successive clears would be wiped before being read.
>
> Fixes: 66c878838f37 ("soundwire: amd: handle SoundWire wake enable interrupt")
> Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
> ---
> drivers/soundwire/amd_manager.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/soundwire/amd_manager.c b/drivers/soundwire/amd_manager.c
> index 1a252a81269a..beb982b17fa9 100644
> --- a/drivers/soundwire/amd_manager.c
> +++ b/drivers/soundwire/amd_manager.c
> @@ -1006,7 +1006,6 @@ static void amd_sdw_process_wake_event(struct amd_sdw_manager *amd_manager)
> dev_dbg(amd_manager->dev, "SoundWire Wake event reported\n");
> pm_request_resume(amd_manager->dev);
... specifically why this would be a no-op and ...
> writel(0x00, amd_manager->acp_mmio + ACP_SW_WAKE_EN(amd_manager->instance));
> - writel(0x00, amd_manager->mmio + ACP_SW_STATE_CHANGE_STATUS_8TO11);
> }
>
> static void amd_sdw_irq_thread(struct work_struct *work)
> @@ -1023,8 +1022,11 @@ static void amd_sdw_irq_thread(struct work_struct *work)
>
> dev_dbg(amd_manager->dev, "[SDW%d] SDW INT: 0to7=0x%x, 8to11=0x%x\n",
> amd_manager->instance, status_change_0to7, status_change_8to11);
> - if (status_change_8to11 & AMD_SDW_WAKE_STAT_MASK)
> - return amd_sdw_process_wake_event(amd_manager);
> +
> + if (status_change_8to11 & AMD_SDW_WAKE_STAT_MASK) {
> + amd_sdw_process_wake_event(amd_manager);
> + status_change_8to11 &= ~AMD_SDW_WAKE_STAT_MASK;
... why adding this mask solves the race
> + }
>
> if (status_change_8to11 & AMD_SDW_PREQ_INTR_STAT) {
> amd_sdw_read_and_process_ping_status(amd_manager);
next prev parent reply other threads:[~2026-10-18 17:02 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-13 8:49 [PATCH V3 00/10] soundwire: amd: SoundWire manager driver bug fixes Vijendar Mukunda
2026-10-13 8:49 ` [PATCH V3 01/10] soundwire: amd: fix SDW command timeout return value handling Vijendar Mukunda
2026-10-13 8:49 ` [PATCH V3 02/10] soundwire: amd: cache ping slave status to avoid spurious disconnect on timeout Vijendar Mukunda
2026-10-18 16:41 ` Pierre-Louis Bossart
2026-10-19 4:15 ` Mukunda,Vijendar
2026-10-13 8:49 ` [PATCH V3 03/10] soundwire: amd: fix work drain ordering in remove path Vijendar Mukunda
2026-10-13 8:49 ` [PATCH V3 04/10] soundwire: amd: pm_runtime guard " Vijendar Mukunda
2026-10-13 8:49 ` [PATCH V3 05/10] soundwire: amd: fix ctx leak when sdw_amd_startup() fails Vijendar Mukunda
2026-10-13 8:49 ` [PATCH V3 06/10] soundwire: amd: propagate amd_init_sdw_manager() error on resume Vijendar Mukunda
2026-10-13 8:49 ` [PATCH V3 07/10] soundwire: amd: drop amd_deinit_sdw_manager() in POWER_OFF suspend Vijendar Mukunda
2026-10-13 8:49 ` [PATCH V3 08/10] soundwire: amd: replace >= ACP70 with explicit switch/case in PM paths Vijendar Mukunda
2026-10-13 8:49 ` [PATCH V3 09/10] soundwire: amd: fix interrupt gate and work drain ordering in PM ops Vijendar Mukunda
2026-10-13 8:49 ` [PATCH V3 10/10] soundwire: amd: fix IRQ thread dropping STATUS_0TO7 on simultaneous wake Vijendar Mukunda
2026-10-18 16:49 ` Pierre-Louis Bossart [this message]
2026-10-19 3:31 ` Mukunda,Vijendar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=62eefadc-b0c2-41ca-8a33-af330e78932f@linux.dev \
--to=pierre-louis.bossart@linux.dev \
--cc=Basavaraj.Hiregoudar@amd.com \
--cc=Mario.Limonciello@amd.com \
--cc=Richard.Gong@amd.com \
--cc=Sunil-kumar.Dommati@amd.com \
--cc=Syed.SabaKareem@amd.com \
--cc=Vijendar.Mukunda@amd.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=venkataprasad.potturu@amd.com \
--cc=vkoul@kernel.org \
--cc=yung-chuan.liao@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.