Message ID | 20210903100153.9137-1-srivasam@codeaurora.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | ASoC: qcom: lpass-platform: Reset irq clear reg post handling interrupts | expand |
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 <srivasam@codeaurora.org> > --- 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; > } >
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 <srivasam@codeaurora.org> >> --- > 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; >> } >>
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 <srivasam@codeaurora.org> > >> --- > > 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.
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; }
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 <srivasam@codeaurora.org> --- sound/soc/qcom/lpass-platform.c | 6 ++++++ 1 file changed, 6 insertions(+)