diff --git a/src/audio/chain_dma.c b/src/audio/chain_dma.c index 696973146404..99e8502f8bd5 100644 --- a/src/audio/chain_dma.c +++ b/src/audio/chain_dma.c @@ -121,9 +121,28 @@ static int chain_host_stop(struct comp_dev *dev) int err; err = dma_stop(cd->chan_host->dma->z_dev, cd->chan_host->index); - if (err < 0) + if (err < 0) { + if (err == -EBUSY) { + int retries = 100; + + comp_warn(dev, "dma_stop() fail chan_index = %u, retrying...", + cd->chan_link->index); + + /* + * FIXME: ugly workaround for + * https://github.com/thesofproject/sof/issues/8686 + */ + while (err == -EBUSY && --retries) { + k_busy_wait(10); + err = dma_stop(cd->chan_link->dma->z_dev, cd->chan_link->index); + if (!err) + goto out; + } + } return err; +} +out: comp_info(dev, "chain_host_stop(): dma_stop() host chan_index = %u", cd->chan_host->index); diff --git a/west.yml b/west.yml index 37418754dda6..caca364e3ec9 100644 --- a/west.yml +++ b/west.yml @@ -43,7 +43,7 @@ manifest: - name: zephyr repo-path: zephyr - revision: 9852e8e15bc8536aa1a49cc2697c1e8f802e331f + revision: ad87d2667c3105b7de690af65da6eb08e2496c5a remote: zephyrproject # Import some projects listed in zephyr/west.yml@revision