Lines Matching refs:sdev
45 static int trace_filter_append_elem(struct snd_sof_dev *sdev, u32 key, u32 value, in trace_filter_append_elem() argument
59 static int trace_filter_parse_entry(struct snd_sof_dev *sdev, const char *line, in trace_filter_parse_entry() argument
75 dev_err(sdev->dev, "Invalid trace filter entry '%s'\n", line); in trace_filter_parse_entry()
80 ret = trace_filter_append_elem(sdev, SOF_IPC_TRACE_FILTER_ELEM_BY_UUID, in trace_filter_parse_entry()
86 ret = trace_filter_append_elem(sdev, SOF_IPC_TRACE_FILTER_ELEM_BY_PIPE, in trace_filter_parse_entry()
92 ret = trace_filter_append_elem(sdev, SOF_IPC_TRACE_FILTER_ELEM_BY_COMP, in trace_filter_parse_entry()
98 ret = trace_filter_append_elem(sdev, SOF_IPC_TRACE_FILTER_ELEM_SET_LEVEL | in trace_filter_parse_entry()
110 static int trace_filter_parse(struct snd_sof_dev *sdev, char *string, in trace_filter_parse() argument
135 entry_len = trace_filter_parse_entry(sdev, entry, *out, capacity, &cnt); in trace_filter_parse()
137 dev_err(sdev->dev, in trace_filter_parse()
149 static int ipc3_trace_update_filter(struct snd_sof_dev *sdev, int num_elems, in ipc3_trace_update_filter() argument
169 ret = pm_runtime_resume_and_get(sdev->dev); in ipc3_trace_update_filter()
171 dev_err(sdev->dev, "enabling device failed: %d\n", ret); in ipc3_trace_update_filter()
174 ret = sof_ipc_tx_message_no_reply(sdev->ipc, msg, msg->hdr.size); in ipc3_trace_update_filter()
175 pm_runtime_put_autosuspend(sdev->dev); in ipc3_trace_update_filter()
187 struct snd_sof_dev *sdev = dfse->sdev; in dfsentry_trace_filter_write() local
193 dev_err(sdev->dev, "%s too long input, %zu > %d\n", __func__, count, in dfsentry_trace_filter_write()
202 ret = trace_filter_parse(sdev, string, &num_elems, &elems); in dfsentry_trace_filter_write()
207 ret = ipc3_trace_update_filter(sdev, num_elems, elems); in dfsentry_trace_filter_write()
209 dev_err(sdev->dev, "Filter update failed: %d\n", ret); in dfsentry_trace_filter_write()
226 static int debugfs_create_trace_filter(struct snd_sof_dev *sdev) in debugfs_create_trace_filter() argument
230 dfse = devm_kzalloc(sdev->dev, sizeof(*dfse), GFP_KERNEL); in debugfs_create_trace_filter()
234 dfse->sdev = sdev; in debugfs_create_trace_filter()
237 debugfs_create_file("filter", 0200, sdev->debugfs_root, dfse, in debugfs_create_trace_filter()
240 list_add(&dfse->list, &sdev->dfsentry_list); in debugfs_create_trace_filter()
260 static size_t sof_dtrace_avail(struct snd_sof_dev *sdev, in sof_dtrace_avail() argument
263 struct sof_dtrace_priv *priv = sdev->fw_trace_data; in sof_dtrace_avail()
281 static size_t sof_wait_dtrace_avail(struct snd_sof_dev *sdev, loff_t pos, in sof_wait_dtrace_avail() argument
284 size_t ret = sof_dtrace_avail(sdev, pos, buffer_size); in sof_wait_dtrace_avail()
285 struct sof_dtrace_priv *priv = sdev->fw_trace_data; in sof_wait_dtrace_avail()
312 return sof_dtrace_avail(sdev, pos, buffer_size); in sof_wait_dtrace_avail()
319 struct snd_sof_dev *sdev = dfse->sdev; in dfsentry_dtrace_read() local
320 struct sof_dtrace_priv *priv = sdev->fw_trace_data; in dfsentry_dtrace_read()
340 avail = sof_wait_dtrace_avail(sdev, lpos, buffer_size); in dfsentry_dtrace_read()
342 dev_err(sdev->dev, "trace IO error\n"); in dfsentry_dtrace_read()
375 struct snd_sof_dev *sdev = dfse->sdev; in dfsentry_dtrace_release() local
376 struct sof_dtrace_priv *priv = sdev->fw_trace_data; in dfsentry_dtrace_release()
392 static int debugfs_create_dtrace(struct snd_sof_dev *sdev) in debugfs_create_dtrace() argument
398 if (!sdev) in debugfs_create_dtrace()
401 priv = sdev->fw_trace_data; in debugfs_create_dtrace()
403 ret = debugfs_create_trace_filter(sdev); in debugfs_create_dtrace()
405 dev_warn(sdev->dev, "failed to create filter debugfs file: %d", ret); in debugfs_create_dtrace()
407 dfse = devm_kzalloc(sdev->dev, sizeof(*dfse), GFP_KERNEL); in debugfs_create_dtrace()
414 dfse->sdev = sdev; in debugfs_create_dtrace()
416 debugfs_create_file("trace", 0444, sdev->debugfs_root, dfse, in debugfs_create_dtrace()
422 static int ipc3_dtrace_enable(struct snd_sof_dev *sdev) in ipc3_dtrace_enable() argument
424 struct sof_dtrace_priv *priv = sdev->fw_trace_data; in ipc3_dtrace_enable()
425 struct sof_ipc_fw_ready *ready = &sdev->fw_ready; in ipc3_dtrace_enable()
430 if (!sdev->fw_trace_is_supported) in ipc3_dtrace_enable()
458 ret = sof_dtrace_host_init(sdev, &priv->dmatb, ¶ms); in ipc3_dtrace_enable()
460 dev_err(sdev->dev, "Host dtrace init failed: %d\n", ret); in ipc3_dtrace_enable()
463 dev_dbg(sdev->dev, "stream_tag: %d\n", params.stream_tag); in ipc3_dtrace_enable()
467 ret = sof_ipc_tx_message_no_reply(sdev->ipc, ¶ms, sizeof(params)); in ipc3_dtrace_enable()
469 dev_err(sdev->dev, "can't set params for DMA for trace %d\n", ret); in ipc3_dtrace_enable()
476 ret = sof_dtrace_host_trigger(sdev, SNDRV_PCM_TRIGGER_START); in ipc3_dtrace_enable()
478 dev_err(sdev->dev, "Host dtrace trigger start failed: %d\n", ret); in ipc3_dtrace_enable()
486 sof_dtrace_host_release(sdev); in ipc3_dtrace_enable()
490 static int ipc3_dtrace_init(struct snd_sof_dev *sdev) in ipc3_dtrace_init() argument
496 if (sdev->pdata->ipc_type != SOF_IPC_TYPE_3) in ipc3_dtrace_init()
499 if (sdev->fw_trace_data) { in ipc3_dtrace_init()
500 dev_err(sdev->dev, "fw_trace_data has been already allocated\n"); in ipc3_dtrace_init()
504 priv = devm_kzalloc(sdev->dev, sizeof(*priv), GFP_KERNEL); in ipc3_dtrace_init()
508 sdev->fw_trace_data = priv; in ipc3_dtrace_init()
514 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, sdev->dev, in ipc3_dtrace_init()
517 dev_err(sdev->dev, "can't alloc page table for trace %d\n", ret); in ipc3_dtrace_init()
522 ret = snd_dma_alloc_dir_pages(SNDRV_DMA_TYPE_DEV_SG, sdev->dev, in ipc3_dtrace_init()
526 dev_err(sdev->dev, "can't alloc buffer for trace %d\n", ret); in ipc3_dtrace_init()
531 ret = snd_sof_create_page_table(sdev->dev, &priv->dmatb, in ipc3_dtrace_init()
537 dev_dbg(sdev->dev, "dma_trace_pages: %d\n", priv->dma_trace_pages); in ipc3_dtrace_init()
539 if (sdev->first_boot) { in ipc3_dtrace_init()
540 ret = debugfs_create_dtrace(sdev); in ipc3_dtrace_init()
547 ret = ipc3_dtrace_enable(sdev); in ipc3_dtrace_init()
560 int ipc3_dtrace_posn_update(struct snd_sof_dev *sdev, in ipc3_dtrace_posn_update() argument
563 struct sof_dtrace_priv *priv = sdev->fw_trace_data; in ipc3_dtrace_posn_update()
565 if (!sdev->fw_trace_is_supported) in ipc3_dtrace_posn_update()
573 dev_err(sdev->dev, in ipc3_dtrace_posn_update()
581 static void ipc3_dtrace_fw_crashed(struct snd_sof_dev *sdev) in ipc3_dtrace_fw_crashed() argument
583 struct sof_dtrace_priv *priv = sdev->fw_trace_data; in ipc3_dtrace_fw_crashed()
591 static void ipc3_dtrace_release(struct snd_sof_dev *sdev, bool only_stop) in ipc3_dtrace_release() argument
593 struct sof_dtrace_priv *priv = sdev->fw_trace_data; in ipc3_dtrace_release()
594 struct sof_ipc_fw_ready *ready = &sdev->fw_ready; in ipc3_dtrace_release()
599 if (!sdev->fw_trace_is_supported || priv->dtrace_state == SOF_DTRACE_DISABLED) in ipc3_dtrace_release()
602 ret = sof_dtrace_host_trigger(sdev, SNDRV_PCM_TRIGGER_STOP); in ipc3_dtrace_release()
604 dev_err(sdev->dev, "Host dtrace trigger stop failed: %d\n", ret); in ipc3_dtrace_release()
615 ret = sof_ipc_tx_message_no_reply(sdev->ipc, &hdr, hdr.size); in ipc3_dtrace_release()
617 dev_err(sdev->dev, "DMA_TRACE_FREE failed with error: %d\n", ret); in ipc3_dtrace_release()
623 ret = sof_dtrace_host_release(sdev); in ipc3_dtrace_release()
625 dev_err(sdev->dev, "Host dtrace release failed %d\n", ret); in ipc3_dtrace_release()
634 static void ipc3_dtrace_suspend(struct snd_sof_dev *sdev, pm_message_t pm_state) in ipc3_dtrace_suspend() argument
636 ipc3_dtrace_release(sdev, pm_state.event == SOF_DSP_PM_D0); in ipc3_dtrace_suspend()
639 static int ipc3_dtrace_resume(struct snd_sof_dev *sdev) in ipc3_dtrace_resume() argument
641 return ipc3_dtrace_enable(sdev); in ipc3_dtrace_resume()
644 static void ipc3_dtrace_free(struct snd_sof_dev *sdev) in ipc3_dtrace_free() argument
646 struct sof_dtrace_priv *priv = sdev->fw_trace_data; in ipc3_dtrace_free()
649 ipc3_dtrace_release(sdev, false); in ipc3_dtrace_free()