diff options
author | Bard liao <yung-chuan.liao@linux.intel.com> | 2019-06-03 18:18:17 +0200 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2019-06-03 19:41:23 +0200 |
commit | e3adc9495ab26fc4bfe29253d4e7aad47dab2307 (patch) | |
tree | a7a0aee5b263c981e8a0bcbd5e3f7be901771329 /sound/soc | |
parent | Merge branch 'asoc-5.2' into asoc-5.3 (diff) | |
download | linux-e3adc9495ab26fc4bfe29253d4e7aad47dab2307.tar.xz linux-e3adc9495ab26fc4bfe29253d4e7aad47dab2307.zip |
ASoC: SOF: send time stamp to FW for alignment
Timer will be reset when DSP is powered down. So the time stamp of trace
log will be reset after resume. Send time stamp to FW can align the time
stamp and avoid reset time stamp in trace log.
Signed-off-by: Bard liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/sof/trace.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/sound/soc/sof/trace.c b/sound/soc/sof/trace.c index b02520f8e595..befed975161c 100644 --- a/sound/soc/sof/trace.c +++ b/sound/soc/sof/trace.c @@ -161,7 +161,9 @@ static int trace_debugfs_create(struct snd_sof_dev *sdev) int snd_sof_init_trace_ipc(struct snd_sof_dev *sdev) { - struct sof_ipc_dma_trace_params params; + struct sof_ipc_fw_ready *ready = &sdev->fw_ready; + struct sof_ipc_fw_version *v = &ready->version; + struct sof_ipc_dma_trace_params_ext params; struct sof_ipc_reply ipc_reply; int ret; @@ -169,8 +171,16 @@ int snd_sof_init_trace_ipc(struct snd_sof_dev *sdev) return -EINVAL; /* set IPC parameters */ - params.hdr.size = sizeof(params); - params.hdr.cmd = SOF_IPC_GLB_TRACE_MSG | SOF_IPC_TRACE_DMA_PARAMS; + params.hdr.cmd = SOF_IPC_GLB_TRACE_MSG; + /* PARAMS_EXT is only supported from ABI 3.7.0 onwards */ + if (v->abi_version >= SOF_ABI_VER(3, 7, 0)) { + params.hdr.size = sizeof(struct sof_ipc_dma_trace_params_ext); + params.hdr.cmd |= SOF_IPC_TRACE_DMA_PARAMS_EXT; + params.timestamp_ns = ktime_get(); /* in nanosecond */ + } else { + params.hdr.size = sizeof(struct sof_ipc_dma_trace_params); + params.hdr.cmd |= SOF_IPC_TRACE_DMA_PARAMS; + } params.buffer.phy_addr = sdev->dmatp.addr; params.buffer.size = sdev->dmatb.bytes; params.buffer.pages = sdev->dma_trace_pages; |