On 11-03-20, 13:41, Pierre-Louis Bossart wrote:
Intel QA reported a very rare case, possibly hardware-dependent, where a Slave can become UNATTACHED during a clock stop sequence, which leads to timeouts and failed suspend sequences.
This patch suppresses the handling of all Slave events while this transition happens. The two cases that matter are:
a) alerts: if the Slave wants to signal an alert condition, it can do so using the in-band wake, so there's almost no impact with this patch.
b) sync loss or imp-def reset: in those cases, bringing back the Slave to functional state requires a complete re-enumeration. It's better to just ignore this case and restart cleanly, rather than attempt a 'clean' suspend.
Validation results show the timeouts no longer visible with this patch.
GitHub issue: https://github.com/thesofproject/linux/issues/1678 Signed-off-by: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com
drivers/soundwire/cadence_master.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence_master.c index 02f18ce6b7e7..a4ba57f44c1f 100644 --- a/drivers/soundwire/cadence_master.c +++ b/drivers/soundwire/cadence_master.c @@ -865,6 +865,24 @@ int sdw_cdns_exit_reset(struct sdw_cdns *cdns) } EXPORT_SYMBOL(sdw_cdns_exit_reset);
+/**
- sdw_cdns_enable_slave_interrupt() - Enable SDW slave interrupts
- @cdns: Cadence instance
- @state: boolean for true/false
- */
+static void cdns_enable_slave_interrupts(struct sdw_cdns *cdns, bool state)
Do you want to rename this as cdns_configure_slave_interrupts, with argument as enable/disable... ?