Unverified Commit 1dedbe4f authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Mark Brown
Browse files

ASoC: SOF: Switch to IPC generic firmware tracing



Introduce new, generic API for firmware tracing with sof_fw_trace_ prefix
and switch to use it.
At the same time the old IPC3 code can be dropped from trace.c, which is
now a generic wrapper for the firmware tracing ops.

Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20220516104711.26115-5-peter.ujfalusi@linux.intel.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 671e0b90
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -252,12 +252,11 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
	if (sof_debug_check_flag(SOF_DBG_ENABLE_TRACE)) {
		sdev->fw_trace_is_supported = true;

		/* init DMA trace */
		ret = snd_sof_init_trace(sdev);
		/* init firmware tracing */
		ret = sof_fw_trace_init(sdev);
		if (ret < 0) {
			/* non fatal */
			dev_warn(sdev->dev,
				 "warning: failed to initialize trace %d\n",
			dev_warn(sdev->dev, "failed to initialize firmware tracing %d\n",
				 ret);
		}
	} else {
@@ -308,7 +307,7 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
sof_machine_err:
	snd_sof_machine_unregister(sdev, plat_data);
fw_trace_err:
	snd_sof_free_trace(sdev);
	sof_fw_trace_free(sdev);
fw_run_err:
	snd_sof_fw_unload(sdev);
fw_load_err:
@@ -447,7 +446,7 @@ int snd_sof_device_remove(struct device *dev)
	snd_sof_machine_unregister(sdev, pdata);

	if (sdev->fw_state > SOF_FW_BOOT_NOT_STARTED) {
		snd_sof_free_trace(sdev);
		sof_fw_trace_free(sdev);
		ret = snd_sof_dsp_power_down_notify(sdev);
		if (ret < 0)
			dev_warn(dev, "error: %d failed to prepare DSP for device removal",
+1 −1
Original line number Diff line number Diff line
@@ -443,6 +443,6 @@ void snd_sof_handle_fw_exception(struct snd_sof_dev *sdev)
	snd_sof_ipc_dump(sdev);
	snd_sof_dsp_dbg_dump(sdev, "Firmware exception",
			     SOF_DBG_DUMP_REGS | SOF_DBG_DUMP_MBOX);
	snd_sof_trace_notify_for_error(sdev);
	sof_fw_trace_fw_crashed(sdev);
}
EXPORT_SYMBOL(snd_sof_handle_fw_exception);
+6 −0
Original line number Diff line number Diff line
@@ -184,6 +184,12 @@ struct snd_sof_ipc *snd_sof_ipc_init(struct snd_sof_dev *sdev)
		return NULL;
	}

	if (ops->fw_tracing && (!ops->fw_tracing->init || !ops->fw_tracing->suspend ||
				!ops->fw_tracing->resume)) {
		dev_err(sdev->dev, "Missing firmware tracing ops\n");
		return NULL;
	}

	return ipc;
}
EXPORT_SYMBOL(snd_sof_ipc_init);
+1 −1
Original line number Diff line number Diff line
@@ -946,7 +946,7 @@ static void ipc3_trace_message(struct snd_sof_dev *sdev, void *msg_buf)

	switch (msg_type) {
	case SOF_IPC_TRACE_DMA_POSITION:
		snd_sof_trace_update_pos(sdev, msg_buf);
		ipc3_dtrace_posn_update(sdev, msg_buf);
		break;
	default:
		dev_err(sdev->dev, "unhandled trace message %#x\n", msg_type);
+1 −1
Original line number Diff line number Diff line
@@ -177,7 +177,7 @@ void snd_sof_dsp_panic(struct snd_sof_dev *sdev, u32 offset, bool non_recoverabl
		snd_sof_dsp_dbg_dump(sdev, "DSP panic!",
				     SOF_DBG_DUMP_REGS | SOF_DBG_DUMP_MBOX);
		sof_set_fw_state(sdev, SOF_FW_CRASHED);
		snd_sof_trace_notify_for_error(sdev);
		sof_fw_trace_fw_crashed(sdev);
	} else {
		snd_sof_dsp_dbg_dump(sdev,
				     "DSP panic (recovery will be attempted)",
Loading