From 3edd603debbde707d01c08a88d56f5e566c8313b Mon Sep 17 00:00:00 2001 From: Rander Wang Date: Tue, 15 Mar 2022 17:32:41 +0800 Subject: [PATCH 1/2] ipc4: dai: reset llp position to 0 for dai_reset Progress bar of audio player disappears when it is dragged by mouse. In this case pipeline is first paused then reset.Driver checks the llp position in memory windows by node id. Driver can't find llp position since fw cleared node id. This patch reserves node id for pause-reset case and only reset llp position. The node_id will be cleared when dai is free. Signed-off-by: Rander Wang --- src/ipc/ipc4/dai.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ipc/ipc4/dai.c b/src/ipc/ipc4/dai.c index 95c535751765..67f012259bb4 100644 --- a/src/ipc/ipc4/dai.c +++ b/src/ipc/ipc4/dai.c @@ -186,8 +186,13 @@ void dai_dma_release(struct comp_dev *dev) get_llp_reg_info(dd, &node_id, &llp_reg_offset); if (node_id) { - /* clear memory window */ + /* reset llp position to 0 in memory window for reset state. + * clear node id and llp position to 0 when dai is free + */ memset_s(&slot, sizeof(slot), 0, sizeof(slot)); + if (dev->state == COMP_STATE_PAUSED) + slot.node_id = node_id; + mailbox_sw_regs_write(llp_reg_offset, &slot, sizeof(slot)); } From a0fb7c413af99081aa87b7ba3ac2157f7556e938 Mon Sep 17 00:00:00 2001 From: Rander Wang Date: Wed, 16 Mar 2022 14:58:37 +0800 Subject: [PATCH 2/2] ipc4: copier: reserve cd data for reset state Progress bar of audio player disappears when it is dragged by mouse. In this case pipeline is first paused then reset, paused started again. Cd data is initialized when copier is created and will not be initialized again after reset operation, so we can't clear cd data in reset state, only reset stream position and used dai or host. Signed-off-by: Rander Wang --- src/audio/copier.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/audio/copier.c b/src/audio/copier.c index 7c92036430ff..679d95f9edc8 100644 --- a/src/audio/copier.c +++ b/src/audio/copier.c @@ -533,7 +533,6 @@ static int copier_reset(struct comp_dev *dev) mailbox_sw_regs_write(cd->pipeline_reg_offset, &pipe_reg, sizeof(pipe_reg)); } - memset(cd, 0, sizeof(*cd)); comp_set_state(dev, COMP_TRIGGER_RESET); return ret;