From 33c0b718ea6bcacb733d094f178a369e508b653c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 22 Jul 2025 11:39:12 +0200 Subject: [PATCH] 5.4-stable patches added patches: asoc-fsl_sai-force-a-software-reset-when-starting-in-consumer-mode.patch --- ...reset-when-starting-in-consumer-mode.patch | 59 +++++++++++++++++++ queue-5.4/series | 1 + 2 files changed, 60 insertions(+) create mode 100644 queue-5.4/asoc-fsl_sai-force-a-software-reset-when-starting-in-consumer-mode.patch diff --git a/queue-5.4/asoc-fsl_sai-force-a-software-reset-when-starting-in-consumer-mode.patch b/queue-5.4/asoc-fsl_sai-force-a-software-reset-when-starting-in-consumer-mode.patch new file mode 100644 index 0000000000..6c52ff3aca --- /dev/null +++ b/queue-5.4/asoc-fsl_sai-force-a-software-reset-when-starting-in-consumer-mode.patch @@ -0,0 +1,59 @@ +From dc78f7e59169d3f0e6c3c95d23dc8e55e95741e2 Mon Sep 17 00:00:00 2001 +From: Arun Raghavan +Date: Thu, 26 Jun 2025 09:08:25 -0400 +Subject: ASoC: fsl_sai: Force a software reset when starting in consumer mode + +From: Arun Raghavan + +commit dc78f7e59169d3f0e6c3c95d23dc8e55e95741e2 upstream. + +On an imx8mm platform with an external clock provider, when running the +receiver (arecord) and triggering an xrun with xrun_injection, we see a +channel swap/offset. This happens sometimes when running only the +receiver, but occurs reliably if a transmitter (aplay) is also +concurrently running. + +It seems that the SAI loses track of frame sync during the trigger stop +-> trigger start cycle that occurs during an xrun. Doing just a FIFO +reset in this case does not suffice, and only a software reset seems to +get it back on track. + +This looks like the same h/w bug that is already handled for the +producer case, so we now do the reset unconditionally on config disable. + +Signed-off-by: Arun Raghavan +Reported-by: Pieterjan Camerlynck +Fixes: 3e3f8bd56955 ("ASoC: fsl_sai: fix no frame clk in master mode") +Cc: stable@vger.kernel.org +Reviewed-by: Fabio Estevam +Link: https://patch.msgid.link/20250626130858.163825-1-arun@arunraghavan.net +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/fsl/fsl_sai.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +--- a/sound/soc/fsl/fsl_sai.c ++++ b/sound/soc/fsl/fsl_sai.c +@@ -565,13 +565,15 @@ static void fsl_sai_config_disable(struc + * anymore. Add software reset to fix this issue. + * This is a hardware bug, and will be fix in the + * next sai version. ++ * ++ * In consumer mode, this can happen even after a ++ * single open/close, especially if both tx and rx ++ * are running concurrently. + */ +- if (!sai->is_slave_mode) { +- /* Software Reset */ +- regmap_write(sai->regmap, FSL_SAI_xCSR(tx, ofs), FSL_SAI_CSR_SR); +- /* Clear SR bit to finish the reset */ +- regmap_write(sai->regmap, FSL_SAI_xCSR(tx, ofs), 0); +- } ++ /* Software Reset */ ++ regmap_write(sai->regmap, FSL_SAI_xCSR(tx, ofs), FSL_SAI_CSR_SR); ++ /* Clear SR bit to finish the reset */ ++ regmap_write(sai->regmap, FSL_SAI_xCSR(tx, ofs), 0); + } + + static int fsl_sai_trigger(struct snd_pcm_substream *substream, int cmd, diff --git a/queue-5.4/series b/queue-5.4/series index a2f6c8ac3d..9c85644b64 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -39,3 +39,4 @@ net-vlan-fix-vlan-0-refcount-imbalance-of-toggling-f.patch net-sched-return-null-when-htb_lookup_leaf-encounter.patch usb-musb-fix-gadget-state-on-disconnect.patch usb-dwc3-qcom-don-t-leave-bcr-asserted.patch +asoc-fsl_sai-force-a-software-reset-when-starting-in-consumer-mode.patch -- 2.47.2