Skip to content

Commit 86a4371

Browse files
vijendarmukundavinodkoul
authored andcommitted
soundwire: amd: fix for handling slave alerts after link is down
Sometimes, its observed that during system level suspend callback execution, after link is down, handling pending slave status workqueue results in mipi register access failures as shown below. soundwire sdw-master-0-0: trf on Slave 1 failed:-110 read addr 0 count 1 rt722-sdca sdw:0:0:025d:0722:01: SDW_DP0_INT recheck read failed:-110 rt722-sdca sdw:0:0:025d:0722:01: Slave 1 alert handling failed: -110 amd_sdw_manager amd_sdw_manager.0: SDW0 cmd response timeout occurred amd_sdw_manager amd_sdw_manager.0: command timeout for Slave 1 soundwire sdw-master-0-0: trf on Slave 1 failed:-110 write addr 5c count 1 amd_sdw_manager amd_sdw_manager.0: SDW0 previous cmd status clear failed amd_sdw_manager amd_sdw_manager.0: command timeout for Slave 1 soundwire sdw-master-0-0: trf on Slave 1 failed:-110 write addr 5d count 1 amd_sdw_manager amd_sdw_manager.0: SDW0 previous cmd status clear failed amd_sdw_manager amd_sdw_manager.0: command timeout for Slave 1 Cancel the pending slave status workqueue prior to initiating clock stop sequence during suspend callback execution for both the power modes. Fixes: 9cf1efc ("soundwire: amd: add pm_prepare callback and pm ops support") Signed-off-by: Vijendar Mukunda <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Vinod Koul <[email protected]>
1 parent 19272b3 commit 86a4371

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

drivers/soundwire/amd_manager.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1209,6 +1209,7 @@ static int __maybe_unused amd_suspend(struct device *dev)
12091209
}
12101210

12111211
if (amd_manager->power_mode_mask & AMD_SDW_CLK_STOP_MODE) {
1212+
cancel_work_sync(&amd_manager->amd_sdw_work);
12121213
amd_sdw_wake_enable(amd_manager, false);
12131214
if (amd_manager->acp_rev >= ACP70_PCI_REV_ID) {
12141215
ret = amd_sdw_host_wake_enable(amd_manager, false);
@@ -1219,6 +1220,7 @@ static int __maybe_unused amd_suspend(struct device *dev)
12191220
if (ret)
12201221
return ret;
12211222
} else if (amd_manager->power_mode_mask & AMD_SDW_POWER_OFF_MODE) {
1223+
cancel_work_sync(&amd_manager->amd_sdw_work);
12221224
amd_sdw_wake_enable(amd_manager, false);
12231225
if (amd_manager->acp_rev >= ACP70_PCI_REV_ID) {
12241226
ret = amd_sdw_host_wake_enable(amd_manager, false);

0 commit comments

Comments
 (0)