summaryrefslogtreecommitdiff
path: root/sound/soc/sof/ops.c
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>2021-12-23 14:36:13 +0300
committerMark Brown <broonie@kernel.org>2021-12-23 16:38:13 +0300
commitb2b10aa79fe2fb3d3393d0e90ffb5c1802992412 (patch)
treeb5de6c634d040e64dcf73cc4ed205dbb9d8bd5b0 /sound/soc/sof/ops.c
parent12b401f4de787627f4a25784a0278bbbf93122b6 (diff)
downloadlinux-b2b10aa79fe2fb3d3393d0e90ffb5c1802992412.tar.xz
ASoC: SOF: Add 'non_recoverable' parameter to snd_sof_dsp_panic()
Some platforms use retries during firmware boot to overcome DSP startup issues. In these cases we might receive a DSP panic message which should not be treated as fatal if it happens during boot. Pass this information to snd_sof_dsp_panic() and omit the panic print if it is not fatal or the user does not want to see all dumps. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Link: https://lore.kernel.org/r/20211223113628.18582-6-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sof/ops.c')
-rw-r--r--sound/soc/sof/ops.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/sound/soc/sof/ops.c b/sound/soc/sof/ops.c
index 1d6a95a00cf5..9abf7a8e55e0 100644
--- a/sound/soc/sof/ops.c
+++ b/sound/soc/sof/ops.c
@@ -142,7 +142,13 @@ void snd_sof_dsp_update_bits_forced(struct snd_sof_dev *sdev, u32 bar,
}
EXPORT_SYMBOL(snd_sof_dsp_update_bits_forced);
-void snd_sof_dsp_panic(struct snd_sof_dev *sdev, u32 offset)
+/**
+ * snd_sof_dsp_panic - handle a received DSP panic message
+ * @sdev: Pointer to the device's sdev
+ * @offset: offset of panic information
+ * @non_recoverable: the panic is fatal, no recovery will be done by the caller
+ */
+void snd_sof_dsp_panic(struct snd_sof_dev *sdev, u32 offset, bool non_recoverable)
{
/*
* if DSP is not ready and the dsp_oops_offset is not yet set, use the
@@ -160,12 +166,18 @@ void snd_sof_dsp_panic(struct snd_sof_dev *sdev, u32 offset)
"%s: dsp_oops_offset %zu differs from panic offset %u\n",
__func__, sdev->dsp_oops_offset, offset);
- dev_err(sdev->dev, "DSP panic!\n");
+ /*
+ * Only print the panic information if we have non recoverable panic or
+ * if all dumps should be printed
+ */
+ if (non_recoverable || sof_debug_check_flag(SOF_DBG_PRINT_ALL_DUMPS)) {
+ dev_err(sdev->dev, "DSP panic!\n");
- /* We want to see the DSP panic! */
- sdev->dbg_dump_printed = false;
+ /* We want to see the DSP panic! */
+ sdev->dbg_dump_printed = false;
- snd_sof_dsp_dbg_dump(sdev, SOF_DBG_DUMP_REGS | SOF_DBG_DUMP_MBOX);
- snd_sof_trace_notify_for_error(sdev);
+ snd_sof_dsp_dbg_dump(sdev, SOF_DBG_DUMP_REGS | SOF_DBG_DUMP_MBOX);
+ snd_sof_trace_notify_for_error(sdev);
+ }
}
EXPORT_SYMBOL(snd_sof_dsp_panic);