Skip to content

Commit 480d9bb

Browse files
crojewsk-intelbroonie
authored andcommitted
ASoC: Intel: avs: Improve logging of firmware loading
Crucial debug information regarding the ROM/firmware status and last known error code is missing in the code loading functions. Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://patch.msgid.link/20250109122216.3667847-10-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 0ca5299 commit 480d9bb

1 file changed

Lines changed: 16 additions & 10 deletions

File tree

sound/soc/intel/avs/loader.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,8 @@ int avs_cldma_load_basefw(struct avs_dev *adev, struct firmware *fw)
167167
(reg & AVS_ROM_INIT_DONE) == AVS_ROM_INIT_DONE,
168168
AVS_ROM_INIT_POLLING_US, SKL_ROM_INIT_TIMEOUT_US);
169169
if (ret < 0) {
170-
dev_err(adev->dev, "rom init timeout: %d\n", ret);
170+
dev_err(adev->dev, "rom init failed: %d, status: 0x%08x, lec: 0x%08x\n",
171+
ret, reg, snd_hdac_adsp_readl(adev, AVS_FW_REG_ERROR_CODE(adev)));
171172
avs_dsp_core_disable(adev, AVS_MAIN_CORE_MASK);
172173
return ret;
173174
}
@@ -180,7 +181,8 @@ int avs_cldma_load_basefw(struct avs_dev *adev, struct firmware *fw)
180181
AVS_FW_INIT_POLLING_US, AVS_FW_INIT_TIMEOUT_US);
181182
hda_cldma_stop(cl);
182183
if (ret < 0) {
183-
dev_err(adev->dev, "transfer fw failed: %d\n", ret);
184+
dev_err(adev->dev, "transfer fw failed: %d, status: 0x%08x, lec: 0x%08x\n",
185+
ret, reg, snd_hdac_adsp_readl(adev, AVS_FW_REG_ERROR_CODE(adev)));
184186
avs_dsp_core_disable(adev, AVS_MAIN_CORE_MASK);
185187
return ret;
186188
}
@@ -313,7 +315,8 @@ avs_hda_init_rom(struct avs_dev *adev, unsigned int dma_id, bool purge)
313315
(reg & 0xF) == APL_ROM_FW_ENTERED,
314316
AVS_ROM_INIT_POLLING_US, APL_ROM_INIT_TIMEOUT_US);
315317
if (ret < 0) {
316-
dev_err(adev->dev, "rom init timeout: %d\n", ret);
318+
dev_err(adev->dev, "rom init failed: %d, status: 0x%08x, lec: 0x%08x\n",
319+
ret, reg, snd_hdac_adsp_readl(adev, AVS_FW_REG_ERROR_CODE(adev)));
317320
goto err;
318321
}
319322

@@ -337,15 +340,15 @@ static int avs_imr_load_basefw(struct avs_dev *adev)
337340

338341
/* DMA id ignored when flashing from IMR as no transfer occurs. */
339342
ret = avs_hda_init_rom(adev, 0, false);
340-
if (ret < 0) {
341-
dev_err(adev->dev, "rom init failed: %d\n", ret);
343+
if (ret < 0)
342344
return ret;
343-
}
344345

345346
ret = wait_for_completion_timeout(&adev->fw_ready,
346347
msecs_to_jiffies(AVS_FW_INIT_TIMEOUT_MS));
347348
if (!ret) {
348-
dev_err(adev->dev, "firmware ready timeout\n");
349+
dev_err(adev->dev, "firmware ready timeout, status: 0x%08x, lec: 0x%08x\n",
350+
snd_hdac_adsp_readl(adev, AVS_FW_REG_STATUS(adev)),
351+
snd_hdac_adsp_readl(adev, AVS_FW_REG_ERROR_CODE(adev)));
349352
avs_dsp_core_disable(adev, AVS_MAIN_CORE_MASK);
350353
return -ETIMEDOUT;
351354
}
@@ -392,7 +395,7 @@ int avs_hda_load_basefw(struct avs_dev *adev, struct firmware *fw)
392395
ret = avs_hda_init_rom(adev, dma_id, true);
393396
if (!ret)
394397
break;
395-
dev_info(adev->dev, "#%d rom init fail: %d\n", i + 1, ret);
398+
dev_info(adev->dev, "#%d rom init failed: %d\n", i + 1, ret);
396399
}
397400
if (ret < 0)
398401
goto cleanup_resources;
@@ -404,7 +407,8 @@ int avs_hda_load_basefw(struct avs_dev *adev, struct firmware *fw)
404407
AVS_FW_INIT_POLLING_US, AVS_FW_INIT_TIMEOUT_US);
405408
snd_hdac_dsp_trigger(hstream, false);
406409
if (ret < 0) {
407-
dev_err(adev->dev, "transfer fw failed: %d\n", ret);
410+
dev_err(adev->dev, "transfer fw failed: %d, status: 0x%08x, lec: 0x%08x\n",
411+
ret, reg, snd_hdac_adsp_readl(adev, AVS_FW_REG_ERROR_CODE(adev)));
408412
avs_dsp_core_disable(adev, AVS_MAIN_CORE_MASK);
409413
}
410414

@@ -584,7 +588,9 @@ static int avs_dsp_load_basefw(struct avs_dev *adev)
584588
ret = wait_for_completion_timeout(&adev->fw_ready,
585589
msecs_to_jiffies(AVS_FW_INIT_TIMEOUT_MS));
586590
if (!ret) {
587-
dev_err(adev->dev, "firmware ready timeout\n");
591+
dev_err(adev->dev, "firmware ready timeout, status: 0x%08x, lec: 0x%08x\n",
592+
snd_hdac_adsp_readl(adev, AVS_FW_REG_STATUS(adev)),
593+
snd_hdac_adsp_readl(adev, AVS_FW_REG_ERROR_CODE(adev)));
588594
avs_dsp_core_disable(adev, AVS_MAIN_CORE_MASK);
589595
ret = -ETIMEDOUT;
590596
goto release_fw;

0 commit comments

Comments
 (0)