alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] SOF Fixes for S0iX suspend/resume sequence
@ 2020-07-27 18:36 Ranjani Sridharan
  2020-07-27 18:36 ` [PATCH 1/2] ASoC: SOF: Intel: fix the suspend procedure to support s0ix entry Ranjani Sridharan
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Ranjani Sridharan @ 2020-07-27 18:36 UTC (permalink / raw)
  To: alsa-devel; +Cc: tiwai, broonie, Ranjani Sridharan

This set of patches is required for facilitating system S0ix
entry when the DSP is in D0I3. This first patch adds the missing
CORB/RIRB DMA stop and restart to the suspend/resume sequence along
with powering up/down the links. The second patch ensures that the
FW traces are disabled when the system enters S0ix with the DSP in D0I3.

Marcin Rajwa (2):
  ASoC: SOF: Intel: fix the suspend procedure to support s0ix entry
  ASoC: SOF: Intel: disable traces when switching to S0Ix D0I3

 sound/soc/sof/intel/hda-dsp.c | 48 ++++++++++++++++++++++++++++++++---
 1 file changed, 44 insertions(+), 4 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] ASoC: SOF: Intel: fix the suspend procedure to support s0ix entry
  2020-07-27 18:36 [PATCH 0/2] SOF Fixes for S0iX suspend/resume sequence Ranjani Sridharan
@ 2020-07-27 18:36 ` Ranjani Sridharan
  2020-07-27 18:36 ` [PATCH 2/2] ASoC: SOF: Intel: disable traces when switching to S0Ix D0I3 Ranjani Sridharan
  2020-07-28 16:30 ` [PATCH 0/2] SOF Fixes for S0iX suspend/resume sequence Mark Brown
  2 siblings, 0 replies; 4+ messages in thread
From: Ranjani Sridharan @ 2020-07-27 18:36 UTC (permalink / raw)
  To: alsa-devel
  Cc: Marcin Rajwa, Kai Vehmanen, tiwai, Keyon Jie,
	Pierre-Louis Bossart, Ranjani Sridharan, broonie

From: Marcin Rajwa <marcin.rajwa@linux.intel.com>

This patch fixes the suspend & resume procedure to allow entry into the
low power states with some streams being active as a wake source - wake on
voice is a perfect example. The current implementation does not stop
the CORB/RIRB DMA and does not power down the HDA links. With firmware's
help, the platform has been able to still enter s0ix state on older
platforms, but the sequence is still incorrect, and the additional
driver actions are needed to ensure correct s0ix behaviour.

Signed-off-by: Marcin Rajwa <marcin.rajwa@linux.intel.com>
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
---
 sound/soc/sof/intel/hda-dsp.c | 38 +++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/sound/soc/sof/intel/hda-dsp.c b/sound/soc/sof/intel/hda-dsp.c
index 4a40944acaef..89961397010a 100644
--- a/sound/soc/sof/intel/hda-dsp.c
+++ b/sound/soc/sof/intel/hda-dsp.c
@@ -696,12 +696,35 @@ int hda_dsp_resume(struct snd_sof_dev *sdev)
 		.state = SOF_DSP_PM_D0,
 		.substate = SOF_HDA_DSP_PM_D0I0,
 	};
