As libraries are lost in D3, they need to be reloaded on D0 entry. Cannonlake's library load process is equivalent to Broxton's, thus reuse the existing one.
Signed-off-by: Cezary Rojewski cezary.rojewski@intel.com --- sound/soc/intel/skylake/bxt-sst.c | 3 ++- sound/soc/intel/skylake/cnl-sst.c | 11 +++++++++++ sound/soc/intel/skylake/skl-sst-dsp.h | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/sound/soc/intel/skylake/bxt-sst.c b/sound/soc/intel/skylake/bxt-sst.c index 5bece3a6d741..cc9507d4702b 100644 --- a/sound/soc/intel/skylake/bxt-sst.c +++ b/sound/soc/intel/skylake/bxt-sst.c @@ -45,7 +45,7 @@ static unsigned int bxt_get_errorcode(struct sst_dsp *ctx) return sst_dsp_shim_read(ctx, BXT_ADSP_ERROR_CODE); }
-static int +int bxt_load_library(struct sst_dsp *ctx, struct skl_lib_info *linfo, int lib_count) { struct snd_dma_buffer dmab; @@ -88,6 +88,7 @@ bxt_load_library(struct sst_dsp *ctx, struct skl_lib_info *linfo, int lib_count) skl_release_library(linfo, lib_count); return ret; } +EXPORT_SYMBOL_GPL(bxt_load_library);
/* * First boot sequence has some extra steps. Core 0 waits for power diff --git a/sound/soc/intel/skylake/cnl-sst.c b/sound/soc/intel/skylake/cnl-sst.c index 8984653d925d..a2b3bce631fc 100644 --- a/sound/soc/intel/skylake/cnl-sst.c +++ b/sound/soc/intel/skylake/cnl-sst.c @@ -179,6 +179,16 @@ static int cnl_set_dsp_D0(struct sst_dsp *ctx, unsigned int core_id) return ret; }
+ if (cnl->lib_count > 1) { + ret = ctx->fw_ops.load_library(ctx, cnl->lib_info, + cnl->lib_count); + if (ret < 0) { + dev_err(ctx->dev, + "reload libs failed: %d\n", ret); + return ret; + } + } + cnl->cores.state[core_id] = SKL_DSP_RUNNING; return ret; } @@ -273,6 +283,7 @@ static const struct skl_dsp_fw_ops cnl_fw_ops = { .set_state_D3 = cnl_set_dsp_D3, .load_fw = cnl_load_base_firmware, .get_fw_errcode = cnl_get_errno, + .load_library = bxt_load_library, };
static struct sst_ops cnl_ops = { diff --git a/sound/soc/intel/skylake/skl-sst-dsp.h b/sound/soc/intel/skylake/skl-sst-dsp.h index 4da240582454..06979652985c 100644 --- a/sound/soc/intel/skylake/skl-sst-dsp.h +++ b/sound/soc/intel/skylake/skl-sst-dsp.h @@ -228,6 +228,8 @@ int bxt_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, struct skl_dev **dsp); void skl_sst_dsp_cleanup(struct device *dev, struct skl_dev *skl); void bxt_sst_dsp_cleanup(struct device *dev, struct skl_dev *skl); +int bxt_load_library(struct sst_dsp *ctx, struct skl_lib_info *linfo, + int lib_count);
int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw, unsigned int offset, int index);