diff --git a/src/logging/Kconfig b/src/logging/Kconfig index 9d854f68aae4..0925246c0403 100644 --- a/src/logging/Kconfig +++ b/src/logging/Kconfig @@ -33,4 +33,10 @@ config LOG_BACKEND_SOF_PROBE_OUTPUT help Set the logging format for SOF probe output. +config LOG_BACKEND_SOF_PROBE_OUTPUT_AUTO_ENABLE + bool "Automatically enabe probes logging when probe dma is started" + depends on LOG_BACKEND_SOF_PROBE_OUTPUT + help + Automatically enable logging on probes extraction dma. + endmenu diff --git a/src/probe/probe.c b/src/probe/probe.c index 7fb022735b6d..6e66dc330810 100644 --- a/src/probe/probe.c +++ b/src/probe/probe.c @@ -260,6 +260,8 @@ static enum task_state probe_task(void *data) return SOF_TASK_STATE_RESCHEDULE; } +static void probe_auto_enable_logs(uint32_t stream_tag); + int probe_init(struct probe_dma *probe_dma) { struct probe_pdata *_probe = probe_get(); @@ -323,6 +325,10 @@ int probe_init(struct probe_dma *probe_dma) for (i = 0; i < CONFIG_PROBE_POINTS_MAX; i++) _probe->probe_points[i].stream_tag = PROBE_POINT_INVALID; +#if CONFIG_LOG_BACKEND_SOF_PROBE + if (probe_dma) + probe_auto_enable_logs(probe_dma->stream_tag); +#endif return 0; } @@ -1206,6 +1212,27 @@ int probe_point_add(uint32_t count, struct probe_point *probe) return 0; } +static void probe_auto_enable_logs(uint32_t stream_tag) +{ + struct probe_point log_point = { +#if CONFIG_IPC_MAJOR_4 + .buffer_id = { + .full_id = 0, + }, +#else + .buffer_id = 0, +#endif + .purpose = PROBE_PURPOSE_EXTRACTION, + .stream_tag = stream_tag, + }; + int ret; + ret = probe_point_add(1, &log_point); + + if (ret) + tr_err(&pr_tr, "probe_auto_enable_logs() failed"); + +} + #if CONFIG_IPC_MAJOR_3 int probe_dma_info(struct sof_ipc_probe_info_params *data, uint32_t max_size) {