Message ID | 20230808110627.32375-1-peter.ujfalusi@linux.intel.com |
---|---|
State | New |
Headers | show |
Series | ASoC: SOF: intel: hda: Clean up link DMA for IPC3 during stop | expand |
On 08. 08. 23 19:57, Mark Brown wrote: > On Tue, 08 Aug 2023 14:06:27 +0300, Peter Ujfalusi wrote: >> With IPC3, we reset hw_params during the stop trigger, so we should also >> clean up the link DMA during the stop trigger. >> >> > > Applied to > > https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next > > Thanks! > > [1/1] ASoC: SOF: intel: hda: Clean up link DMA for IPC3 during stop > commit: 90219f1bd273055f1dc1d7bdc0965755b992c045 Hi Mark, if it's not late, this patch should be also applied to the 6.5 tree. It seems that many new laptops are affected (sound may be really weird when an underrun occurs on those devices and users are not really happy). Jaroslav
On Fri, Aug 18, 2023 at 05:08:35PM +0200, Jaroslav Kysela wrote: > On 08. 08. 23 19:57, Mark Brown wrote: > > [1/1] ASoC: SOF: intel: hda: Clean up link DMA for IPC3 during stop > > commit: 90219f1bd273055f1dc1d7bdc0965755b992c045 > if it's not late, this patch should be also applied to the 6.5 tree. It > seems that many new laptops are affected (sound may be really weird when an > underrun occurs on those devices and users are not really happy). It was applied for 6.5, the reports always say for-next due to difficulties with serieses which mix fixes and new development.
On Fri, 18 Aug 2023 17:18:54 +0200, Mark Brown wrote: > > On Fri, Aug 18, 2023 at 05:08:35PM +0200, Jaroslav Kysela wrote: > > On 08. 08. 23 19:57, Mark Brown wrote: > > > > [1/1] ASoC: SOF: intel: hda: Clean up link DMA for IPC3 during stop > > > commit: 90219f1bd273055f1dc1d7bdc0965755b992c045 > > > if it's not late, this patch should be also applied to the 6.5 tree. It > > seems that many new laptops are affected (sound may be really weird when an > > underrun occurs on those devices and users are not really happy). > > It was applied for 6.5, the reports always say for-next due to > difficulties with serieses which mix fixes and new development. Right, the commit is on the way to Linus now. Takashi
On 18. 08. 23 17:18, Mark Brown wrote: > On Fri, Aug 18, 2023 at 05:08:35PM +0200, Jaroslav Kysela wrote: >> On 08. 08. 23 19:57, Mark Brown wrote: > >>> [1/1] ASoC: SOF: intel: hda: Clean up link DMA for IPC3 during stop >>> commit: 90219f1bd273055f1dc1d7bdc0965755b992c045 > >> if it's not late, this patch should be also applied to the 6.5 tree. It >> seems that many new laptops are affected (sound may be really weird when an >> underrun occurs on those devices and users are not really happy). > > It was applied for 6.5, the reports always say for-next due to > difficulties with serieses which mix fixes and new development. Great. Thanks. Jaroslav
diff --git a/sound/soc/sof/intel/hda-dai-ops.c b/sound/soc/sof/intel/hda-dai-ops.c index f3513796c189..f33051eac1c0 100644 --- a/sound/soc/sof/intel/hda-dai-ops.c +++ b/sound/soc/sof/intel/hda-dai-ops.c @@ -372,6 +372,7 @@ static const struct hda_dai_widget_dma_ops hda_ipc4_chain_dma_ops = { static int hda_ipc3_post_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *cpu_dai, struct snd_pcm_substream *substream, int cmd) { + struct hdac_ext_stream *hext_stream = hda_get_hext_stream(sdev, cpu_dai, substream); struct snd_soc_dapm_widget *w = snd_soc_dai_get_widget(cpu_dai, substream->stream); switch (cmd) { @@ -379,9 +380,17 @@ static int hda_ipc3_post_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *c case SNDRV_PCM_TRIGGER_STOP: { struct snd_sof_dai_config_data data = { 0 }; + int ret; data.dai_data = DMA_CHAN_INVALID; - return hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_HW_FREE, &data); + ret = hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_HW_FREE, &data); + if (ret < 0) + return ret; + + if (cmd == SNDRV_PCM_TRIGGER_STOP) + return hda_link_dma_cleanup(substream, hext_stream, cpu_dai); + + break; } case SNDRV_PCM_TRIGGER_PAUSE_PUSH: return hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_PAUSE, NULL); diff --git a/sound/soc/sof/intel/hda-dai.c b/sound/soc/sof/intel/hda-dai.c index 3297dea493aa..863865f3d77e 100644 --- a/sound/soc/sof/intel/hda-dai.c +++ b/sound/soc/sof/intel/hda-dai.c @@ -107,9 +107,8 @@ hda_dai_get_ops(struct snd_pcm_substream *substream, struct snd_soc_dai *cpu_dai return sdai->platform_private; } -static int hda_link_dma_cleanup(struct snd_pcm_substream *substream, - struct hdac_ext_stream *hext_stream, - struct snd_soc_dai *cpu_dai) +int hda_link_dma_cleanup(struct snd_pcm_substream *substream, struct hdac_ext_stream *hext_stream, + struct snd_soc_dai *cpu_dai) { const struct hda_dai_widget_dma_ops *ops = hda_dai_get_ops(substream, cpu_dai); struct sof_intel_hda_stream *hda_stream; diff --git a/sound/soc/sof/intel/hda.h b/sound/soc/sof/intel/hda.h index 3f7c6fb05e5d..5b9e4ebcc18b 100644 --- a/sound/soc/sof/intel/hda.h +++ b/sound/soc/sof/intel/hda.h @@ -963,5 +963,7 @@ const struct hda_dai_widget_dma_ops * hda_select_dai_widget_ops(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget); int hda_dai_config(struct snd_soc_dapm_widget *w, unsigned int flags, struct snd_sof_dai_config_data *data); +int hda_link_dma_cleanup(struct snd_pcm_substream *substream, struct hdac_ext_stream *hext_stream, + struct snd_soc_dai *cpu_dai); #endif