Skip to content

Commit 45bfe06

Browse files
tmlemanjhedberg
authored andcommitted
ipc: intel_adsp_host_ipc: clear tx_ack_pending on PM resume
Fix IPC driver becoming non-operational after power management resume due to stale tx_ack_pending state from before suspend. After the IPC service backend refactor (commit cf7e2e6), the intel_adsp_ipc_data structure contains function pointers for suspend/resume handlers. This prevents using `memset` to clear the entire structure during initialization, which was previously done in intel_adsp_ipc_init. Without clearing tx_ack_pending on resume, if the device enters D3 state while still waiting for an IPC acknowledgment (e.g., from a previous test iteration), the driver remains stuck in the waiting state after resume. This prevents sending any new IPC messages, including the FW_READY notification after D3 exit. The fix explicitly clears tx_ack_pending during PM_DEVICE_ACTION_RESUME to ensure the driver starts in a clean operational state after resume, regardless of the state before suspend. Fixes regression introduced in commit cf7e2e6 Signed-off-by: Tomasz Leman <[email protected]>
1 parent 645e62f commit 45bfe06

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

subsys/ipc/ipc_service/backends/ipc_intel_adsp_host_ipc.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,10 @@ static int ipc_pm_action(const struct device *dev, enum pm_device_action action)
434434
if (devdata->resume_fn) {
435435
ret = devdata->resume_fn(dev, devdata->resume_fn_args);
436436
}
437+
/* Clear tx_ack_pending to ensure driver is operational after resume.
438+
* Structure now contains function pointers, so memset() cannot be used.
439+
*/
440+
devdata->tx_ack_pending = false;
437441
break;
438442
default:
439443
/* Return as default value when given PM action is not supported */

0 commit comments

Comments
 (0)