Lines Matching defs:sdev

45 static int trace_filter_append_elem(struct snd_sof_dev *sdev, u32 key, u32 value,
59 static int trace_filter_parse_entry(struct snd_sof_dev *sdev, const char *line,
75 dev_err(sdev->dev, "Invalid trace filter entry '%s'\n", line);
80 ret = trace_filter_append_elem(sdev, SOF_IPC_TRACE_FILTER_ELEM_BY_UUID,
86 ret = trace_filter_append_elem(sdev, SOF_IPC_TRACE_FILTER_ELEM_BY_PIPE,
92 ret = trace_filter_append_elem(sdev, SOF_IPC_TRACE_FILTER_ELEM_BY_COMP,
98 ret = trace_filter_append_elem(sdev, SOF_IPC_TRACE_FILTER_ELEM_SET_LEVEL |
110 static int trace_filter_parse(struct snd_sof_dev *sdev, char *string,
135 entry_len = trace_filter_parse_entry(sdev, entry, *out, capacity, &cnt);
137 dev_err(sdev->dev,
149 static int ipc3_trace_update_filter(struct snd_sof_dev *sdev, int num_elems,
169 ret = pm_runtime_resume_and_get(sdev->dev);
171 dev_err(sdev->dev, "enabling device failed: %d\n", ret);
174 ret = sof_ipc_tx_message_no_reply(sdev->ipc, msg, msg->hdr.size);
175 pm_runtime_mark_last_busy(sdev->dev);
176 pm_runtime_put_autosuspend(sdev->dev);
188 struct snd_sof_dev *sdev = dfse->sdev;
194 dev_err(sdev->dev, "%s too long input, %zu > %d\n", __func__, count,
203 ret = trace_filter_parse(sdev, string, &num_elems, &elems);
208 ret = ipc3_trace_update_filter(sdev, num_elems, elems);
210 dev_err(sdev->dev, "Filter update failed: %d\n", ret);
227 static int debugfs_create_trace_filter(struct snd_sof_dev *sdev)
231 dfse = devm_kzalloc(sdev->dev, sizeof(*dfse), GFP_KERNEL);
235 dfse->sdev = sdev;
238 debugfs_create_file("filter", 0200, sdev->debugfs_root, dfse,
241 list_add(&dfse->list, &sdev->dfsentry_list);
261 static size_t sof_dtrace_avail(struct snd_sof_dev *sdev,
264 struct sof_dtrace_priv *priv = sdev->fw_trace_data;
282 static size_t sof_wait_dtrace_avail(struct snd_sof_dev *sdev, loff_t pos,
285 size_t ret = sof_dtrace_avail(sdev, pos, buffer_size);
286 struct sof_dtrace_priv *priv = sdev->fw_trace_data;
313 return sof_dtrace_avail(sdev, pos, buffer_size);
320 struct snd_sof_dev *sdev = dfse->sdev;
321 struct sof_dtrace_priv *priv = sdev->fw_trace_data;
341 avail = sof_wait_dtrace_avail(sdev, lpos, buffer_size);
343 dev_err(sdev->dev, "trace IO error\n");
376 struct snd_sof_dev *sdev = dfse->sdev;
377 struct sof_dtrace_priv *priv = sdev->fw_trace_data;
393 static int debugfs_create_dtrace(struct snd_sof_dev *sdev)
399 if (!sdev)
402 priv = sdev->fw_trace_data;
404 ret = debugfs_create_trace_filter(sdev);
406 dev_warn(sdev->dev, "failed to create filter debugfs file: %d", ret);
408 dfse = devm_kzalloc(sdev->dev, sizeof(*dfse), GFP_KERNEL);
415 dfse->sdev = sdev;
417 debugfs_create_file("trace", 0444, sdev->debugfs_root, dfse,
423 static int ipc3_dtrace_enable(struct snd_sof_dev *sdev)
425 struct sof_dtrace_priv *priv = sdev->fw_trace_data;
426 struct sof_ipc_fw_ready *ready = &sdev->fw_ready;
431 if (!sdev->fw_trace_is_supported)
459 ret = sof_dtrace_host_init(sdev, &priv->dmatb, &params);
461 dev_err(sdev->dev, "Host dtrace init failed: %d\n", ret);
464 dev_dbg(sdev->dev, "stream_tag: %d\n", params.stream_tag);
468 ret = sof_ipc_tx_message_no_reply(sdev->ipc, &params, sizeof(params));
470 dev_err(sdev->dev, "can't set params for DMA for trace %d\n", ret);
477 ret = sof_dtrace_host_trigger(sdev, SNDRV_PCM_TRIGGER_START);
479 dev_err(sdev->dev, "Host dtrace trigger start failed: %d\n", ret);
487 sof_dtrace_host_release(sdev);
491 static int ipc3_dtrace_init(struct snd_sof_dev *sdev)
497 if (sdev->pdata->ipc_type != SOF_IPC)
500 if (sdev->fw_trace_data) {
501 dev_err(sdev->dev, "fw_trace_data has been already allocated\n");
505 priv = devm_kzalloc(sdev->dev, sizeof(*priv), GFP_KERNEL);
509 sdev->fw_trace_data = priv;
515 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, sdev->dev,
518 dev_err(sdev->dev, "can't alloc page table for trace %d\n", ret);
523 ret = snd_dma_alloc_dir_pages(SNDRV_DMA_TYPE_DEV_SG, sdev->dev,
527 dev_err(sdev->dev, "can't alloc buffer for trace %d\n", ret);
532 ret = snd_sof_create_page_table(sdev->dev, &priv->dmatb,
538 dev_dbg(sdev->dev, "dma_trace_pages: %d\n", priv->dma_trace_pages);
540 if (sdev->first_boot) {
541 ret = debugfs_create_dtrace(sdev);
548 ret = ipc3_dtrace_enable(sdev);
561 int ipc3_dtrace_posn_update(struct snd_sof_dev *sdev,
564 struct sof_dtrace_priv *priv = sdev->fw_trace_data;
566 if (!sdev->fw_trace_is_supported)
574 dev_err(sdev->dev,
582 static void ipc3_dtrace_fw_crashed(struct snd_sof_dev *sdev)
584 struct sof_dtrace_priv *priv = sdev->fw_trace_data;
592 static void ipc3_dtrace_release(struct snd_sof_dev *sdev, bool only_stop)
594 struct sof_dtrace_priv *priv = sdev->fw_trace_data;
595 struct sof_ipc_fw_ready *ready = &sdev->fw_ready;
600 if (!sdev->fw_trace_is_supported || priv->dtrace_state == SOF_DTRACE_DISABLED)
603 ret = sof_dtrace_host_trigger(sdev, SNDRV_PCM_TRIGGER_STOP);
605 dev_err(sdev->dev, "Host dtrace trigger stop failed: %d\n", ret);
616 ret = sof_ipc_tx_message_no_reply(sdev->ipc, &hdr, hdr.size);
618 dev_err(sdev->dev, "DMA_TRACE_FREE failed with error: %d\n", ret);
624 ret = sof_dtrace_host_release(sdev);
626 dev_err(sdev->dev, "Host dtrace release failed %d\n", ret);
635 static void ipc3_dtrace_suspend(struct snd_sof_dev *sdev, pm_message_t pm_state)
637 ipc3_dtrace_release(sdev, pm_state.event == SOF_DSP_PM_D0);
640 static int ipc3_dtrace_resume(struct snd_sof_dev *sdev)
642 return ipc3_dtrace_enable(sdev);
645 static void ipc3_dtrace_free(struct snd_sof_dev *sdev)
647 struct sof_dtrace_priv *priv = sdev->fw_trace_data;
650 ipc3_dtrace_release(sdev, false);