clear-pkgs-linux-iot-lts2018/1071-ASoC-Intel-Skylake-BXT...

70 lines
2.4 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Dominik Bozek <dominikx.bozek@intel.com>
Date: Fri, 17 May 2019 10:56:20 +0200
Subject: [PATCH] ASoC: Intel: Skylake: BXT: read FwStatus and ErrorCode before
power down
Reading of FwStatus and ErrorCode after DSP power down always returns FF.
This patch move the reading of that two registers before power down.
Change-Id: I49618851bb297e91501d2a0785c1884562c6ddee
Tracked-On: ACI-5767
Tracked-On: OAM-80502
Signed-off-by: Dominik Bozek <dominikx.bozek@intel.com>
---
sound/soc/intel/skylake/bxt-sst.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/sound/soc/intel/skylake/bxt-sst.c b/sound/soc/intel/skylake/bxt-sst.c
index 887a43bcd43b..7e20ba424efa 100644
--- a/sound/soc/intel/skylake/bxt-sst.c
+++ b/sound/soc/intel/skylake/bxt-sst.c
@@ -213,7 +213,7 @@ int sst_fw_status_poll(struct sst_dsp *ctx, u32 module, u32 state,
* reset/stall and then turn it off
*/
static int sst_bxt_prepare_fw(struct sst_dsp *ctx,
- const void *fwdata, u32 fwsize)
+ const void *fwdata, u32 fwsize, u32 *fwerr, u32 *fwsts)
{
int stream_tag, ret;
@@ -283,6 +283,11 @@ static int sst_bxt_prepare_fw(struct sst_dsp *ctx,
return ret;
base_fw_load_failed:
+ if (fwerr)
+ *fwerr = sst_dsp_shim_read(ctx, BXT_ADSP_ERROR_CODE);
+ if (fwsts)
+ *fwsts = sst_dsp_shim_read(ctx, BXT_ADSP_FW_STATUS);
+
ctx->dsp_ops.cleanup(ctx->dev, &ctx->dmab, stream_tag,
SNDRV_PCM_STREAM_PLAYBACK);
@@ -313,6 +318,7 @@ static int bxt_load_base_firmware(struct sst_dsp *ctx)
struct firmware stripped_fw;
struct skl_sst *skl = ctx->thread_context;
int ret, i;
+ u32 fwerr = 0, fwsts = 0;
if (ctx->fw == NULL) {
ret = request_firmware(&ctx->fw, ctx->fw_name, ctx->dev);
@@ -334,12 +340,10 @@ static int bxt_load_base_firmware(struct sst_dsp *ctx)
skl_dsp_strip_extended_manifest(&stripped_fw);
for (i = 0; i < BXT_FW_INIT_RETRY; i++) {
- ret = sst_bxt_prepare_fw(ctx, stripped_fw.data, stripped_fw.size);
+ ret = sst_bxt_prepare_fw(ctx, stripped_fw.data,
+ stripped_fw.size, &fwerr, &fwsts);
if (ret < 0) {
- dev_err(ctx->dev, "Error code=0x%x: FW status=0x%x\n",
- sst_dsp_shim_read(ctx, BXT_ADSP_ERROR_CODE),
- sst_dsp_shim_read(ctx, BXT_ADSP_FW_STATUS));
-
+ dev_err(ctx->dev, "Error code=0x%x: FW status=0x%x\n", fwerr, fwsts);
dev_err(ctx->dev, "Iteration %d Core En/ROM load fail:%d\n", i, ret);
continue;
}
--
https://clearlinux.org