forked from Minki/linux
ASoC: SOF: Intel: hda: modify core_power_up/down op
Modify the core_power_up/down ops for HDA platforms to restrict the core_mask to the ones allowed by chip->cores_mask. This is needed because on some HDA platforms not all cores can be powered up/down by the host and this must be handled internally in the FW. Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@linux.intel.com> Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com> Reviewed-by: Keyon Jie <yang.jie@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Link: https://lore.kernel.org/r/20200910164125.2033062-3-kai.vehmanen@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
64b969177c
commit
914fab3b43
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user