+#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
+	struct hdac_bus *bus = sof_to_bus(sdev);
+	struct hdac_ext_link *hlink = NULL;
+#endif
 	int ret;
 
 	/* resume from D0I3 */
 	if (sdev->dsp_power_state.state == SOF_DSP_PM_D0) {
 		hda_codec_i915_display_power(sdev, true);
 
+#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
+		/* power up links that were active before suspend */
+		list_for_each_entry(hlink, &bus->hlink_list, list) {
+			if (hlink->ref_count) {
+				ret = snd_hdac_ext_bus_link_power_up(hlink);
+				if (ret < 0) {
+					dev_dbg(sdev->dev,
+						"error %x in %s: failed to power up links",
+						ret, __func__);
+					return ret;
+				}
+			}
+		}
+
+		/* set up CORB/RIRB buffers if was on before suspend */
+		if (bus->cmd_dma_state)
+			snd_hdac_bus_init_cmd_io(bus);
+#endif
+
 		/* Set DSP power state */
 		ret = snd_sof_dsp_set_power_state(sdev, &target_state);
 		if (ret < 0) {
@@ -808,6 +831,21 @@ int hda_dsp_suspend(struct snd_sof_dev *sdev, u32 target_state)
 						HDA_VS_INTEL_EM2_L1SEN,
 						HDA_VS_INTEL_EM2_L1SEN);
 
+#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
+		/* stop the CORB/RIRB DMA if it is On */
+		if (bus->cmd_dma_state)
+			snd_hdac_bus_stop_cmd_io(bus);
+
+		/* no link can be powered in s0ix state */
+		ret = snd_hdac_ext_bus_link_power_down_all(bus);
+		if (ret < 0) {
+			dev_dbg(sdev->dev,
+				"error %d in %s: failed to power down links",
+				ret, __func__);
+			return ret;
+		}
+#endif
+
 		/* enable the system waking up via IPC IRQ */
 		enable_irq_wake(pci->irq);
 		pci_save_state(pci);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] ASoC: SOF: Intel: disable traces when switching to S0Ix D0I3
  2020-07-27 18:36 [PATCH 0/2] SOF Fixes for S0iX suspend/resume sequence Ranjani Sridharan
  2020-07-27 18:36 ` [PATCH 1/2] ASoC: SOF: Intel: fix the suspend procedure to support s0ix entry Ranjani Sridharan
@ 2020-07-27 18:36 ` Ranjani Sridharan
  2020-07-28 16:30 ` [PATCH 0/2] SOF Fixes for S0iX suspend/resume sequence Mark Brown
  2 siblings, 0 replies; 4+ messages in thread
From: Ranjani Sridharan @ 2020-07-27 18:36 UTC (permalink / raw)
  To: alsa-devel
  Cc: Marcin Rajwa, Kai Vehmanen, tiwai, Keyon Jie,
	Pierre-Louis Bossart, Ranjani Sridharan, broonie

From: Marcin Rajwa <marcin.rajwa@linux.intel.com>

We should always disable DMA trace on S0Ix. When staying at S0-D0I3,
we should enable DMA trace while both DMA Trace debug is enabled and
hda_enable_trace_D0I3_S0 is set. This commit corrects the existed
logic errors about that.

Signed-off-by: Marcin Rajwa <marcin.rajwa@linux.intel.com>
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
---
 sound/soc/sof/intel/hda-dsp.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/sound/soc/sof/intel/hda-dsp.c b/sound/soc/sof/intel/hda-dsp.c
index 89961397010a..ed4d65a29d3a 100644
--- a/sound/soc/sof/intel/hda-dsp.c
+++ b/sound/soc/sof/intel/hda-dsp.c
@@ -408,11 +408,13 @@ static int hda_dsp_set_D0_state(struct snd_sof_dev *sdev,
 		value = SOF_HDA_VS_D0I3C_I3;
 
 		/*
-		 * Trace DMA is disabled by default when the DSP enters D0I3.
-		 * But it can be kept enabled when the DSP enters D0I3 while the
-		 * system is in S0 for debug.
+		 * Trace DMA need to be disabled when the DSP enters
+		 * D0I3 for S0Ix suspend, but it can be kept enabled
+		 * when the DSP enters D0I3 while the system is in S0
+		 * for debug purpose.
 		 */
-		if (hda_enable_trace_D0I3_S0 &&
+		if (!sdev->dtrace_is_supported ||
+		    !hda_enable_trace_D0I3_S0 ||
 		    sdev->system_suspend_target != SOF_SUSPEND_NONE)
 			flags = HDA_PM_NO_DMA_TRACE;
 	} else {
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/2] SOF Fixes for S0iX suspend/resume sequence
  2020-07-27 18:36 [PATCH 0/2] SOF Fixes for S0iX suspend/resume sequence Ranjani Sridharan
  2020-07-27 18:36 ` [PATCH 1/2] ASoC: SOF: Intel: fix the suspend procedure to support s0ix entry Ranjani Sridharan
  2020-07-27 18:36 ` [PATCH 2/2] ASoC: SOF: Intel: disable traces when switching to S0Ix D0I3 Ranjani Sridharan
@ 2020-07-28 16:30 ` Mark Brown
  2 siblings, 0 replies; 4+ messages in thread
From: Mark Brown @ 2020-07-28 16:30 UTC (permalink / raw)
  To: alsa-devel, Ranjani Sridharan; +Cc: tiwai

On Mon, 27 Jul 2020 11:36:11 -0700, Ranjani Sridharan wrote:
> This set of patches is required for facilitating system S0ix
> entry when the DSP is in D0I3. This first patch adds the missing
> CORB/RIRB DMA stop and restart to the suspend/resume sequence along
> with powering up/down the links. The second patch ensures that the
> FW traces are disabled when the system enters S0ix with the DSP in D0I3.
> 
> Marcin Rajwa (2):
>   ASoC: SOF: Intel: fix the suspend procedure to support s0ix entry
>   ASoC: SOF: Intel: disable traces when switching to S0Ix D0I3
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/2] ASoC: SOF: Intel: fix the suspend procedure to support s0ix entry
      commit: 195f101980dc4c0d0093007d7daac68ec2270f95
[2/2] ASoC: SOF: Intel: disable traces when switching to S0Ix D0I3
      commit: 79560b8aeb01a715f75060e40085e641248bee51

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-07-28 16:34 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-27 18:36 [PATCH 0/2] SOF Fixes for S0iX suspend/resume sequence Ranjani Sridharan
2020-07-27 18:36 ` [PATCH 1/2] ASoC: SOF: Intel: fix the suspend procedure to support s0ix entry Ranjani Sridharan
2020-07-27 18:36 ` [PATCH 2/2] ASoC: SOF: Intel: disable traces when switching to S0Ix D0I3 Ranjani Sridharan
2020-07-28 16:30 ` [PATCH 0/2] SOF Fixes for S0iX suspend/resume sequence Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).