From fdd45618b083421ee8996587729b1d8561e5852f Mon Sep 17 00:00:00 2001 From: Marcin Maka Date: Mon, 13 Jan 2020 12:12:04 +0100 Subject: [PATCH 1/5] comp: dai: rename dai in trace macros to dai_comp Since this is the code of 'dai component', the trace macros are renamed to avoid collisions with names of 'dai' (ssp, dmic, ...) trace macros. Signed-off-by: Marcin Maka --- src/audio/dai.c | 167 ++++++++++++++++++++---------------------------- 1 file changed, 68 insertions(+), 99 deletions(-) diff --git a/src/audio/dai.c b/src/audio/dai.c index 184fbac1135d..27f619b0c541 100644 --- a/src/audio/dai.c +++ b/src/audio/dai.c @@ -33,21 +33,21 @@ #include /* tracing */ -#define trace_dai(__e, ...) \ +#define trace_dai_comp(__e, ...) \ trace_event(TRACE_CLASS_DAI, __e, ##__VA_ARGS__) -#define trace_dai_with_ids(comp_ptr, __e, ...) \ +#define trace_dai_comp_with_ids(comp_ptr, __e, ...) \ trace_event_comp(TRACE_CLASS_DAI, comp_ptr, \ __e, ##__VA_ARGS__) -#define tracev_dai(__e, ...) \ +#define tracev_dai_comp(__e, ...) \ tracev_event(TRACE_CLASS_DAI, __e, ##__VA_ARGS__) -#define tracev_dai_with_ids(comp_ptr, __e, ...) \ +#define tracev_dai_comp_with_ids(comp_ptr, __e, ...) \ tracev_event_comp(TRACE_CLASS_DAI, comp_ptr, \ __e, ##__VA_ARGS__) -#define trace_dai_error(__e, ...) \ +#define trace_dai_comp_error(__e, ...) \ trace_error(TRACE_CLASS_DAI, __e, ##__VA_ARGS__) -#define trace_dai_error_with_ids(comp_ptr, __e, ...) \ +#define trace_dai_comp_error_with_ids(comp_ptr, __e, ...) \ trace_error_comp(TRACE_CLASS_DAI, comp_ptr, \ __e, ##__VA_ARGS__) @@ -86,7 +86,7 @@ static void dai_dma_cb(void *arg, enum notify_id type, void *data) uint32_t samples = bytes / sample_bytes(dd->frame_fmt); void *buffer_ptr; - tracev_dai_with_ids(dev, "dai_dma_cb()"); + tracev_dai_comp_with_ids(dev, "dai_dma_cb()"); next->status = DMA_CB_STATUS_RELOAD; @@ -144,7 +144,7 @@ static struct comp_dev *dai_new(struct sof_ipc_comp *comp) uint32_t dir, caps, dma_dev; int ret; - trace_dai("dai_new()"); + trace_dai_comp("dai_new()"); if (IPC_IS_SIZE_INVALID(ipc_dai->config)) { IPC_SIZE_ERROR_TRACE(TRACE_CLASS_DAI, ipc_dai->config); @@ -171,8 +171,7 @@ static struct comp_dev *dai_new(struct sof_ipc_comp *comp) dd->dai = dai_get(dai->type, dai->dai_index, DAI_CREAT); if (!dd->dai) { - trace_dai_error("dai_new() error: dai_get() failed to create " - "DAI."); + trace_dai_comp_error("dai_new() error: dai_get() failed to create DAI."); goto error; } @@ -185,8 +184,7 @@ static struct comp_dev *dai_new(struct sof_ipc_comp *comp) dd->dma = dma_get(dir, caps, dma_dev, DMA_ACCESS_SHARED); if (!dd->dma) { - trace_dai_error("dai_new() error: dma_get() failed to get " - "shared access to DMA."); + trace_dai_comp_error("dai_new() error: dma_get() failed to get shared access to DMA."); goto error; } @@ -246,18 +244,16 @@ static int dai_playback_params(struct comp_dev *dev, uint32_t period_bytes, config->is_scheduling_source = comp_is_scheduling_source(dev); config->period = dev->pipeline->ipc_pipe.period; - trace_dai_with_ids(dev, "dai_playback_params() " - "dest_dev = %d stream_id = %d " - "src_width = %d dest_width = %d", - config->dest_dev, dd->stream_id, - config->src_width, config->dest_width); + trace_dai_comp_with_ids(dev, "dai_playback_params() dest_dev = %d stream_id = %d src_width = %d dest_width = %d", + config->dest_dev, dd->stream_id, + config->src_width, config->dest_width); if (!config->elem_array.elems) { fifo = dai_get_fifo(dd->dai, dev->direction, dd->stream_id); - trace_dai_with_ids(dev, "dai_playback_params() " - "fifo %X", fifo); + trace_dai_comp_with_ids(dev, "dai_playback_params() fifo %X", + fifo); err = dma_sg_alloc(&config->elem_array, SOF_MEM_ZONE_RUNTIME, config->direction, @@ -266,9 +262,8 @@ static int dai_playback_params(struct comp_dev *dev, uint32_t period_bytes, (uintptr_t)(dd->dma_buffer->stream.addr), fifo); if (err < 0) { - trace_dai_error_with_ids(dev, "dai_playback_params() " - "error: dma_sg_alloc() failed " - "with err = %d", err); + trace_dai_comp_error_with_ids(dev, "dai_playback_params() error: dma_sg_alloc() failed with err = %d", + err); return err; } } @@ -310,18 +305,16 @@ static int dai_capture_params(struct comp_dev *dev, uint32_t period_bytes, config->dest_width = sample_bytes(dd->frame_fmt); } - trace_dai_with_ids(dev, "dai_capture_params() " - "src_dev = %d stream_id = %d " - "src_width = %d dest_width = %d", - config->src_dev, dd->stream_id, - config->src_width, config->dest_width); + trace_dai_comp_with_ids(dev, "dai_capture_params() src_dev = %d stream_id = %d src_width = %d dest_width = %d", + config->src_dev, dd->stream_id, + config->src_width, config->dest_width); if (!config->elem_array.elems) { fifo = dai_get_fifo(dd->dai, dev->direction, dd->stream_id); - trace_dai_with_ids(dev, "dai_capture_params() " - "fifo %X", fifo); + trace_dai_comp_with_ids(dev, "dai_capture_params() fifo %X", + fifo); err = dma_sg_alloc(&config->elem_array, SOF_MEM_ZONE_RUNTIME, config->direction, @@ -330,9 +323,8 @@ static int dai_capture_params(struct comp_dev *dev, uint32_t period_bytes, (uintptr_t)(dd->dma_buffer->stream.addr), fifo); if (err < 0) { - trace_dai_error_with_ids(dev, "dai_capture_params() " - "error: dma_sg_alloc() failed " - "with err = %d", err); + trace_dai_comp_error_with_ids(dev, "dai_capture_params() error: dma_sg_alloc() failed with err = %d", + err); return err; } } @@ -353,7 +345,7 @@ static int dai_params(struct comp_dev *dev, uint32_t align; int err; - trace_dai_with_ids(dev, "dai_params()"); + trace_dai_comp_with_ids(dev, "dai_params()"); if (dev->direction == SOF_IPC_STREAM_PLAYBACK) dd->local_buffer = list_first_item(&dev->bsource_list, @@ -366,42 +358,37 @@ static int dai_params(struct comp_dev *dev, /* check if already configured */ if (dev->state == COMP_STATE_PREPARE) { - trace_dai_with_ids(dev, "dai_params() component has been " - "already configured."); + trace_dai_comp_with_ids(dev, "dai_params() component has been already configured."); return 0; } /* can set params on only init state */ if (dev->state != COMP_STATE_READY) { - trace_dai_error_with_ids(dev, "dai_params() error: Component" - " is not in init state."); + trace_dai_comp_error_with_ids(dev, "dai_params() error: Component is not in init state."); return -EINVAL; } err = dma_get_attribute(dd->dma, DMA_ATTR_BUFFER_ADDRESS_ALIGNMENT, &addr_align); if (err < 0) { - trace_dai_error_with_ids(dev, "dai_params() error: could not " - "get dma buffer address alignment, " - "err = %d", err); + trace_dai_comp_error_with_ids(dev, "dai_params() error: could not get dma buffer address alignment, err = %d", + err); return err; } err = dma_get_attribute(dd->dma, DMA_ATTR_BUFFER_ALIGNMENT, &align); if (err < 0 || !align) { - trace_dai_error_with_ids(dev, "dai_params() error: could not " - "get valid dma buffer alignment, err = %d, " - "align = %u", err, align); + trace_dai_comp_error_with_ids(dev, "dai_params() error: could not get valid dma buffer alignment, err = %d, align = %u", + err, align); return -EINVAL; } err = dma_get_attribute(dd->dma, DMA_ATTR_BUFFER_PERIOD_COUNT, &period_count); if (err < 0 || !period_count) { - trace_dai_error_with_ids(dev, "dai_params() error: could not " - "get valid dma buffer period count, " - "err = %d, period_count = %u", err, - period_count); + trace_dai_comp_error_with_ids(dev, "dai_params() error: could not get valid dma buffer period count, err = %d, period_count = %u", + err, + period_count); return -EINVAL; } @@ -414,8 +401,7 @@ static int dai_params(struct comp_dev *dev, /* calculate period size */ period_bytes = dev->frames * frame_size; if (!period_bytes) { - trace_dai_error_with_ids(dev, "dai_params() error: invalid " - "period_bytes."); + trace_dai_comp_error_with_ids(dev, "dai_params() error: invalid period_bytes."); return -EINVAL; } @@ -426,18 +412,15 @@ static int dai_params(struct comp_dev *dev, if (dd->dma_buffer) { err = buffer_set_size(dd->dma_buffer, buffer_size); if (err < 0) { - trace_dai_error_with_ids(dev, "dai_params() error: " - "buffer_set_size() failed, " - "buffer_size = %u", - buffer_size); + trace_dai_comp_error_with_ids(dev, "dai_params() error: buffer_set_size() failed, buffer_size = %u", + buffer_size); return err; } } else { dd->dma_buffer = buffer_alloc(buffer_size, SOF_MEM_CAPS_DMA, addr_align); if (!dd->dma_buffer) { - trace_dai_error_with_ids(dev, "dai_params() error: " - "failed to alloc dma buffer"); + trace_dai_comp_error_with_ids(dev, "dai_params() error: failed to alloc dma buffer"); return -ENOMEM; } } @@ -452,7 +435,7 @@ static int dai_prepare(struct comp_dev *dev) struct dai_data *dd = comp_get_drvdata(dev); int ret = 0; - trace_dai_with_ids(dev, "dai_prepare()"); + trace_dai_comp_with_ids(dev, "dai_prepare()"); ret = comp_set_state(dev, COMP_TRIGGER_PREPARE); if (ret < 0) @@ -464,15 +447,13 @@ static int dai_prepare(struct comp_dev *dev) dev->position = 0; if (!dd->chan) { - trace_dai_error_with_ids(dev, "dai_prepare() error: Missing " - "dd->chan."); + trace_dai_comp_error_with_ids(dev, "dai_prepare() error: Missing dd->chan."); comp_set_state(dev, COMP_TRIGGER_RESET); return -EINVAL; } if (!dd->config.elem_array.elems) { - trace_dai_error_with_ids(dev, "dai_prepare() error: Missing " - "dd->config.elem_array.elems."); + trace_dai_comp_error_with_ids(dev, "dai_prepare() error: Missing dd->config.elem_array.elems."); comp_set_state(dev, COMP_TRIGGER_RESET); return -EINVAL; } @@ -501,7 +482,7 @@ static int dai_reset(struct comp_dev *dev) struct dai_data *dd = comp_get_drvdata(dev); struct dma_sg_config *config = &dd->config; - trace_dai_with_ids(dev, "dai_reset()"); + trace_dai_comp_with_ids(dev, "dai_reset()"); dma_sg_free(&config->elem_array); @@ -539,7 +520,7 @@ static int dai_comp_trigger(struct comp_dev *dev, int cmd) struct dai_data *dd = comp_get_drvdata(dev); int ret; - trace_dai_with_ids(dev, "dai_comp_trigger(), command = %u", cmd); + trace_dai_comp_with_ids(dev, "dai_comp_trigger(), command = %u", cmd); ret = comp_set_state(dev, cmd); if (ret < 0) @@ -550,7 +531,7 @@ static int dai_comp_trigger(struct comp_dev *dev, int cmd) switch (cmd) { case COMP_TRIGGER_START: - trace_dai_with_ids(dev, "dai_comp_trigger(), START"); + trace_dai_comp_with_ids(dev, "dai_comp_trigger(), START"); /* only start the DAI if we are not XRUN handling */ if (dd->xrun == 0) { @@ -592,13 +573,13 @@ static int dai_comp_trigger(struct comp_dev *dev, int cmd) dai_update_start_position(dev); break; case COMP_TRIGGER_XRUN: - trace_dai_with_ids(dev, "dai_comp_trigger(), XRUN"); + trace_dai_comp_with_ids(dev, "dai_comp_trigger(), XRUN"); dd->xrun = 1; /* fallthrough */ case COMP_TRIGGER_PAUSE: case COMP_TRIGGER_STOP: - trace_dai_with_ids(dev, "dai_comp_trigger(), PAUSE/STOP"); + trace_dai_comp_with_ids(dev, "dai_comp_trigger(), PAUSE/STOP"); ret = dma_stop(dd->chan); dai_trigger(dd->dai, COMP_TRIGGER_STOP, dev->direction); break; @@ -615,12 +596,10 @@ static void dai_report_xrun(struct comp_dev *dev, uint32_t bytes) struct dai_data *dd = comp_get_drvdata(dev); if (dev->direction == SOF_IPC_STREAM_PLAYBACK) { - trace_dai_error_with_ids(dev, "dai_report_xrun() error: " - "underrun due to no data available"); + trace_dai_comp_error_with_ids(dev, "dai_report_xrun() error: underrun due to no data available"); comp_underrun(dev, dd->local_buffer, bytes); } else { - trace_dai_error_with_ids(dev, "dai_report_xrun() error: " - "overrun due to no data available"); + trace_dai_comp_error_with_ids(dev, "dai_report_xrun() error: overrun due to no data available"); comp_overrun(dev, dd->local_buffer, bytes); } } @@ -636,7 +615,7 @@ static int dai_copy(struct comp_dev *dev) uint32_t sink_samples; int ret = 0; - tracev_dai_with_ids(dev, "dai_copy()"); + tracev_dai_comp_with_ids(dev, "dai_copy()"); /* get data sizes from DMA */ ret = dma_get_data_size(dd->chan, &avail_bytes, &free_bytes); @@ -660,7 +639,8 @@ static int dai_copy(struct comp_dev *dev) sample_bytes(dd->frame_fmt); } - tracev_dai_with_ids(dev, "dai_copy(), copy_bytes = 0x%x", copy_bytes); + tracev_dai_comp_with_ids(dev, "dai_copy(), copy_bytes = 0x%x", + copy_bytes); /* return if it's not stream start */ if (!copy_bytes && dd->start_position != dev->position) @@ -696,14 +676,12 @@ static int dai_config(struct comp_dev *dev, struct sof_ipc_dai_config *config) int channel = 0; int handshake; - trace_dai_with_ids(dev, "config comp %d pipe %d dai %d type %d", - dev->comp.id, dev->comp.pipeline_id, - config->dai_index, config->type); + trace_dai_comp_with_ids(dev, "config dai %d type %d", + config->dai_index, config->type); /* cannot configure DAI while active */ if (dev->state == COMP_STATE_ACTIVE) { - trace_dai_error_with_ids(dev, "dai_config() error: Component " - "is in active state."); + trace_dai_comp_error_with_ids(dev, "dai_config() error: Component is in active state."); return -EINVAL; } @@ -713,22 +691,19 @@ static int dai_config(struct comp_dev *dev, struct sof_ipc_dai_config *config) dd->config.burst_elems = config->ssp.tdm_slots; break; case SOF_DAI_INTEL_DMIC: - trace_dai_with_ids(dev, "dai_config(), config->type = " - "SOF_DAI_INTEL_DMIC"); + trace_dai_comp_with_ids(dev, "dai_config(), config->type = SOF_DAI_INTEL_DMIC"); /* We can use always the largest burst length. */ dd->config.burst_elems = 8; - trace_dai_with_ids(dev, "dai_config(), " - "config->dmic.fifo_bits = %u; " - "config->dmic.num_pdm_active = %u;", - config->dmic.fifo_bits, - config->dmic.num_pdm_active); + trace_dai_comp_with_ids(dev, "dai_config(), config->dmic.fifo_bits = %u config->dmic.num_pdm_active = %u", + config->dmic.fifo_bits, + config->dmic.num_pdm_active); break; case SOF_DAI_INTEL_HDA: channel = config->hda.link_dma_ch; - trace_dai_with_ids(dev, "dai_config(), channel = %d", - channel); + trace_dai_comp_with_ids(dev, "dai_config(), channel = %d", + channel); /* * For HDA DAIs, the driver sends the DAI_CONFIG IPC @@ -756,8 +731,8 @@ static int dai_config(struct comp_dev *dev, struct sof_ipc_dai_config *config) */ channel = config->alh.stream_id; dd->stream_id = config->alh.stream_id; - trace_dai_with_ids(dev, "dai_config(), channel = %d", - channel); + trace_dai_comp_with_ids(dev, "dai_config(), channel = %d", + channel); break; case SOF_DAI_IMX_SAI: handshake = dai_get_handshake(dd->dai, dai->direction, @@ -777,12 +752,7 @@ static int dai_config(struct comp_dev *dev, struct sof_ipc_dai_config *config) break; default: /* other types of DAIs not handled for now */ - trace_dai_error_with_ids(dev, "dai_config() error: Handling of " - "DAIs other than SOF_DAI_INTEL_SSP, " - "SOF_DAI_INTEL_ALH, " - "SOF_DAI_INTEL_DMIC or " - "SOF_DAI_INTEL_HDA is not handled for " - "now."); + trace_dai_comp_error_with_ids(dev, "dai_config() error: Unknown dai type"); break; } @@ -798,8 +768,7 @@ static int dai_config(struct comp_dev *dev, struct sof_ipc_dai_config *config) dd->chan = dma_channel_get(dd->dma, channel); if (!dd->chan) { - trace_dai_error_with_ids(dev, "dai_config() error: " - "dma_channel_get() failed"); + trace_dai_comp_error_with_ids(dev, "dai_config() error: dma_channel_get() failed"); dd->chan = NULL; return -EIO; } @@ -818,7 +787,7 @@ static int dai_ts_config(struct comp_dev *dev) struct timestamp_cfg *cfg = &dd->ts_config; struct sof_ipc_comp_dai *dai = (struct sof_ipc_comp_dai *)&dev->comp; - tracev_dai("dai_ts_config()"); + tracev_dai_comp_with_ids(dev, "dai_ts_config()"); cfg->type = dd->dai->drv->type; cfg->direction = dai->direction; cfg->index = dd->dai->index; @@ -835,7 +804,7 @@ static int dai_ts_start(struct comp_dev *dev) { struct dai_data *dd = comp_get_drvdata(dev); - tracev_dai("dai_ts_start()"); + tracev_dai_comp_with_ids(dev, "dai_ts_start()"); if (!dd->dai->drv->ts_ops.ts_start) return -ENXIO; @@ -846,7 +815,7 @@ static int dai_ts_stop(struct comp_dev *dev) { struct dai_data *dd = comp_get_drvdata(dev); - tracev_dai("dai_ts_stop()"); + tracev_dai_comp_with_ids(dev, "dai_ts_stop()"); if (!dd->dai->drv->ts_ops.ts_stop) return -ENXIO; @@ -857,7 +826,7 @@ static int dai_ts_get(struct comp_dev *dev, struct timestamp_data *tsd) { struct dai_data *dd = comp_get_drvdata(dev); - tracev_dai("dai_ts_get()"); + tracev_dai_comp_with_ids(dev, "dai_ts_get()"); if (!dd->dai->drv->ts_ops.ts_get) return -ENXIO; From e5e54817b444fc2554d2c7e4fc5ee2481953f704 Mon Sep 17 00:00:00 2001 From: Marcin Maka Date: Mon, 13 Jan 2020 13:39:07 +0100 Subject: [PATCH 2/5] trace: dai: add macros with ids (type, index) Trace entry fields for IDs may be used by dai traces for type and index to track down each trace entry to a specific dai instance. Signed-off-by: Marcin Maka --- src/include/sof/lib/dai.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/include/sof/lib/dai.h b/src/include/sof/lib/dai.h index 856c405e84f1..1d554eb47167 100644 --- a/src/include/sof/lib/dai.h +++ b/src/include/sof/lib/dai.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -147,6 +148,24 @@ struct dai_type_info { size_t num_dais; /**< Number of elements in dai_array */ }; +#define trace_dai_with_ids(klass, dai_ptr, format, ...) \ + trace_event_with_ids(klass, \ + dai_ptr->drv->type, \ + dai_ptr->index, \ + format, ##__VA_ARGS__) + +#define trace_dai_error_with_ids(klass, dai_ptr, format, ...) \ + trace_error_with_ids(klass, \ + dai_ptr->drv->type, \ + dai_ptr->index, \ + format, ##__VA_ARGS__) + +#define tracev_dai_with_ids(klass, dai_ptr, format, ...) \ + tracev_event_with_ids(klass, \ + dai_ptr->drv->type, \ + dai_ptr->index, \ + format, ##__VA_ARGS__) + /** * \brief Holds information about array of DAIs grouped by type. */ From 3792da88a0a3aea0e94e1cc8e1b3d4309523c155 Mon Sep 17 00:00:00 2001 From: Marcin Maka Date: Mon, 13 Jan 2020 13:42:58 +0100 Subject: [PATCH 3/5] dmic: trace: use trace macros with ids Dmic instance should be identifiable in traces. Signed-off-by: Marcin Maka --- src/drivers/intel/cavs/dmic.c | 239 +++++++++++++++++----------------- 1 file changed, 119 insertions(+), 120 deletions(-) diff --git a/src/drivers/intel/cavs/dmic.c b/src/drivers/intel/cavs/dmic.c index 5cd80291e5ae..b3e509474d86 100644 --- a/src/drivers/intel/cavs/dmic.c +++ b/src/drivers/intel/cavs/dmic.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -138,11 +137,22 @@ struct pdm_controllers_configuration { /* tracing */ #define trace_dmic(__e, ...) \ trace_event(TRACE_CLASS_DMIC, __e, ##__VA_ARGS__) -#define trace_dmic_error(__e, ...) \ + +#define trace_dmic_id(dmic_ptr, format, ...) \ + trace_dai_with_ids(TRACE_CLASS_DMIC, dmic_ptr, format, ##__VA_ARGS__) + +#define trace_error_dmic(__e, ...) \ trace_error(TRACE_CLASS_DMIC, __e, ##__VA_ARGS__) + +#define trace_error_dmic_id(dmic_ptr, format, ...) \ + trace_dai_error_with_ids(TRACE_CLASS_DMIC, dmic_ptr, \ + format, ##__VA_ARGS__) #define tracev_dmic(__e, ...) \ tracev_event(TRACE_CLASS_DMIC, __e, ##__VA_ARGS__) +#define tracev_dmic_id(dmic_ptr, format, ...) \ + tracev_dai_with_ids(TRACE_CLASS_DMIC, dmic_ptr, format, ##__VA_ARGS__) + /* Base addresses (in PDM scope) of 2ch PDM controllers and coefficient RAM. */ static const uint32_t base[4] = {PDM0, PDM1, PDM2, PDM3}; static const uint32_t coef_base_a[4] = {PDM0_COEFFICIENT_A, PDM1_COEFFICIENT_A, @@ -164,13 +174,12 @@ static enum task_state dmic_work(void *data) int i; int ret; - tracev_dmic("dmic_work()"); + tracev_dmic_id(dai, "dmic_work()"); ret = spin_try_lock(&dai->lock); if (!ret) { platform_shared_commit(dai, sizeof(*dai)); - tracev_dmic("dmic_work(): spin_try_lock(dai->lock, ret)" - "failed: RESCHEDULE"); + tracev_dmic_id(dai, "dmic_work(): spin_try_lock(dai->lock, ret) failed: RESCHEDULE"); return SOF_TASK_STATE_RESCHEDULE; } @@ -276,33 +285,28 @@ static void find_modes(struct decim_modes *modes, uint32_t fs, int di) /* Check for sane pdm clock, min 100 kHz, max ioclk/2 */ if (dmic_prm[di]->pdmclk_max < DMIC_HW_PDM_CLK_MIN || dmic_prm[di]->pdmclk_max > DMIC_HW_IOCLK / 2) { - trace_dmic_error("find_modes() error: " - "pdm clock max not in range"); + trace_error_dmic("find_modes() error: pdm clock max not in range"); return; } if (dmic_prm[di]->pdmclk_min < DMIC_HW_PDM_CLK_MIN || dmic_prm[di]->pdmclk_min > dmic_prm[di]->pdmclk_max) { - trace_dmic_error("find_modes() error: " - "pdm clock min not in range"); + trace_error_dmic("find_modes() error: pdm clock min not in range"); return; } /* Check for sane duty cycle */ if (dmic_prm[di]->duty_min > dmic_prm[di]->duty_max) { - trace_dmic_error("find_modes() error: " - "duty cycle min > max"); + trace_error_dmic("find_modes() error: duty cycle min > max"); return; } if (dmic_prm[di]->duty_min < DMIC_HW_DUTY_MIN || dmic_prm[di]->duty_min > DMIC_HW_DUTY_MAX) { - trace_dmic_error("find_modes() error: " - "pdm clock min not in range"); + trace_error_dmic("find_modes() error: pdm clock min not in range"); return; } if (dmic_prm[di]->duty_max < DMIC_HW_DUTY_MIN || dmic_prm[di]->duty_max > DMIC_HW_DUTY_MAX) { - trace_dmic_error("find_modes() error: " - "pdm clock max not in range"); + trace_error_dmic("find_modes() error: pdm clock max not in range"); return; } @@ -566,7 +570,7 @@ static int select_mode(struct dmic_configuration *cfg, * the candidates should be sufficient. */ if (modes->num_of_modes == 0) { - trace_dmic_error("select_mode() error: no modes available"); + trace_error_dmic("select_mode() error: no modes available"); return -EINVAL; } @@ -599,8 +603,7 @@ static int select_mode(struct dmic_configuration *cfg, if (cfg->mfir_a > 0) { cfg->fir_a = get_fir(cfg, cfg->mfir_a); if (!cfg->fir_a) { - trace_dmic_error("select_mode() error: cannot find " - "FIR coefficients, mfir_a = %u", + trace_error_dmic("select_mode() error: cannot find FIR coefficients, mfir_a = %u", cfg->mfir_a); return -EINVAL; } @@ -609,8 +612,7 @@ static int select_mode(struct dmic_configuration *cfg, if (cfg->mfir_b > 0) { cfg->fir_b = get_fir(cfg, cfg->mfir_b); if (!cfg->fir_b) { - trace_dmic_error("select_mode() error: cannot find " - "FIR coefficients, mfir_b = %u", + trace_error_dmic("select_mode() error: cannot find FIR coefficients, mfir_b = %u", cfg->mfir_b); return -EINVAL; } @@ -623,8 +625,7 @@ static int select_mode(struct dmic_configuration *cfg, g_cic = mcic * mcic * mcic * mcic * mcic; if (g_cic < 0) { /* Erroneous decimation factor and CIC gain */ - trace_dmic_error("select_mode() error: erroneous decimation " - "factor and CIC gain"); + trace_error_dmic("select_mode() error: erroneous decimation factor and CIC gain"); return -EINVAL; } @@ -651,8 +652,7 @@ static int select_mode(struct dmic_configuration *cfg, cfg->fir_a->length, gain_to_fir); if (ret < 0) { /* Invalid coefficient set found, should not happen. */ - trace_dmic_error("select_mode() error: " - "invalid coefficient set found"); + trace_error_dmic("select_mode() error: invalid coefficient set found"); return -EINVAL; } } else { @@ -668,8 +668,7 @@ static int select_mode(struct dmic_configuration *cfg, cfg->fir_b->length, gain_to_fir); if (ret < 0) { /* Invalid coefficient set found, should not happen. */ - trace_dmic_error("select_mode() error: " - "invalid coefficient set found"); + trace_error_dmic("select_mode() error: invalid coefficient set found"); return -EINVAL; } } else { @@ -834,10 +833,12 @@ static int configure_registers(struct dai *dai, /* pdata is set by dmic_probe(), error if it has not been set */ if (!pdata) { - trace_dmic_error("configure_registers() error: pdata not set"); + trace_error_dmic_id(dai, "configure_registers() error: pdata not set"); return -EINVAL; } + trace_dmic_id(dai, "configuring registers"); + /* OUTCONTROL0 and OUTCONTROL1 */ of0 = (dmic_prm[0]->fifo_bits == 32) ? 2 : 0; @@ -858,7 +859,7 @@ static int configure_registers(struct dai *dai, OUTCONTROL0_IPM(ipm) | OUTCONTROL0_TH(th); dai_write(dai, OUTCONTROL0, val); - trace_dmic("configure_registers(), OUTCONTROL0 = %u", val); + tracev_dmic_id(dai, "configure_registers(), OUTCONTROL0 = %u", val); ipm_helper1(&ipm, 1); val = OUTCONTROL1_TIE(0) | @@ -870,7 +871,7 @@ static int configure_registers(struct dai *dai, OUTCONTROL1_IPM(ipm) | OUTCONTROL1_TH(th); dai_write(dai, OUTCONTROL1, val); - trace_dmic("configure_registers(), OUTCONTROL1 = %u", val); + tracev_dmic_id(dai, "configure_registers(), OUTCONTROL1 = %u", val); #endif #if DMIC_HW_VERSION == 2 && DMIC_HW_CONTROLLERS > 2 @@ -888,7 +889,7 @@ static int configure_registers(struct dai *dai, OUTCONTROL0_IPM_SOURCE_4(source[3]) | OUTCONTROL0_TH(th); dai_write(dai, OUTCONTROL0, val); - trace_dmic("configure_registers(), OUTCONTROL0 = %u", val); + tracev_dmic_id(dai, "configure_registers(), OUTCONTROL0 = %u", val); ipm_helper2(source, &ipm, 1); val = OUTCONTROL1_TIE(0) | @@ -904,7 +905,7 @@ static int configure_registers(struct dai *dai, OUTCONTROL1_IPM_SOURCE_4(source[3]) | OUTCONTROL1_TH(th); dai_write(dai, OUTCONTROL1, val); - trace_dmic("configure_registers(), OUTCONTROL1 = %u", val); + tracev_dmic_id(dai, "configure_registers(), OUTCONTROL1 = %u", val); #endif /* Mark enabled microphones into private data to be later used @@ -917,7 +918,7 @@ static int configure_registers(struct dai *dai, ret = stereo_helper(stereo, swap); if (ret < 0) { - trace_dmic_error("configure_registers(): Mic enable conflict"); + trace_error_dmic_id(dai, "configure_registers(): enable conflict"); return ret; } @@ -931,12 +932,14 @@ static int configure_registers(struct dai *dai, CIC_CONTROL_MIC_MUTE(cic_mute) | CIC_CONTROL_STEREO_MODE(stereo[i]); dai_write(dai, base[i] + CIC_CONTROL, val); - trace_dmic("configure_registers(), CIC_CONTROL = %u", val); + tracev_dmic_id(dai, "configure_registers(), CIC_CONTROL = %u", + val); val = CIC_CONFIG_CIC_SHIFT(cfg->cic_shift + 8) | CIC_CONFIG_COMB_COUNT(cfg->mcic - 1); dai_write(dai, base[i] + CIC_CONFIG, val); - trace_dmic("configure_registers(), CIC_CONFIG = %u", val); + tracev_dmic_id(dai, "configure_registers(), CIC_CONFIG = %u", + val); /* Mono right channel mic usage requires swap of PDM channels * since the mono decimation is done with only left channel @@ -952,7 +955,8 @@ static int configure_registers(struct dai *dai, MIC_CONTROL_PDM_EN_B(cic_start_b) | MIC_CONTROL_PDM_EN_A(cic_start_a); dai_write(dai, base[i] + MIC_CONTROL, val); - trace_dmic("configure_registers(), MIC_CONTROL = %u", val); + tracev_dmic_id(dai, "configure_registers(), MIC_CONTROL = %u", + val); /* FIR A */ fir_decim = MAX(cfg->mfir_a - 1, 0); @@ -963,31 +967,35 @@ static int configure_registers(struct dai *dai, FIR_CONTROL_A_MUTE(fir_mute) | FIR_CONTROL_A_STEREO(stereo[i]); dai_write(dai, base[i] + FIR_CONTROL_A, val); - trace_dmic("configure_registers(), FIR_CONTROL_A = %u", val); + tracev_dmic_id(dai, "configure_registers(), FIR_CONTROL_A = %u", + val); val = FIR_CONFIG_A_FIR_DECIMATION(fir_decim) | FIR_CONFIG_A_FIR_SHIFT(cfg->fir_a_shift) | FIR_CONFIG_A_FIR_LENGTH(fir_length); dai_write(dai, base[i] + FIR_CONFIG_A, val); - trace_dmic("configure_registers(), FIR_CONFIG_A = %u", val); + tracev_dmic_id(dai, "configure_registers(), FIR_CONFIG_A = %u", + val); val = DC_OFFSET_LEFT_A_DC_OFFS(DCCOMP_TC0); dai_write(dai, base[i] + DC_OFFSET_LEFT_A, val); - trace_dmic("configure_registers(), DC_OFFSET_LEFT_A = %u", - val); + tracev_dmic_id(dai, "configure_registers(), DC_OFFSET_LEFT_A = %u", + val); val = DC_OFFSET_RIGHT_A_DC_OFFS(DCCOMP_TC0); dai_write(dai, base[i] + DC_OFFSET_RIGHT_A, val); - trace_dmic("configure_registers(), DC_OFFSET_RIGHT_A = %u", - val); + tracev_dmic_id(dai, "configure_registers(), DC_OFFSET_RIGHT_A = %u", + val); val = OUT_GAIN_LEFT_A_GAIN(0); dai_write(dai, base[i] + OUT_GAIN_LEFT_A, val); - trace_dmic("configure_registers(), OUT_GAIN_LEFT_A = %u", val); + tracev_dmic_id(dai, "configure_registers(), OUT_GAIN_LEFT_A = %u", + val); val = OUT_GAIN_RIGHT_A_GAIN(0); dai_write(dai, base[i] + OUT_GAIN_RIGHT_A, val); - trace_dmic("configure_registers(), OUT_GAIN_RIGHT_A = %u", val); + tracev_dmic_id(dai, "configure_registers(), OUT_GAIN_RIGHT_A = %u", + val); /* FIR B */ fir_decim = MAX(cfg->mfir_b - 1, 0); @@ -998,30 +1006,35 @@ static int configure_registers(struct dai *dai, FIR_CONTROL_B_MUTE(fir_mute) | FIR_CONTROL_B_STEREO(stereo[i]); dai_write(dai, base[i] + FIR_CONTROL_B, val); - trace_dmic("configure_registers(), FIR_CONTROL_B = %u", val); + tracev_dmic_id(dai, "configure_registers(), FIR_CONTROL_B = %u", + val); val = FIR_CONFIG_B_FIR_DECIMATION(fir_decim) | FIR_CONFIG_B_FIR_SHIFT(cfg->fir_b_shift) | FIR_CONFIG_B_FIR_LENGTH(fir_length); dai_write(dai, base[i] + FIR_CONFIG_B, val); - trace_dmic("configure_registers(), FIR_CONFIG_B = %u", val); + tracev_dmic_id(dai, "configure_registers(), FIR_CONFIG_B = %u", + val); val = DC_OFFSET_LEFT_B_DC_OFFS(DCCOMP_TC0); dai_write(dai, base[i] + DC_OFFSET_LEFT_B, val); - trace_dmic("configure_registers(), DC_OFFSET_LEFT_B = %u", val); + tracev_dmic_id(dai, "configure_registers(), DC_OFFSET_LEFT_B = %u", + val); val = DC_OFFSET_RIGHT_B_DC_OFFS(DCCOMP_TC0); dai_write(dai, base[i] + DC_OFFSET_RIGHT_B, val); - trace_dmic("configure_registers(), DC_OFFSET_RIGHT_B = %u", - val); + tracev_dmic_id(dai, "configure_registers(), DC_OFFSET_RIGHT_B = %u", + val); val = OUT_GAIN_LEFT_B_GAIN(0); dai_write(dai, base[i] + OUT_GAIN_LEFT_B, val); - trace_dmic("configure_registers(), OUT_GAIN_LEFT_B = %u", val); + tracev_dmic_id(dai, "configure_registers(), OUT_GAIN_LEFT_B = %u", + val); val = OUT_GAIN_RIGHT_B_GAIN(0); dai_write(dai, base[i] + OUT_GAIN_RIGHT_B, val); - trace_dmic("configure_registers(), OUT_GAIN_RIGHT_B = %u", val); + tracev_dmic_id(dai, "configure_registers(), OUT_GAIN_RIGHT_B = %u", + val); /* Write coef RAM A with scaled coefficient in reverse order */ length = cfg->fir_a_length; @@ -1062,10 +1075,10 @@ static int dmic_set_config(struct dai *dai, struct sof_ipc_dai_config *config) int i, j, ret = 0; int di = dai->index; - trace_dmic("dmic_set_config(), dai->index = %d", di); + trace_dmic_id(dai, "dmic_set_config()"); if (config->dmic.driver_ipc_version != DMIC_IPC_VERSION) { - trace_dmic_error("dmic_set_config() error: wrong ipc version"); + trace_error_dmic_id(dai, "dmic_set_config() error: wrong ipc version"); return -EINVAL; } @@ -1079,15 +1092,15 @@ static int dmic_set_config(struct dai *dai, struct sof_ipc_dai_config *config) if (unmute_ramp_time_ms < LOGRAMP_TIME_MIN_MS || unmute_ramp_time_ms > LOGRAMP_TIME_MAX_MS) { - trace_dmic_error("dmic_set_config(): Illegal ramp time = %d", - unmute_ramp_time_ms); + trace_error_dmic_id(dai, "dmic_set_config(): Illegal ramp time = %d", + unmute_ramp_time_ms); return -EINVAL; } step_db = LOGRAMP_CONST_TERM / unmute_ramp_time_ms; dmic->gain_coef = db2lin_fixed(step_db); - trace_dmic("dmic_set_config(): unmute_ramp_time_ms = %d", - unmute_ramp_time_ms); + trace_dmic_id(dai, "dmic_set_config(): unmute_ramp_time_ms = %d", + unmute_ramp_time_ms); /* * "config" might contain pdm controller params for only @@ -1102,8 +1115,7 @@ static int dmic_set_config(struct dai *dai, struct sof_ipc_dai_config *config) SOF_MEM_CAPS_RAM, DMIC_HW_FIFOS * size); if (!dmic_prm[0]) { - trace_dmic_error("dmic_set_config() error: " - "prm not initialized"); + trace_error_dmic_id(dai, "dmic_set_config() error: prm not initialized"); return -ENOMEM; } for (i = 1; i < DMIC_HW_FIFOS; i++) @@ -1112,8 +1124,7 @@ static int dmic_set_config(struct dai *dai, struct sof_ipc_dai_config *config) } if (di >= DMIC_HW_FIFOS) { - trace_dmic_error("dmic_set_config() error: " - "dai->index exceeds number of FIFOs"); + trace_error_dmic_id(dai, "dmic_set_config() error: dai->index exceeds number of FIFOs"); return -EINVAL; } @@ -1125,9 +1136,7 @@ static int dmic_set_config(struct dai *dai, struct sof_ipc_dai_config *config) assert(!ret); if (config->dmic.num_pdm_active > DMIC_HW_CONTROLLERS) { - trace_dmic_error("dmic_set_config() error: the requested " - "PDM controllers count exceeds platform " - "capability"); + trace_error_dmic_id(dai, "dmic_set_config() error: the requested PDM controllers count exceeds platform capability"); return -EINVAL; } @@ -1147,15 +1156,14 @@ static int dmic_set_config(struct dai *dai, struct sof_ipc_dai_config *config) } } - trace_dmic("dmic_set_config(), prm " - "config->dmic.num_pdm_active = %u", - config->dmic.num_pdm_active); - trace_dmic("dmic_set_config(), prm pdmclk_min = %u, pdmclk_max = %u", - dmic_prm[di]->pdmclk_min, dmic_prm[di]->pdmclk_max); - trace_dmic("dmic_set_config(), prm duty_min = %u, duty_max = %u", - dmic_prm[di]->duty_min, dmic_prm[di]->duty_max); - trace_dmic("dmic_set_config(), prm fifo_fs = %u, fifo_bits = %u", - dmic_prm[di]->fifo_fs, dmic_prm[di]->fifo_bits); + trace_dmic_id(dai, "dmic_set_config(), prm config->dmic.num_pdm_active = %u", + config->dmic.num_pdm_active); + trace_dmic_id(dai, "dmic_set_config(), prm pdmclk_min = %u, pdmclk_max = %u", + dmic_prm[di]->pdmclk_min, dmic_prm[di]->pdmclk_max); + trace_dmic_id(dai, "dmic_set_config(), prm duty_min = %u, duty_max = %u", + dmic_prm[di]->duty_min, dmic_prm[di]->duty_max); + trace_dmic_id(dai, "dmic_set_config(), prm fifo_fs = %u, fifo_bits = %u", + dmic_prm[di]->fifo_fs, dmic_prm[di]->fifo_bits); switch (dmic_prm[di]->fifo_bits) { case 0: @@ -1163,8 +1171,7 @@ static int dmic_set_config(struct dai *dai, struct sof_ipc_dai_config *config) case 32: break; default: - trace_dmic_error("dmic_set_config() error: " - "fifo_bits EINVAL"); + trace_error_dmic_id(dai, "dmic_set_config() error: fifo_bits EINVAL"); return -EINVAL; } @@ -1176,35 +1183,33 @@ static int dmic_set_config(struct dai *dai, struct sof_ipc_dai_config *config) */ find_modes(&modes_a, dmic_prm[0]->fifo_fs, di); if (modes_a.num_of_modes == 0 && dmic_prm[0]->fifo_fs > 0) { - trace_dmic_error("dmic_set_config() error: " - "No modes found found for FIFO A"); + trace_error_dmic_id(dai, "dmic_set_config() error: No modes found found for FIFO A"); return -EINVAL; } find_modes(&modes_b, dmic_prm[1]->fifo_fs, di); if (modes_b.num_of_modes == 0 && dmic_prm[1]->fifo_fs > 0) { - trace_dmic_error("dmic_set_config() error: " - "No modes found for FIFO B"); + trace_error_dmic_id(dai, "dmic_set_config() error: No modes found for FIFO B"); return -EINVAL; } match_modes(&modes_ab, &modes_a, &modes_b); ret = select_mode(&cfg, &modes_ab); if (ret < 0) { - trace_dmic_error("dmic_set_config() error: " - "select_mode() failed"); + trace_error_dmic_id(dai, "dmic_set_config() error: select_mode() failed"); return -EINVAL; } - trace_dmic("dmic_set_config(), cfg clkdiv = %u, mcic = %u", - cfg.clkdiv, cfg.mcic); - trace_dmic("dmic_set_config(), cfg mfir_a = %u, mfir_b = %u", - cfg.mfir_a, cfg.mfir_b); - trace_dmic("dmic_set_config(), cfg cic_shift = %u", cfg.cic_shift); - trace_dmic("dmic_set_config(), cfg fir_a_shift = %u, " - "cfg.fir_b_shift = %u", cfg.fir_a_shift, cfg.fir_b_shift); - trace_dmic("dmic_set_config(), cfg fir_a_length = %u, " - "fir_b_length = %u", cfg.fir_a_length, cfg.fir_b_length); + trace_dmic_id(dai, "dmic_set_config(), cfg clkdiv = %u, mcic = %u", + cfg.clkdiv, cfg.mcic); + trace_dmic_id(dai, "dmic_set_config(), cfg mfir_a = %u, mfir_b = %u", + cfg.mfir_a, cfg.mfir_b); + trace_dmic_id(dai, "dmic_set_config(), cfg cic_shift = %u", + cfg.cic_shift); + trace_dmic_id(dai, "dmic_set_config(), cfg fir_a_shift = %u, cfg.fir_b_shift = %u", + cfg.fir_a_shift, cfg.fir_b_shift); + trace_dmic_id(dai, "dmic_set_config(), cfg fir_a_length = %u, fir_b_length = %u", + cfg.fir_a_length, cfg.fir_b_length); /* Struct reg contains a mirror of actual HW registers. Determine * register bits configuration from decimator configuration and the @@ -1212,8 +1217,7 @@ static int dmic_set_config(struct dai *dai, struct sof_ipc_dai_config *config) */ ret = configure_registers(dai, &cfg); if (ret < 0) { - trace_dmic_error("dmic_set_config() error: " - "cannot configure registers"); + trace_error_dmic_id(dai, "dmic_set_config() error: cannot configure registers"); return -EINVAL; } @@ -1234,7 +1238,7 @@ static void dmic_start(struct dai *dai) /* enable port */ spin_lock(&dai->lock); - trace_dmic("dmic_start()"); + tracev_dmic_id(dai, "dmic_start()"); dmic->state = COMP_STATE_ACTIVE; dmic->startcount = 0; @@ -1243,7 +1247,7 @@ static void dmic_start(struct dai *dai) switch (dai->index) { case 0: - trace_dmic("dmic_start(), dmic->fifo_a"); + trace_dmic_id(dai, "dmic_start(), dmic->fifo_a"); /* Clear FIFO A initialize, Enable interrupts to DSP, * Start FIFO A packer. */ @@ -1252,7 +1256,7 @@ static void dmic_start(struct dai *dai) OUTCONTROL0_SIP_BIT); break; case 1: - trace_dmic("dmic_start(), dmic->fifo_b"); + trace_dmic_id(dai, "dmic_start(), dmic->fifo_b"); /* Clear FIFO B initialize, Enable interrupts to DSP, * Start FIFO B packer. */ @@ -1277,9 +1281,8 @@ static void dmic_start(struct dai *dai) #else fir_b = 0; #endif - trace_dmic("dmic_start(), " - "mic_a = %u, mic_b = %u, fir_a = %u, fir_b = %u", - mic_a, mic_b, fir_a, fir_b); + trace_dmic_id(dai, "dmic_start(), mic_a = %u, mic_b = %u, fir_a = %u, fir_b = %u", + mic_a, mic_b, fir_a, fir_b); /* If both microphones are needed start them simultaneously * to start them in sync. The reset may be cleared for another @@ -1336,7 +1339,6 @@ static void dmic_start(struct dai *dai) } dmic_active_fifos++; - trace_dmic("dmic_start(), dmic_active_fifos = %d", dmic_active_fifos); spin_unlock(&dai->lock); @@ -1349,7 +1351,8 @@ static void dmic_start(struct dai *dai) schedule_task(&dmic->dmicwork, DMIC_UNMUTE_RAMP_US, DMIC_UNMUTE_RAMP_US); - trace_dmic("dmic_start(), done"); + trace_dmic_id(dai, "dmic_start(), done active_fifos = %d", + dmic_active_fifos); } /* stop the DMIC for capture */ @@ -1358,11 +1361,11 @@ static void dmic_stop(struct dai *dai) struct dmic_pdata *dmic = dai_get_drvdata(dai); int i; - trace_dmic("dmic_stop()"); + tracev_dmic_id(dai, "dmic_stop()"); spin_lock(&dai->lock); if (dmic->state != COMP_STATE_ACTIVE) { - trace_dmic("dmic_stop(), already stopped"); + trace_dmic_id(dai, "dmic_stop(), already stopped"); goto out; } @@ -1384,7 +1387,8 @@ static void dmic_stop(struct dai *dai) /* Set soft reset and mute on for all PDM controllers. */ - trace_dmic("dmic_stop(), dmic_active_fifos = %d", dmic_active_fifos); + trace_dmic_id(dai, "dmic_stop(), dmic_active_fifos = %d", + dmic_active_fifos); for (i = 0; i < DMIC_HW_CONTROLLERS; i++) { /* Don't stop CIC yet if both FIFOs were active */ @@ -1434,17 +1438,16 @@ static int dmic_trigger(struct dai *dai, int cmd, int direction) { struct dmic_pdata *dmic = dai_get_drvdata(dai); - trace_dmic("dmic_trigger()"); + tracev_dmic_id(dai, "dmic_trigger()"); /* dai private is set in dmic_probe(), error if not set */ if (!dmic) { - trace_dmic_error("dmic_trigger() error: dai not set"); + trace_error_dmic_id(dai, "dmic_trigger() error: dai not set"); return -EINVAL; } if (direction != DAI_DIR_CAPTURE) { - trace_dmic_error("dmic_trigger() error: " - "direction != DAI_DIR_CAPTURE"); + trace_error_dmic_id(dai, "dmic_trigger() error: direction != DAI_DIR_CAPTURE"); return -EINVAL; } @@ -1455,10 +1458,8 @@ static int dmic_trigger(struct dai *dai, int cmd, int direction) dmic->state == COMP_STATE_PAUSED) { dmic_start(dai); } else { - trace_dmic_error("dmic_trigger() error: " - "state is not prepare or paused, " - "dmic->state = %u", - dmic->state); + trace_error_dmic_id(dai, "dmic_trigger() error: state is not prepare or paused, dmic->state = %u", + dmic->state); } break; case COMP_TRIGGER_STOP: @@ -1490,15 +1491,13 @@ static void dmic_irq_handler(void *data) /* Trace OUTSTAT0 register */ val0 = dai_read(dai, OUTSTAT0); val1 = dai_read(dai, OUTSTAT1); - trace_dmic("dmic_irq_handler(), OUTSTAT0 = %u", val0); - trace_dmic("dmic_irq_handler(), OUTSTAT1 = %u", val1); + trace_dmic_id(dai, "dmic_irq_handler(), OUTSTAT0 = %u", val0); + trace_dmic_id(dai, "dmic_irq_handler(), OUTSTAT1 = %u", val1); if (val0 & OUTSTAT0_ROR_BIT) - trace_dmic_error("dmic_irq_handler() error: " - "full fifo A or PDM overrrun"); + trace_error_dmic_id(dai, "dmic_irq_handler() error: full fifo A or PDM overrrun"); if (val1 & OUTSTAT1_ROR_BIT) - trace_dmic_error("dmic_irq_handler() error: " - "full fifo B or PDM overrrun"); + trace_error_dmic_id(dai, "dmic_irq_handler() error: full fifo B or PDM overrrun"); } static int dmic_probe(struct dai *dai) @@ -1507,7 +1506,7 @@ static int dmic_probe(struct dai *dai) struct dmic_pdata *dmic; int ret; - trace_dmic("dmic_probe()"); + trace_dmic_id(dai, "dmic_probe()"); if (dai_get_drvdata(dai)) return -EEXIST; /* already created */ @@ -1516,7 +1515,7 @@ static int dmic_probe(struct dai *dai) dmic = rzalloc(SOF_MEM_ZONE_SYS_RUNTIME, 0, SOF_MEM_CAPS_RAM, sizeof(*dmic)); if (!dmic) { - trace_dmic_error("dmic_probe() error: alloc failed"); + trace_error_dmic_id(dai, "dmic_probe() error: alloc failed"); return -ENOMEM; } dai_set_drvdata(dai, dmic); @@ -1534,7 +1533,7 @@ static int dmic_probe(struct dai *dai) ret = interrupt_register(dmic->irq, dmic_irq_handler, dai); if (ret < 0) { - trace_dmic_error("dmic failed to allocate IRQ"); + trace_error_dmic_id(dai, "dmic failed to allocate IRQ"); rfree(dmic); return ret; } @@ -1620,7 +1619,7 @@ static inline uint32_t dmic_ts_tscc_addr(void) static int dmic_ts_config(struct dai *dai, struct timestamp_cfg *cfg) { if (cfg->type != SOF_DAI_INTEL_DMIC) { - trace_dmic_error("dmic_ts_config(): Illegal DAI type"); + trace_error_dmic_id(dai, "dmic_ts_config(): Illegal DAI type"); return -EINVAL; } From 010ff1c5f7e935ac105a8bfd7ed1d60e74d89df0 Mon Sep 17 00:00:00 2001 From: Marcin Maka Date: Mon, 13 Jan 2020 19:33:17 +0100 Subject: [PATCH 4/5] dmic: config: do parameter check first Parameter verification should be done before any expensive resource allocations happen. Signed-off-by: Marcin Maka --- src/drivers/intel/cavs/dmic.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/drivers/intel/cavs/dmic.c b/src/drivers/intel/cavs/dmic.c index b3e509474d86..a3a9c3557894 100644 --- a/src/drivers/intel/cavs/dmic.c +++ b/src/drivers/intel/cavs/dmic.c @@ -1097,6 +1097,16 @@ static int dmic_set_config(struct dai *dai, struct sof_ipc_dai_config *config) return -EINVAL; } + if (di >= DMIC_HW_FIFOS) { + trace_error_dmic_id(dai, "dmic_set_config() error: dai->index exceeds number of FIFOs"); + return -EINVAL; + } + + if (config->dmic.num_pdm_active > DMIC_HW_CONTROLLERS) { + trace_error_dmic_id(dai, "dmic_set_config() error: the requested PDM controllers count exceeds platform capability"); + return -EINVAL; + } + step_db = LOGRAMP_CONST_TERM / unmute_ramp_time_ms; dmic->gain_coef = db2lin_fixed(step_db); trace_dmic_id(dai, "dmic_set_config(): unmute_ramp_time_ms = %d", @@ -1123,11 +1133,6 @@ static int dmic_set_config(struct dai *dai, struct sof_ipc_dai_config *config) ((uint8_t *)dmic_prm[i - 1] + size); } - if (di >= DMIC_HW_FIFOS) { - trace_error_dmic_id(dai, "dmic_set_config() error: dai->index exceeds number of FIFOs"); - return -EINVAL; - } - /* Copy the new DMIC params to persistent. The last request * determines the parameters. */ @@ -1135,11 +1140,6 @@ static int dmic_set_config(struct dai *dai, struct sof_ipc_dai_config *config) sizeof(struct sof_ipc_dai_dmic_params)); assert(!ret); - if (config->dmic.num_pdm_active > DMIC_HW_CONTROLLERS) { - trace_error_dmic_id(dai, "dmic_set_config() error: the requested PDM controllers count exceeds platform capability"); - return -EINVAL; - } - /* copy the pdm controller params from ipc */ for (i = 0; i < DMIC_HW_CONTROLLERS; i++) { dmic_prm[di]->pdm[i].id = i; From fafbe3610dc239805c0e01e4d6b9b61d3ae6634f Mon Sep 17 00:00:00 2001 From: Marcin Maka Date: Tue, 14 Jan 2020 12:16:13 +0100 Subject: [PATCH 5/5] trace: dai: use dot as type and index separator Follows the notation used for id's by the sof logger tool. Type is followed by the index. Signed-off-by: Marcin Maka --- src/audio/dai.c | 6 +++--- src/ipc/handler.c | 2 +- src/lib/dai.c | 17 ++++++++--------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/audio/dai.c b/src/audio/dai.c index 27f619b0c541..35def51f7956 100644 --- a/src/audio/dai.c +++ b/src/audio/dai.c @@ -676,8 +676,8 @@ static int dai_config(struct comp_dev *dev, struct sof_ipc_dai_config *config) int channel = 0; int handshake; - trace_dai_comp_with_ids(dev, "config dai %d type %d", - config->dai_index, config->type); + trace_dai_comp_with_ids(dev, "dai_config() dai %d.%d", + config->type, config->dai_index); /* cannot configure DAI while active */ if (dev->state == COMP_STATE_ACTIVE) { @@ -691,7 +691,7 @@ static int dai_config(struct comp_dev *dev, struct sof_ipc_dai_config *config) dd->config.burst_elems = config->ssp.tdm_slots; break; case SOF_DAI_INTEL_DMIC: - trace_dai_comp_with_ids(dev, "dai_config(), config->type = SOF_DAI_INTEL_DMIC"); + tracev_dai_comp_with_ids(dev, "dai_config(), config->type = SOF_DAI_INTEL_DMIC"); /* We can use always the largest burst length. */ dd->config.burst_elems = 8; diff --git a/src/ipc/handler.c b/src/ipc/handler.c index 572aa8be7734..8bb3715e2ad3 100644 --- a/src/ipc/handler.c +++ b/src/ipc/handler.c @@ -552,7 +552,7 @@ static int ipc_dai_config(uint32_t header) /* copy message with ABI safe method */ IPC_COPY_CMD(config, ipc->comp_data); - trace_ipc("ipc: dai %d,%d -> config ", config.type, + trace_ipc("ipc: dai %d.%d -> config ", config.type, config.dai_index); /* send params to all DAI components who use that physical DAI */ diff --git a/src/lib/dai.c b/src/lib/dai.c index cda653a3e0ce..75f40d93bb8e 100644 --- a/src/lib/dai.c +++ b/src/lib/dai.c @@ -54,8 +54,8 @@ struct dai *dai_get(uint32_t type, uint32_t index, uint32_t flags) if (!ret) d->sref++; - trace_dai("dai_get(), d = %p, sref = %d", - (uintptr_t)d, d->sref); + trace_dai("dai_get %d.%d new sref %d", + type, index, d->sref); platform_shared_commit(d, sizeof(*d)); @@ -63,8 +63,8 @@ struct dai *dai_get(uint32_t type, uint32_t index, uint32_t flags) return !ret ? d : NULL; } - trace_error(TRACE_CLASS_DAI, "dai_get() error: " - "type = %d, index = %d not found", type, index); + trace_error(TRACE_CLASS_DAI, "dai_get error: %d.%d not found", + type, index); return NULL; } @@ -76,13 +76,12 @@ void dai_put(struct dai *dai) if (--dai->sref == 0) { ret = dai_remove(dai); if (ret < 0) { - trace_error(TRACE_CLASS_DAI, - "dai_put() error: " - "dai_remove() failed ret = %d", ret); + trace_error(TRACE_CLASS_DAI, "dai_put error: %d.%d dai_remove() failed ret = %d", + dai->drv->type, dai->index, ret); } } - trace_event(TRACE_CLASS_DAI, "dai_put(), dai = %p, sref = %d", - (uintptr_t)dai, dai->sref); + trace_event(TRACE_CLASS_DAI, "dai_put %d.%d new sref %d", + dai->drv->type, dai->index, dai->sref); platform_shared_commit(dai, sizeof(*dai)); spin_unlock(&dai->lock); }