forked from luck/tmp_suning_uos_patched
ASoC: SOF: Intel: HDA: fix core status verification
[ Upstream commit 927280909fa7d8e61596800d82f18047c6cfbbe4 ]
When checking for enabled cores it isn't enough to check that
some of the requested cores are running, we have to check that
all of them are.
Fixes: 747503b181
("ASoC: SOF: Intel: Add Intel specific HDA DSP HW operations")
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20210322163728.16616-2-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
ef4ddd1d6d
commit
f6db9dbfa6
|
@ -226,10 +226,17 @@ bool hda_dsp_core_is_enabled(struct snd_sof_dev *sdev,
|
|||
|
||||
val = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_ADSPCS);
|
||||
|
||||
is_enable = (val & HDA_DSP_ADSPCS_CPA_MASK(core_mask)) &&
|
||||
(val & HDA_DSP_ADSPCS_SPA_MASK(core_mask)) &&
|
||||
!(val & HDA_DSP_ADSPCS_CRST_MASK(core_mask)) &&
|
||||
!(val & HDA_DSP_ADSPCS_CSTALL_MASK(core_mask));
|
||||
#define MASK_IS_EQUAL(v, m, field) ({ \
|
||||
u32 _m = field(m); \
|
||||
((v) & _m) == _m; \
|
||||
})
|
||||
|
||||
is_enable = MASK_IS_EQUAL(val, core_mask, HDA_DSP_ADSPCS_CPA_MASK) &&
|
||||
MASK_IS_EQUAL(val, core_mask, HDA_DSP_ADSPCS_SPA_MASK) &&
|
||||
!(val & HDA_DSP_ADSPCS_CRST_MASK(core_mask)) &&
|
||||
!(val & HDA_DSP_ADSPCS_CSTALL_MASK(core_mask));
|
||||
|
||||
#undef MASK_IS_EQUAL
|
||||
|
||||
dev_dbg(sdev->dev, "DSP core(s) enabled? %d : core_mask %x\n",
|
||||
is_enable, core_mask);
|
||||
|
|
Loading…
Reference in New Issue
Block a user