From: Yan Wang yan.wang@linux.intel.com
Need update trace level bit field collection based on IPC messaged from driver side.
Signed-off-by: Yan Wang yan.wang@linux.intel.com --- Test with: Mininow max rt5651 and APL UP^2 nocodec and CNL nocodec SOF master: 949c4339ab8cb10f2edd497a671af989d7ea80f3 SOF-Tool master: 8e8cd884c36e297f5996a7bb4f1e830a0f1ee84c https://github.com/plbossart/sound/tree/topic/sof-v4.14: 2cd03d26b66f8fee25b8b21ea3f60db11def5b13 --- src/include/uapi/ipc.h | 8 ++++++++ src/ipc/handler.c | 25 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+)
diff --git a/src/include/uapi/ipc.h b/src/include/uapi/ipc.h index fbf1c07..a562bf7 100644 --- a/src/include/uapi/ipc.h +++ b/src/include/uapi/ipc.h @@ -117,6 +117,7 @@ /* trace and debug */ #define SOF_IPC_TRACE_DMA_PARAMS SOF_CMD_TYPE(0x001) #define SOF_IPC_TRACE_DMA_POSITION SOF_CMD_TYPE(0x002) +#define SOF_IPC_TRACE_DMA_LEVELS SOF_CMD_TYPE(0x003)
/* Get message component id */ #define SOF_IPC_MESSAGE_ID(x) (x & 0xffff) @@ -850,6 +851,13 @@ struct sof_ipc_dma_trace_posn { uint32_t messages; /* total trace messages */ } __attribute__((packed));
+/* DMA for Trace level info - SOF_IPC_DEBUG_DMA_LEVELS */ +struct sof_ipc_dma_trace_levels { + struct sof_ipc_hdr hdr; + uint32_t type; + uint32_t level; +} __attribute__((packed)); + /* * Architecture specific debug */ diff --git a/src/ipc/handler.c b/src/ipc/handler.c index 6a51765..daab3a9 100644 --- a/src/ipc/handler.c +++ b/src/ipc/handler.c @@ -636,6 +636,29 @@ static int ipc_glb_pm_message(uint32_t header) * Debug IPC Operations. */
+static int ipc_dma_trace_levels(uint32_t header) +{ + struct sof_ipc_dma_trace_levels *levels = _ipc->comp_data; + struct sof_ipc_reply reply; + int err; + + err = dma_trace_set_level(_ipc->dmat, levels->type, levels->level); + if (err < 0) + goto error; + + /* write component values to the outbox */ + reply.hdr.size = sizeof(reply); + reply.hdr.cmd = header; + reply.error = 0; + mailbox_hostbox_write(0, &reply, sizeof(reply)); + return 0; + +error: + if (err < 0) + trace_ipc_error("eA!"); + return -EINVAL; +} + static int ipc_dma_trace_config(uint32_t header) { #ifdef CONFIG_HOST_PTABLE @@ -744,6 +767,8 @@ static int ipc_glb_debug_message(uint32_t header) switch (cmd) { case iCS(SOF_IPC_TRACE_DMA_PARAMS): return ipc_dma_trace_config(header); + case iCS(SOF_IPC_TRACE_DMA_LEVELS): + return ipc_dma_trace_levels(header); default: trace_ipc_error("eDc"); trace_error_value(header);