From: Yan Wang yan.wang@linux.intel.com
Firmware side should not send position in every trace_work() is called.
Signed-off-by: Yan Wang yan.wang@linux.intel.com --- Test with: Mininow max rt5651 and APL UP^2 nocodec and CNL nocodec SOF 1.1-stable: 98d3a838cb397e91d6c032cf9b39d3748102803e SOF-Tool 1.1-stable: 78ad1ccce5ac689680adc32f8136f5bf551b0f7c https://github.com/plbossart/sound/tree/topic/sof-v4.14: c33cfed51fff5eb156dcf70ba849e6ffb3008377 --- src/include/reef/dma-trace.h | 1 + src/lib/dma-trace.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/include/reef/dma-trace.h b/src/include/reef/dma-trace.h index bf6e3f3..c5982d2 100644 --- a/src/include/reef/dma-trace.h +++ b/src/include/reef/dma-trace.h @@ -56,6 +56,7 @@ struct dma_trace_data { struct dma_sg_config config; struct dma_trace_buf dmatb; struct dma_copy dc; + uint32_t old_host_offset; uint32_t host_offset; uint32_t overflow; uint32_t messages; diff --git a/src/lib/dma-trace.c b/src/lib/dma-trace.c index d9adb6d..d7ad3d2 100644 --- a/src/lib/dma-trace.c +++ b/src/lib/dma-trace.c @@ -64,7 +64,10 @@ static uint64_t trace_work(void *data, uint64_t delay) * This function will be called once every 500ms at least even * if no new trace is filled. */ - ipc_dma_trace_send_position(); + if (d->old_host_offset != d->host_offset) { + ipc_dma_trace_send_position(); + d->old_host_offset = d->host_offset; + } #endif
/* any data to copy ? */