Re: [PATCH] soundwire: cadence_master: wait and cancel cdns->work before clock stop
From: Pierre-Louis Bossart
Date: Fri Sep 04 2026 - 04:40:04 EST
On 9/1/26 05:10, Bard Liao wrote:
> A peripheral event could happen during the clock stop process. We need
> to wait for the event be handled before stopping the bus clock.
> Otherwise, we will get the IO transfer timed out issue.
>
> Fixes: af4cc917826f ("soundwire: cadence: mask Slave interrupt before stopping clock")
> Signed-off-by: Bard Liao <yung-chuan.liao@xxxxxxxxxxxxxxx>
> Reviewed-by: David Lin <david.lin@xxxxxxxxx>
> Reviewed-by: Shuming Fan <shumingf@xxxxxxxxxxx>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxx>
> ---
> drivers/soundwire/cadence_master.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence_master.c
> index 6fa3739221ee..c41971f4f177 100644
> --- a/drivers/soundwire/cadence_master.c
> +++ b/drivers/soundwire/cadence_master.c
> @@ -1702,6 +1702,13 @@ int sdw_cdns_clock_stop(struct sdw_cdns *cdns, bool block_wake)
> return 0;
> }
>
> + /*
> + * wait for any in-flight peripheral event handling to complete before stopping the clock.
> + * No need to disable peripheral interrupts before canceling the work, as the peripheral
> + * interrupts are already masked before the work is scheduled.
> + */
> + cancel_work_sync(&cdns->work);
> +
> /*
> * Before entering clock stop we mask the Slave
> * interrupts. This helps avoid having to deal with e.g. a