[PATCH] soundwire: cadence_master: wait and cancel cdns->work before clock stop

Bard Liao posted 1 patch 3 weeks, 4 days ago
drivers/soundwire/cadence_master.c | 7 +++++++
1 file changed, 7 insertions(+)
[PATCH] soundwire: cadence_master: wait and cancel cdns->work before clock stop
Posted by Bard Liao 3 weeks, 4 days ago
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@linux.intel.com>
Reviewed-by: David Lin <david.lin@intel.com>
Reviewed-by: Shuming Fan <shumingf@realtek.com>
---
 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
-- 
2.43.0
Re: [PATCH] soundwire: cadence_master: wait and cancel cdns->work before clock stop
Posted by Vinod Koul 2 weeks, 3 days ago
On Tue, 01 Sep 2026 11:10:19 +0800, 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.
> 
> 

Applied, thanks!

[1/1] soundwire: cadence_master: wait and cancel cdns->work before clock stop
      commit: aba7b41faeecb7692458095ce6fafc341fe0b80e

Best regards,
-- 
~Vinod
Re: [PATCH] soundwire: cadence_master: wait and cancel cdns->work before clock stop
Posted by Pierre-Louis Bossart 3 weeks, 1 day ago
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@linux.intel.com>
> Reviewed-by: David Lin <david.lin@intel.com>
> Reviewed-by: Shuming Fan <shumingf@realtek.com>

Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>

> ---
>  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