ASoC: SOF: update dsp core power status in common APIs
Only manage enabled_cores_mask in common snd_sof_dsp_core_power_up/down APIs to ensure it stays in sync with actual DSP core state. Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Link: https://lore.kernel.org/r/20210128093850.1041387-4-kai.vehmanen@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
cedd502d18
commit
42077f08b3
@ -811,7 +811,6 @@ EXPORT_SYMBOL(snd_sof_load_firmware);
|
||||
int snd_sof_run_firmware(struct snd_sof_dev *sdev)
|
||||
{
|
||||
int ret;
|
||||
int init_core_mask;
|
||||
|
||||
init_waitqueue_head(&sdev->boot_wait);
|
||||
|
||||
@ -843,8 +842,6 @@ int snd_sof_run_firmware(struct snd_sof_dev *sdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
init_core_mask = ret;
|
||||
|
||||
/*
|
||||
* now wait for the DSP to boot. There are 3 possible outcomes:
|
||||
* 1. Boot wait times out indicating FW boot failure.
|
||||
@ -874,9 +871,6 @@ int snd_sof_run_firmware(struct snd_sof_dev *sdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* fw boot is complete. Update the active cores mask */
|
||||
sdev->enabled_cores_mask = init_core_mask;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(snd_sof_run_firmware);
|
||||
|
@ -76,19 +76,29 @@ static inline int snd_sof_dsp_reset(struct snd_sof_dev *sdev)
|
||||
static inline int snd_sof_dsp_core_power_up(struct snd_sof_dev *sdev,
|
||||
unsigned int core_mask)
|
||||
{
|
||||
if (sof_ops(sdev)->core_power_up)
|
||||
return sof_ops(sdev)->core_power_up(sdev, core_mask);
|
||||
int ret = 0;
|
||||
|
||||
return 0;
|
||||
if (sof_ops(sdev)->core_power_up) {
|
||||
ret = sof_ops(sdev)->core_power_up(sdev, core_mask);
|
||||
if (!ret)
|
||||
sdev->enabled_cores_mask |= core_mask;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int snd_sof_dsp_core_power_down(struct snd_sof_dev *sdev,
|
||||
unsigned int core_mask)
|
||||
{
|
||||
if (sof_ops(sdev)->core_power_down)
|
||||
return sof_ops(sdev)->core_power_down(sdev, core_mask);
|
||||
int ret = 0;
|
||||
|
||||
return 0;
|
||||
if (sof_ops(sdev)->core_power_down) {
|
||||
ret = sof_ops(sdev)->core_power_down(sdev, core_mask);
|
||||
if (!ret)
|
||||
sdev->enabled_cores_mask &= ~core_mask;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* pre/post fw load */
|
||||
|
@ -256,7 +256,6 @@ suspend:
|
||||
|
||||
/* reset FW state */
|
||||
sdev->fw_state = SOF_FW_BOOT_NOT_STARTED;
|
||||
sdev->enabled_cores_mask = 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1352,10 +1352,6 @@ static int sof_core_enable(struct snd_sof_dev *sdev, int core)
|
||||
core, ret);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* update enabled cores mask */
|
||||
sdev->enabled_cores_mask |= BIT(core);
|
||||
|
||||
return ret;
|
||||
err:
|
||||
/* power down core if it is host managed and return the original error if this fails too */
|
||||
@ -2603,10 +2599,6 @@ static int sof_widget_unload(struct snd_soc_component *scomp,
|
||||
if (ret < 0)
|
||||
dev_err(scomp->dev, "error: powering down pipeline schedule core %d\n",
|
||||
pipeline->core);
|
||||
|
||||
/* update enabled cores mask */
|
||||
sdev->enabled_cores_mask &= ~(1 << pipeline->core);
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user