aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSenthilnathan Veppur <senthilnathanx.veppur@intel.com>2016-06-13 08:29:02 -0400
committerMark Brown <broonie@kernel.org>2016-06-14 09:59:33 -0400
commit2023576dd74c9afdb25692f7e9ac9a837e8cf3bd (patch)
treee9b377b738da108df64c217c16295c5d10f30e0e
parent1665c177abf40338e7b5f1ae465d3aaabe5af9d0 (diff)
ASoC: Intel: Skylake: Update FW purge for Broxton
Broxton needs to send Purge firmware IPC to DSP before downloading the firmware. The DMA id needs to be updated for that. While at it also update Broxton boot sequence to send purge request after power up and before yanking off reset. Signed-off-by: Senthilnathan Veppur <senthilnathanx.veppur@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/intel/skylake/bxt-sst.c16
-rw-r--r--sound/soc/intel/skylake/skl-sst-dsp.c4
-rw-r--r--sound/soc/intel/skylake/skl-sst-dsp.h2
3 files changed, 17 insertions, 5 deletions
diff --git a/sound/soc/intel/skylake/bxt-sst.c b/sound/soc/intel/skylake/bxt-sst.c
index e50bac74f4a8..622da5d3e3b3 100644
--- a/sound/soc/intel/skylake/bxt-sst.c
+++ b/sound/soc/intel/skylake/bxt-sst.c
@@ -58,13 +58,19 @@ static int sst_bxt_prepare_fw(struct sst_dsp *ctx,
58 ctx->dsp_ops.stream_tag = stream_tag; 58 ctx->dsp_ops.stream_tag = stream_tag;
59 memcpy(ctx->dmab.area, fwdata, fwsize); 59 memcpy(ctx->dmab.area, fwdata, fwsize);
60 60
61 ret = skl_dsp_core_power_up(ctx);
62 if (ret < 0) {
63 dev_err(ctx->dev, "Boot dsp core failed ret: %d\n", ret);
64 goto base_fw_load_failed;
65 }
66
61 /* Purge FW request */ 67 /* Purge FW request */
62 sst_dsp_shim_write(ctx, SKL_ADSP_REG_HIPCI, SKL_ADSP_REG_HIPCI_BUSY | 68 sst_dsp_shim_write(ctx, SKL_ADSP_REG_HIPCI, SKL_ADSP_REG_HIPCI_BUSY |
63 BXT_IPC_PURGE_FW | (stream_tag - 1)); 69 (BXT_IPC_PURGE_FW | ((stream_tag - 1) << 9)));
64 70
65 ret = skl_dsp_enable_core(ctx); 71 ret = skl_dsp_start_core(ctx);
66 if (ret < 0) { 72 if (ret < 0) {
67 dev_err(ctx->dev, "Boot dsp core failed ret: %d\n", ret); 73 dev_err(ctx->dev, "Start dsp core failed ret: %d\n", ret);
68 ret = -EIO; 74 ret = -EIO;
69 goto base_fw_load_failed; 75 goto base_fw_load_failed;
70 } 76 }
@@ -161,6 +167,10 @@ static int bxt_load_base_firmware(struct sst_dsp *ctx)
161 if (ret < 0) { 167 if (ret < 0) {
162 ret = sst_bxt_prepare_fw(ctx, stripped_fw.data, stripped_fw.size); 168 ret = sst_bxt_prepare_fw(ctx, stripped_fw.data, stripped_fw.size);
163 if (ret < 0) { 169 if (ret < 0) {
170 dev_err(ctx->dev, "Error code=0x%x: FW status=0x%x\n",
171 sst_dsp_shim_read(ctx, BXT_ADSP_ERROR_CODE),
172 sst_dsp_shim_read(ctx, BXT_ADSP_FW_STATUS));
173
164 dev_err(ctx->dev, "Core En/ROM load fail:%d\n", ret); 174 dev_err(ctx->dev, "Core En/ROM load fail:%d\n", ret);
165 goto sst_load_base_firmware_failed; 175 goto sst_load_base_firmware_failed;
166 } 176 }
diff --git a/sound/soc/intel/skylake/skl-sst-dsp.c b/sound/soc/intel/skylake/skl-sst-dsp.c
index 13c19855ee1a..37b1d24a9a9d 100644
--- a/sound/soc/intel/skylake/skl-sst-dsp.c
+++ b/sound/soc/intel/skylake/skl-sst-dsp.c
@@ -114,7 +114,7 @@ static int skl_dsp_reset_core(struct sst_dsp *ctx)
114 return skl_dsp_core_set_reset_state(ctx); 114 return skl_dsp_core_set_reset_state(ctx);
115} 115}
116 116
117static int skl_dsp_start_core(struct sst_dsp *ctx) 117int skl_dsp_start_core(struct sst_dsp *ctx)
118{ 118{
119 int ret; 119 int ret;
120 120
@@ -140,7 +140,7 @@ static int skl_dsp_start_core(struct sst_dsp *ctx)
140 return ret; 140 return ret;
141} 141}
142 142
143static int skl_dsp_core_power_up(struct sst_dsp *ctx) 143int skl_dsp_core_power_up(struct sst_dsp *ctx)
144{ 144{
145 int ret; 145 int ret;
146 146
diff --git a/sound/soc/intel/skylake/skl-sst-dsp.h b/sound/soc/intel/skylake/skl-sst-dsp.h
index 7efaf642c10a..22fbe1075cb5 100644
--- a/sound/soc/intel/skylake/skl-sst-dsp.h
+++ b/sound/soc/intel/skylake/skl-sst-dsp.h
@@ -182,5 +182,7 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, unsigned int offset);
182void skl_freeup_uuid_list(struct skl_sst *ctx); 182void skl_freeup_uuid_list(struct skl_sst *ctx);
183 183
184int skl_dsp_strip_extended_manifest(struct firmware *fw); 184int skl_dsp_strip_extended_manifest(struct firmware *fw);
185int skl_dsp_start_core(struct sst_dsp *ctx);
186int skl_dsp_core_power_up(struct sst_dsp *ctx);
185 187
186#endif /*__SKL_SST_DSP_H__*/ 188#endif /*__SKL_SST_DSP_H__*/