diff options
| author | Mark Brown <broonie@kernel.org> | 2020-09-11 17:52:24 +0300 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2020-09-11 17:52:24 +0300 |
| commit | d70a4412e264cd8ff7a034505184c0b54876532a (patch) | |
| tree | 54f98dc9c5c802e1c847f360ce013283f2ddeea7 /sound/soc/sof/intel/hda-dsp.c | |
| parent | 2b7d52a9ba55c984851dba37800d6006bdc3ec4b (diff) | |
| parent | 52e4d0ae6255446efaaaa2a7a1da7cc1640f78b5 (diff) | |
| download | linux-d70a4412e264cd8ff7a034505184c0b54876532a.tar.xz | |
Merge series "ASoC: SOF: DSP core management fixes for 5.10" from Kai Vehmanen <kai.vehmanen@linux.intel.com>:
This series contains some improvements to how DSP core management
is done in SOF, and adds a distinction between cores managed by
the host versus cores managed by the DSP.
Pierre-Louis Bossart (1):
ASoC: SOF: Intel: hda-loader: s/master/primary
Ranjani Sridharan (3):
ASoC: SOF: rename cores_mask to host_managed_cores_mask
ASoC: SOF: Intel: hda: modify core_power_up/down op
ASoC: SOF: Intel: remove the HDA_DSP_CORE_MASK() macro
sound/soc/sof/intel/apl.c | 2 +-
sound/soc/sof/intel/bdw.c | 2 +-
sound/soc/sof/intel/byt.c | 6 +++---
sound/soc/sof/intel/cnl.c | 15 ++++-----------
sound/soc/sof/intel/hda-dsp.c | 20 +++++++++++++++++---
sound/soc/sof/intel/hda-loader.c | 11 +++++------
sound/soc/sof/intel/hda.c | 2 +-
sound/soc/sof/intel/hda.h | 3 ---
sound/soc/sof/intel/shim.h | 2 +-
sound/soc/sof/intel/tgl.c | 2 +-
10 files changed, 34 insertions(+), 31 deletions(-)
--
2.27.0
Diffstat (limited to 'sound/soc/sof/intel/hda-dsp.c')
| -rw-r--r-- | sound/soc/sof/intel/hda-dsp.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/sound/soc/sof/intel/hda-dsp.c b/sound/soc/sof/intel/hda-dsp.c index ed4d65a29d3a..18ff1c2f5376 100644 --- a/sound/soc/sof/intel/hda-dsp.c +++ b/sound/soc/sof/intel/hda-dsp.c @@ -239,10 +239,15 @@ bool hda_dsp_core_is_enabled(struct snd_sof_dev *sdev, int hda_dsp_enable_core(struct snd_sof_dev *sdev, unsigned int core_mask) { + struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; + const struct sof_intel_dsp_desc *chip = hda->desc; int ret; - /* return if core is already enabled */ - if (hda_dsp_core_is_enabled(sdev, core_mask)) + /* restrict core_mask to host managed cores mask */ + core_mask &= chip->host_managed_cores_mask; + + /* return if core_mask is not valid or cores are already enabled */ + if (!core_mask || hda_dsp_core_is_enabled(sdev, core_mask)) return 0; /* power up */ @@ -259,8 +264,17 @@ int hda_dsp_enable_core(struct snd_sof_dev *sdev, unsigned int core_mask) int hda_dsp_core_reset_power_down(struct snd_sof_dev *sdev, unsigned int core_mask) { + struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; + const struct sof_intel_dsp_desc *chip = hda->desc; int ret; + /* restrict core_mask to host managed cores mask */ + core_mask &= chip->host_managed_cores_mask; + + /* return if core_mask is not valid */ + if (!core_mask) + return 0; + /* place core in reset prior to power down */ ret = hda_dsp_core_stall_reset(sdev, core_mask); if (ret < 0) { @@ -610,7 +624,7 @@ static int hda_suspend(struct snd_sof_dev *sdev, bool runtime_suspend) #endif /* power down DSP */ - ret = hda_dsp_core_reset_power_down(sdev, chip->cores_mask); + ret = hda_dsp_core_reset_power_down(sdev, chip->host_managed_cores_mask); if (ret < 0) { dev_err(sdev->dev, "error: failed to power down core during suspend\n"); |
