2021-09-03 10:08:25

by Srinivasa Rao Mandadapu

[permalink] [raw]
Subject: [PATCH] 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.

Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
---
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-03 18:41:53

by Stephen Boyd

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

Quoting Srinivasa Rao Mandadapu (2021-09-03 03:01:53)
> 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.
>
> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
> ---

Any 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;

I was thinking we should return IRQ_HANDLED still, but then I guess
failing to clear the irq be treated as a spurious irq so that if we fail
enough times we'll shut off the irq at the irqchip. Things are going bad
if the write fails.

> + }
> +
> return IRQ_HANDLED;
> }
>

2021-09-06 16:48:09

by Srinivasa Rao Mandadapu

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

Thanks for Your time Stephen!!

On 9/4/2021 12:10 AM, Stephen Boyd wrote:
> Quoting Srinivasa Rao Mandadapu (2021-09-03 03:01:53)
>> 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.
>>
>> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
>> ---
> Any Fixes tag?
Actually it's incremental change. I will add base commit of this function.
>
>> 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;
> I was thinking we should return IRQ_HANDLED still, but then I guess
> failing to clear the irq be treated as a spurious irq so that if we fail
> enough times we'll shut off the irq at the irqchip. Things are going bad
> if the write fails.
Here bit confusing. Could You please suggest How to go ahead on this?
>
>> + }
>> +
>> 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-07 19:57:37

by Stephen Boyd

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

Quoting Srinivasa Rao Mandadapu (2021-09-06 06:35:46)
> Thanks for Your time Stephen!!
>
> On 9/4/2021 12:10 AM, Stephen Boyd wrote:
> > Quoting Srinivasa Rao Mandadapu (2021-09-03 03:01:53)
> >> 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.
> >>
> >> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
> >> ---
> > Any Fixes tag?
> Actually it's incremental change. I will add base commit of this function.

Ok.

> >
> >> 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;
> > I was thinking we should return IRQ_HANDLED still, but then I guess
> > failing to clear the irq be treated as a spurious irq so that if we fail
> > enough times we'll shut off the irq at the irqchip. Things are going bad
> > if the write fails.
> Here bit confusing. Could You please suggest How to go ahead on this?

Sorry. I think it is fine as is.