Commit 9da776ba authored by Curtis Malainey's avatar Curtis Malainey Committed by Mark Brown

ASoC: rt5677: Wait for DSP to boot before loading firmware

Wait for hardware to startup. If we load before hardware is ready we
could end up corrupting the firmware.
Signed-off-by: default avatarCurtis Malainey <cujomalainey@chromium.org>
Link: https://lore.kernel.org/r/20191106011335.223061-12-cujomalainey@chromium.orgSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent ba0b3a97
...@@ -892,6 +892,7 @@ static void rt5677_dsp_work(struct work_struct *work) ...@@ -892,6 +892,7 @@ static void rt5677_dsp_work(struct work_struct *work)
container_of(work, struct rt5677_priv, dsp_work.work); container_of(work, struct rt5677_priv, dsp_work.work);
static bool activity; static bool activity;
bool enable = rt5677->dsp_vad_en; bool enable = rt5677->dsp_vad_en;
int i, val;
dev_info(rt5677->component->dev, "DSP VAD: enable=%d, activity=%d\n", dev_info(rt5677->component->dev, "DSP VAD: enable=%d, activity=%d\n",
...@@ -913,6 +914,18 @@ static void rt5677_dsp_work(struct work_struct *work) ...@@ -913,6 +914,18 @@ static void rt5677_dsp_work(struct work_struct *work)
rt5677_set_vad_source(rt5677); rt5677_set_vad_source(rt5677);
rt5677_set_dsp_mode(rt5677, true); rt5677_set_dsp_mode(rt5677, true);
#define RT5677_BOOT_RETRY 20
for (i = 0; i < RT5677_BOOT_RETRY; i++) {
regmap_read(rt5677->regmap, RT5677_PWR_DSP_ST, &val);
if (val == 0x3ff)
break;
udelay(500);
}
if (i == RT5677_BOOT_RETRY && val != 0x3ff) {
dev_err(rt5677->component->dev, "DSP Boot Timed Out!");
return;
}
/* Boot the firmware from IRAM instead of SRAM0. */ /* Boot the firmware from IRAM instead of SRAM0. */
rt5677_dsp_mode_i2c_write_addr(rt5677, RT5677_DSP_BOOT_VECTOR, rt5677_dsp_mode_i2c_write_addr(rt5677, RT5677_DSP_BOOT_VECTOR,
0x0009, 0x0003); 0x0009, 0x0003);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment