This is a note to let you know that I've just added the patch titled ASoC: Intel: Allow for ROM init retry on CNL platforms to the 5.4-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: asoc-intel-allow-for-rom-init-retry-on-cnl-platforms.patch and it can be found in the queue-5.4 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From foo@baz Tue Dec 1 09:41:56 AM CET 2020 From: Cezary Rojewski <cezary.rojewski@xxxxxxxxx> Date: Sun, 29 Nov 2020 12:41:45 +0100 Subject: ASoC: Intel: Allow for ROM init retry on CNL platforms To: stable@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx Cc: alsa-devel@xxxxxxxxxxxxxxxx, broonie@xxxxxxxxxx, tiwai@xxxxxxxx, pierre-louis.bossart@xxxxxxxxxxxxxxx, mateusz.gorski@xxxxxxxxxxxxxxx, Cezary Rojewski <cezary.rojewski@xxxxxxxxx> Message-ID: <20201129114148.13772-6-cezary.rojewski@xxxxxxxxx> From: Cezary Rojewski <cezary.rojewski@xxxxxxxxx> commit 024aa45f55ccd40704cfdef61b2a8b6d0de9cdd1 upstream. Due to unconditional initial timeouts, firmware may fail to load during its initialization. This issue cannot be resolved on driver side as it is caused by external sources such as CSME but has to be accounted for nonetheless. Fixes: cb6a55284629 ("ASoC: Intel: cnl: Add sst library functions for cnl platform") Signed-off-by: Cezary Rojewski <cezary.rojewski@xxxxxxxxx> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> Link: https://lore.kernel.org/r/20200305145314.32579-7-cezary.rojewski@xxxxxxxxx Signed-off-by: Mark Brown <broonie@xxxxxxxxxx> Cc: <stable@xxxxxxxxxxxxxxx> # 5.4.x Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- sound/soc/intel/skylake/bxt-sst.c | 2 -- sound/soc/intel/skylake/cnl-sst.c | 15 ++++++++++----- sound/soc/intel/skylake/skl-sst-dsp.h | 1 + 3 files changed, 11 insertions(+), 7 deletions(-) --- a/sound/soc/intel/skylake/bxt-sst.c +++ b/sound/soc/intel/skylake/bxt-sst.c @@ -38,8 +38,6 @@ /* Delay before scheduling D0i3 entry */ #define BXT_D0I3_DELAY 5000 -#define BXT_FW_ROM_INIT_RETRY 3 - static unsigned int bxt_get_errorcode(struct sst_dsp *ctx) { return sst_dsp_shim_read(ctx, BXT_ADSP_ERROR_CODE); --- a/sound/soc/intel/skylake/cnl-sst.c +++ b/sound/soc/intel/skylake/cnl-sst.c @@ -109,7 +109,7 @@ static int cnl_load_base_firmware(struct { struct firmware stripped_fw; struct skl_dev *cnl = ctx->thread_context; - int ret; + int ret, i; if (!ctx->fw) { ret = request_firmware(&ctx->fw, ctx->fw_name, ctx->dev); @@ -131,12 +131,16 @@ static int cnl_load_base_firmware(struct stripped_fw.size = ctx->fw->size; skl_dsp_strip_extended_manifest(&stripped_fw); - ret = cnl_prepare_fw(ctx, stripped_fw.data, stripped_fw.size); - if (ret < 0) { - dev_err(ctx->dev, "prepare firmware failed: %d\n", ret); - goto cnl_load_base_firmware_failed; + for (i = 0; i < BXT_FW_ROM_INIT_RETRY; i++) { + ret = cnl_prepare_fw(ctx, stripped_fw.data, stripped_fw.size); + if (!ret) + break; + dev_dbg(ctx->dev, "prepare firmware failed: %d\n", ret); } + if (ret < 0) + goto cnl_load_base_firmware_failed; + ret = sst_transfer_fw_host_dma(ctx); if (ret < 0) { dev_err(ctx->dev, "transfer firmware failed: %d\n", ret); @@ -158,6 +162,7 @@ static int cnl_load_base_firmware(struct return 0; cnl_load_base_firmware_failed: + dev_err(ctx->dev, "firmware load failed: %d\n", ret); release_firmware(ctx->fw); ctx->fw = NULL; --- a/sound/soc/intel/skylake/skl-sst-dsp.h +++ b/sound/soc/intel/skylake/skl-sst-dsp.h @@ -67,6 +67,7 @@ struct skl_dev; #define SKL_FW_INIT 0x1 #define SKL_FW_RFW_START 0xf +#define BXT_FW_ROM_INIT_RETRY 3 #define SKL_ADSPIC_IPC 1 #define SKL_ADSPIS_IPC 1 Patches currently in stable-queue which might be from cezary.rojewski@xxxxxxxxx are queue-5.4/asoc-intel-skylake-select-hda-configuration-permissively.patch queue-5.4/asoc-intel-skylake-enable-codec-wakeup-during-chip-init.patch queue-5.4/asoc-intel-allow-for-rom-init-retry-on-cnl-platforms.patch queue-5.4/asoc-intel-skylake-await-purge-request-ack-on-cnl.patch queue-5.4/asoc-intel-skylake-remove-superfluous-chip-initialization.patch queue-5.4/asoc-intel-skylake-shield-against-no-nhlt-configurations.patch queue-5.4/asoc-intel-multiple-i-o-pcm-format-support-for-pipe.patch queue-5.4/asoc-intel-skylake-automatic-dmic-format-configuration-according-to-information-from-nhlt.patch