Commit 48b5b6a5 authored by Ranjani Sridharan's avatar Ranjani Sridharan Committed by Mark Brown

ASoC: SOF: trace: send DMA_TRACE_FREE IPC during release

Send the DMA_TRACE_FREE IPC during release to stop and free the trace
DMA in the DSP.
Signed-off-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20211102101019.14037-4-peter.ujfalusi@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent b4e2d7ce
...@@ -363,6 +363,7 @@ int snd_sof_device_remove(struct device *dev) ...@@ -363,6 +363,7 @@ int snd_sof_device_remove(struct device *dev)
cancel_work_sync(&sdev->probe_work); cancel_work_sync(&sdev->probe_work);
if (sdev->fw_state > SOF_FW_BOOT_NOT_STARTED) { if (sdev->fw_state > SOF_FW_BOOT_NOT_STARTED) {
snd_sof_free_trace(sdev);
ret = snd_sof_dsp_power_down_notify(sdev); ret = snd_sof_dsp_power_down_notify(sdev);
if (ret < 0) if (ret < 0)
dev_warn(dev, "error: %d failed to prepare DSP for device removal", dev_warn(dev, "error: %d failed to prepare DSP for device removal",
...@@ -370,7 +371,6 @@ int snd_sof_device_remove(struct device *dev) ...@@ -370,7 +371,6 @@ int snd_sof_device_remove(struct device *dev)
snd_sof_ipc_free(sdev); snd_sof_ipc_free(sdev);
snd_sof_free_debug(sdev); snd_sof_free_debug(sdev);
snd_sof_free_trace(sdev);
} }
/* /*
......
...@@ -539,6 +539,10 @@ EXPORT_SYMBOL(snd_sof_trace_notify_for_error); ...@@ -539,6 +539,10 @@ EXPORT_SYMBOL(snd_sof_trace_notify_for_error);
void snd_sof_release_trace(struct snd_sof_dev *sdev) void snd_sof_release_trace(struct snd_sof_dev *sdev)
{ {
struct sof_ipc_fw_ready *ready = &sdev->fw_ready;
struct sof_ipc_fw_version *v = &ready->version;
struct sof_ipc_cmd_hdr hdr;
struct sof_ipc_reply ipc_reply;
int ret; int ret;
if (!sdev->dtrace_is_supported || !sdev->dtrace_is_enabled) if (!sdev->dtrace_is_supported || !sdev->dtrace_is_enabled)
...@@ -549,6 +553,20 @@ void snd_sof_release_trace(struct snd_sof_dev *sdev) ...@@ -549,6 +553,20 @@ void snd_sof_release_trace(struct snd_sof_dev *sdev)
dev_err(sdev->dev, dev_err(sdev->dev,
"error: snd_sof_dma_trace_trigger: stop: %d\n", ret); "error: snd_sof_dma_trace_trigger: stop: %d\n", ret);
/*
* stop and free trace DMA in the DSP. TRACE_DMA_FREE is only supported from
* ABI 3.20.0 onwards
*/
if (v->abi_version >= SOF_ABI_VER(3, 20, 0)) {
hdr.size = sizeof(hdr);
hdr.cmd = SOF_IPC_GLB_TRACE_MSG | SOF_IPC_TRACE_DMA_FREE;
ret = sof_ipc_tx_message(sdev->ipc, hdr.cmd, &hdr, hdr.size,
&ipc_reply, sizeof(ipc_reply));
if (ret < 0)
dev_err(sdev->dev, "DMA_TRACE_FREE failed with error: %d\n", ret);
}
ret = snd_sof_dma_trace_release(sdev); ret = snd_sof_dma_trace_release(sdev);
if (ret < 0) if (ret < 0)
dev_err(sdev->dev, dev_err(sdev->dev,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment