Lines Matching refs:sdev

16 static size_t sof_trace_avail(struct snd_sof_dev *sdev,  in sof_trace_avail()  argument
19 loff_t host_offset = READ_ONCE(sdev->host_offset); in sof_trace_avail()
36 static size_t sof_wait_trace_avail(struct snd_sof_dev *sdev, in sof_wait_trace_avail() argument
40 size_t ret = sof_trace_avail(sdev, pos, buffer_size); in sof_wait_trace_avail()
46 if (!sdev->dtrace_is_enabled && sdev->dtrace_draining) { in sof_wait_trace_avail()
51 sdev->dtrace_draining = false; in sof_wait_trace_avail()
58 add_wait_queue(&sdev->trace_sleep, &wait); in sof_wait_trace_avail()
64 remove_wait_queue(&sdev->trace_sleep, &wait); in sof_wait_trace_avail()
66 return sof_trace_avail(sdev, pos, buffer_size); in sof_wait_trace_avail()
73 struct snd_sof_dev *sdev = dfse->sdev; in sof_dfsentry_trace_read() local
80 sdev->dtrace_error = false; in sof_dfsentry_trace_read()
96 avail = sof_wait_trace_avail(sdev, lpos, buffer_size); in sof_dfsentry_trace_read()
97 if (sdev->dtrace_error) { in sof_dfsentry_trace_read()
98 dev_err(sdev->dev, "error: trace IO error\n"); in sof_dfsentry_trace_read()
119 struct snd_sof_dev *sdev = dfse->sdev; in sof_dfsentry_trace_release() local
122 if (!sdev->dtrace_is_enabled) in sof_dfsentry_trace_release()
123 sdev->host_offset = 0; in sof_dfsentry_trace_release()
135 static int trace_debugfs_create(struct snd_sof_dev *sdev) in trace_debugfs_create() argument
139 if (!sdev) in trace_debugfs_create()
142 dfse = devm_kzalloc(sdev->dev, sizeof(*dfse), GFP_KERNEL); in trace_debugfs_create()
147 dfse->buf = sdev->dmatb.area; in trace_debugfs_create()
148 dfse->size = sdev->dmatb.bytes; in trace_debugfs_create()
149 dfse->sdev = sdev; in trace_debugfs_create()
151 debugfs_create_file("trace", 0444, sdev->debugfs_root, dfse, in trace_debugfs_create()
157 int snd_sof_init_trace_ipc(struct snd_sof_dev *sdev) in snd_sof_init_trace_ipc() argument
159 struct sof_ipc_fw_ready *ready = &sdev->fw_ready; in snd_sof_init_trace_ipc()
165 if (!sdev->dtrace_is_supported) in snd_sof_init_trace_ipc()
168 if (sdev->dtrace_is_enabled || !sdev->dma_trace_pages) in snd_sof_init_trace_ipc()
182 params.buffer.phy_addr = sdev->dmatp.addr; in snd_sof_init_trace_ipc()
183 params.buffer.size = sdev->dmatb.bytes; in snd_sof_init_trace_ipc()
184 params.buffer.pages = sdev->dma_trace_pages; in snd_sof_init_trace_ipc()
187 sdev->host_offset = 0; in snd_sof_init_trace_ipc()
188 sdev->dtrace_draining = false; in snd_sof_init_trace_ipc()
190 ret = snd_sof_dma_trace_init(sdev, &params.stream_tag); in snd_sof_init_trace_ipc()
192 dev_err(sdev->dev, in snd_sof_init_trace_ipc()
196 dev_dbg(sdev->dev, "stream_tag: %d\n", params.stream_tag); in snd_sof_init_trace_ipc()
199 ret = sof_ipc_tx_message(sdev->ipc, in snd_sof_init_trace_ipc()
203 dev_err(sdev->dev, in snd_sof_init_trace_ipc()
208 ret = snd_sof_dma_trace_trigger(sdev, SNDRV_PCM_TRIGGER_START); in snd_sof_init_trace_ipc()
210 dev_err(sdev->dev, in snd_sof_init_trace_ipc()
215 sdev->dtrace_is_enabled = true; in snd_sof_init_trace_ipc()
220 snd_sof_dma_trace_release(sdev); in snd_sof_init_trace_ipc()
224 int snd_sof_init_trace(struct snd_sof_dev *sdev) in snd_sof_init_trace() argument
228 if (!sdev->dtrace_is_supported) in snd_sof_init_trace()
232 sdev->dtrace_is_enabled = false; in snd_sof_init_trace()
235 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, sdev->dev, in snd_sof_init_trace()
236 PAGE_SIZE, &sdev->dmatp); in snd_sof_init_trace()
238 dev_err(sdev->dev, in snd_sof_init_trace()
244 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV_SG, sdev->dev, in snd_sof_init_trace()
245 DMA_BUF_SIZE_FOR_TRACE, &sdev->dmatb); in snd_sof_init_trace()
247 dev_err(sdev->dev, in snd_sof_init_trace()
253 ret = snd_sof_create_page_table(sdev->dev, &sdev->dmatb, in snd_sof_init_trace()
254 sdev->dmatp.area, sdev->dmatb.bytes); in snd_sof_init_trace()
258 sdev->dma_trace_pages = ret; in snd_sof_init_trace()
259 dev_dbg(sdev->dev, "dma_trace_pages: %d\n", sdev->dma_trace_pages); in snd_sof_init_trace()
261 if (sdev->first_boot) { in snd_sof_init_trace()
262 ret = trace_debugfs_create(sdev); in snd_sof_init_trace()
267 init_waitqueue_head(&sdev->trace_sleep); in snd_sof_init_trace()
269 ret = snd_sof_init_trace_ipc(sdev); in snd_sof_init_trace()
275 sdev->dma_trace_pages = 0; in snd_sof_init_trace()
276 snd_dma_free_pages(&sdev->dmatb); in snd_sof_init_trace()
278 snd_dma_free_pages(&sdev->dmatp); in snd_sof_init_trace()
283 int snd_sof_trace_update_pos(struct snd_sof_dev *sdev, in snd_sof_trace_update_pos() argument
286 if (!sdev->dtrace_is_supported) in snd_sof_trace_update_pos()
289 if (sdev->dtrace_is_enabled && sdev->host_offset != posn->host_offset) { in snd_sof_trace_update_pos()
290 sdev->host_offset = posn->host_offset; in snd_sof_trace_update_pos()
291 wake_up(&sdev->trace_sleep); in snd_sof_trace_update_pos()
295 dev_err(sdev->dev, in snd_sof_trace_update_pos()
303 void snd_sof_trace_notify_for_error(struct snd_sof_dev *sdev) in snd_sof_trace_notify_for_error() argument
305 if (!sdev->dtrace_is_supported) in snd_sof_trace_notify_for_error()
308 if (sdev->dtrace_is_enabled) { in snd_sof_trace_notify_for_error()
309 dev_err(sdev->dev, "error: waking up any trace sleepers\n"); in snd_sof_trace_notify_for_error()
310 sdev->dtrace_error = true; in snd_sof_trace_notify_for_error()
311 wake_up(&sdev->trace_sleep); in snd_sof_trace_notify_for_error()
316 void snd_sof_release_trace(struct snd_sof_dev *sdev) in snd_sof_release_trace() argument
320 if (!sdev->dtrace_is_supported || !sdev->dtrace_is_enabled) in snd_sof_release_trace()
323 ret = snd_sof_dma_trace_trigger(sdev, SNDRV_PCM_TRIGGER_STOP); in snd_sof_release_trace()
325 dev_err(sdev->dev, in snd_sof_release_trace()
328 ret = snd_sof_dma_trace_release(sdev); in snd_sof_release_trace()
330 dev_err(sdev->dev, in snd_sof_release_trace()
333 sdev->dtrace_is_enabled = false; in snd_sof_release_trace()
334 sdev->dtrace_draining = true; in snd_sof_release_trace()
335 wake_up(&sdev->trace_sleep); in snd_sof_release_trace()
339 void snd_sof_free_trace(struct snd_sof_dev *sdev) in snd_sof_free_trace() argument
341 if (!sdev->dtrace_is_supported) in snd_sof_free_trace()
344 snd_sof_release_trace(sdev); in snd_sof_free_trace()
346 if (sdev->dma_trace_pages) { in snd_sof_free_trace()
347 snd_dma_free_pages(&sdev->dmatb); in snd_sof_free_trace()
348 snd_dma_free_pages(&sdev->dmatp); in snd_sof_free_trace()
349 sdev->dma_trace_pages = 0; in snd_sof_free_trace()