From: Shengjiu Wang <hidden> Date: 2022-09-05 10:48:04
If the initialization is not finished, then filling input data to
the FIFO may fail. So it is better to add initialization finishing
check in the runtime resume for suspend & resume case.
And consider the case of three instances working in parallel,
increase the retry times to 50 for more initialization time.
Signed-off-by: Shengjiu Wang <redacted>
---
sound/soc/fsl/fsl_asrc.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
@@ -579,7 +580,7 @@ static void fsl_asrc_start_pair(struct fsl_asrc_pair *pair){structfsl_asrc*asrc=pair->asrc;enumasrc_pair_indexindex=pair->index;-intreg,retry=10,i;+intreg,retry=INIT_TRY_NUM,i;/* Enable the current pair */regmap_update_bits(asrc->regmap,REG_ASRCTR,
@@ -592,6 +593,10 @@ static void fsl_asrc_start_pair(struct fsl_asrc_pair *pair)reg&=ASRCFG_INIRQi_MASK(index);}while(!reg&&--retry);+/* FIXME: Doesn't treat initialization timeout as error */+if(!retry)+dev_warn(&asrc->pdev->dev,"initialization isn't finished\n");+/* Make the input fifo to ASRC STALL level */regmap_read(asrc->regmap,REG_ASRCNCR,®);for(i=0;i<pair->channels*4;i++)
@@ -1257,6 +1262,7 @@ static int fsl_asrc_runtime_resume(struct device *dev){structfsl_asrc*asrc=dev_get_drvdata(dev);structfsl_asrc_priv*asrc_priv=asrc->private;+intreg,retry=INIT_TRY_NUM;inti,ret;u32asrctr;
@@ -1295,6 +1301,17 @@ static int fsl_asrc_runtime_resume(struct device *dev)regmap_update_bits(asrc->regmap,REG_ASRCTR,ASRCTR_ASRCEi_ALL_MASK,asrctr);+/* Wait for status of initialization for every enabled pairs */+do{+udelay(5);+regmap_read(asrc->regmap,REG_ASRCFG,®);+reg=(reg>>ASRCFG_INIRQi_SHIFT(0))&0x7;+}while((reg!=((asrctr>>ASRCTR_ASRCEi_SHIFT(0))&0x7))&&--retry);++/* FIXME: Doesn't treat initialization timeout as error */+if(!retry)+dev_warn(dev,"initialization isn't finished\n");+return0;disable_asrck_clk:
From: Shengjiu Wang <shengjiu.wang@gmail.com> Date: 2022-09-06 02:58:52
On Mon, Sep 5, 2022 at 9:15 PM Nicolin Chen [off-list ref] wrote:
On Mon, Sep 5, 2022 at 3:47 AM Shengjiu Wang [off-list ref]
wrote:
quoted
@@ -1295,6 +1301,17 @@ static int fsl_asrc_runtime_resume(struct device
*dev)
quoted
regmap_update_bits(asrc->regmap, REG_ASRCTR,
ASRCTR_ASRCEi_ALL_MASK, asrctr);
+ /* Wait for status of initialization for every enabled pairs */
+ do {
+ udelay(5);
+ regmap_read(asrc->regmap, REG_ASRCFG, ®);
+ reg = (reg >> ASRCFG_INIRQi_SHIFT(0)) & 0x7;
+ } while ((reg != ((asrctr >> ASRCTR_ASRCEi_SHIFT(0)) & 0x7)) &&
--retry);
quoted
+
+ /* FIXME: Doesn't treat initialization timeout as error */
+ if (!retry)
+ dev_warn(dev, "initialization isn't finished\n");
Any reason why not just dev_err?
Just hesitate to use dev_err. if use dev_err, then should return an error.
May one of the pairs is finished, it still can continue.
Best regards
Wang Shengjiu
On Tue, Sep 6, 2022 at 3:50 AM Shengjiu Wang [off-list ref] wrote:
quoted
quoted
quoted
quoted
+ /* Wait for status of initialization for every enabled pairs */
+ do {
+ udelay(5);
+ regmap_read(asrc->regmap, REG_ASRCFG, ®);
+ reg = (reg >> ASRCFG_INIRQi_SHIFT(0)) & 0x7;
+ } while ((reg != ((asrctr >> ASRCTR_ASRCEi_SHIFT(0)) & 0x7)) && --retry);
+
+ /* FIXME: Doesn't treat initialization timeout as error */
+ if (!retry)
+ dev_warn(dev, "initialization isn't finished\n");
Any reason why not just dev_err?
Just hesitate to use dev_err. if use dev_err, then should return an error.
May one of the pairs is finished, it still can continue.
Makes sense. In that case, why "FIXME" :)
Just want to have a record/note here, need to care about this warning.
"FIXME" feels like something is wrong and literally means that it is
waiting for a fix/solution. In your case, it's not waiting for a fix
at all, but just an annotation? So, shouldn't it be just "Note:"?
+
+ /* FIXME: Doesn't treat initialization timeout as error */
+ if (!retry)
+ dev_warn(dev, "initialization isn't finished\n");
Any reason why not just dev_err?
Just hesitate to use dev_err. if use dev_err, then should return an
error.
quoted
quoted
quoted
May one of the pairs is finished, it still can continue.
Makes sense. In that case, why "FIXME" :)
quoted
Just want to have a record/note here, need to care about this warning.
"FIXME" feels like something is wrong and literally means that it is
waiting for a fix/solution. In your case, it's not waiting for a fix
at all, but just an annotation? So, shouldn't it be just "Note:"?