2021-09-08 14:28:10

by Srinivasa Rao Mandadapu

[permalink] [raw]
Subject: [PATCH v2] ASoC: qcom: lpass-platform: Reset irq clear reg post handling interrupts

Update interrupt clear register with reset value after addressing
all interrupts. This is to fix playback or capture hanging issue in
simultaneous playback and capture usecase.

Fixes: 4f629e4b8705f ("ASoC: qcom: Add ability to handle interrupts per dma channel")

Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
---
Changes since v1:
-- Update comments Header information with fixes tag

sound/soc/qcom/lpass-platform.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/sound/soc/qcom/lpass-platform.c b/sound/soc/qcom/lpass-platform.c
index f9df76d37858..1a0a4b0b1a03 100644
--- a/sound/soc/qcom/lpass-platform.c
+++ b/sound/soc/qcom/lpass-platform.c
@@ -749,6 +749,12 @@ static irqreturn_t lpass_platform_lpaif_irq(int irq, void *data)
}
}

+ rv = regmap_write(drvdata->lpaif_map, LPAIF_IRQCLEAR_REG(v, LPAIF_IRQ_PORT_HOST), 0x0);
+ if (rv) {
+ pr_err("error writing to irqstat reg: %d\n", rv);
+ return IRQ_NONE;
+ }
+
return IRQ_HANDLED;
}

--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.


2021-09-08 17:48:09

by Srinivas Kandagatla

[permalink] [raw]
Subject: Re: [PATCH v2] ASoC: qcom: lpass-platform: Reset irq clear reg post handling interrupts



On 08/09/2021 15:25, Srinivasa Rao Mandadapu wrote:
> Update interrupt clear register with reset value after addressing
> all interrupts. This is to fix playback or capture hanging issue in
> simultaneous playback and capture usecase.

Could explain bit more about the issue.
Specifically which interrupt and which ports is this issue seen.

>
> Fixes: 4f629e4b8705f ("ASoC: qcom: Add ability to handle interrupts per dma channel")
>
> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
> ---
> Changes since v1:
> -- Update comments Header information with fixes tag
>
> sound/soc/qcom/lpass-platform.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/sound/soc/qcom/lpass-platform.c b/sound/soc/qcom/lpass-platform.c
> index f9df76d37858..1a0a4b0b1a03 100644
> --- a/sound/soc/qcom/lpass-platform.c
> +++ b/sound/soc/qcom/lpass-platform.c
> @@ -749,6 +749,12 @@ static irqreturn_t lpass_platform_lpaif_irq(int irq, void *data)
> }
> }
>
> + rv = regmap_write(drvdata->lpaif_map, LPAIF_IRQCLEAR_REG(v, LPAIF_IRQ_PORT_HOST), 0x0);

Writing 1 to a bit of this register will clear the corresponding latched
interrupt. So I don't really understand how writing 0 is really helping
here?

Do you have this patch in your tree?

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/sound/soc/qcom/lpass-cpu.c?h=v5.14&id=6a7f5bd6185e1c86256d5e52c3bb7a4d390d6e19


--srini

> + if (rv) {
> + pr_err("error writing to irqstat reg: %d\n", rv);
> + return IRQ_NONE;
> + }
> +
> return IRQ_HANDLED;
> }
>
>