• Home
  • Raw
  • Download

Lines Matching refs:ctx

194 	struct intel_sst_drv *ctx = container_of(work,  in sst_process_pending_msg()  local
197 ctx->ops->post_message(ctx, NULL, false); in sst_process_pending_msg()
200 static int sst_workqueue_init(struct intel_sst_drv *ctx) in sst_workqueue_init() argument
202 INIT_LIST_HEAD(&ctx->memcpy_list); in sst_workqueue_init()
203 INIT_LIST_HEAD(&ctx->rx_list); in sst_workqueue_init()
204 INIT_LIST_HEAD(&ctx->ipc_dispatch_list); in sst_workqueue_init()
205 INIT_LIST_HEAD(&ctx->block_list); in sst_workqueue_init()
206 INIT_WORK(&ctx->ipc_post_msg_wq, sst_process_pending_msg); in sst_workqueue_init()
207 init_waitqueue_head(&ctx->wait_queue); in sst_workqueue_init()
209 ctx->post_msg_wq = in sst_workqueue_init()
211 if (!ctx->post_msg_wq) in sst_workqueue_init()
216 static void sst_init_locks(struct intel_sst_drv *ctx) in sst_init_locks() argument
218 mutex_init(&ctx->sst_lock); in sst_init_locks()
219 spin_lock_init(&ctx->rx_msg_lock); in sst_init_locks()
220 spin_lock_init(&ctx->ipc_spin_lock); in sst_init_locks()
221 spin_lock_init(&ctx->block_lock); in sst_init_locks()
224 int sst_alloc_drv_context(struct intel_sst_drv **ctx, in sst_alloc_drv_context() argument
227 *ctx = devm_kzalloc(dev, sizeof(struct intel_sst_drv), GFP_KERNEL); in sst_alloc_drv_context()
228 if (!(*ctx)) in sst_alloc_drv_context()
231 (*ctx)->dev = dev; in sst_alloc_drv_context()
232 (*ctx)->dev_id = dev_id; in sst_alloc_drv_context()
241 struct intel_sst_drv *ctx = dev_get_drvdata(dev); in firmware_version_show() local
243 if (ctx->fw_version.type == 0 && ctx->fw_version.major == 0 && in firmware_version_show()
244 ctx->fw_version.minor == 0 && ctx->fw_version.build == 0) in firmware_version_show()
248 ctx->fw_version.type, ctx->fw_version.major, in firmware_version_show()
249 ctx->fw_version.minor, ctx->fw_version.build); in firmware_version_show()
264 int sst_context_init(struct intel_sst_drv *ctx) in sst_context_init() argument
268 if (!ctx->pdata) in sst_context_init()
271 if (!ctx->pdata->probe_data) in sst_context_init()
274 memcpy(&ctx->info, ctx->pdata->probe_data, sizeof(ctx->info)); in sst_context_init()
276 ret = sst_driver_ops(ctx); in sst_context_init()
280 sst_init_locks(ctx); in sst_context_init()
281 sst_set_fw_state_locked(ctx, SST_RESET); in sst_context_init()
284 ctx->pvt_id = 1; in sst_context_init()
285 ctx->stream_cnt = 0; in sst_context_init()
286 ctx->fw_in_mem = NULL; in sst_context_init()
288 ctx->use_dma = 0; in sst_context_init()
289 ctx->use_lli = 0; in sst_context_init()
291 if (sst_workqueue_init(ctx)) in sst_context_init()
294 ctx->mailbox_recv_offset = ctx->pdata->ipc_info->mbox_recv_off; in sst_context_init()
295 ctx->ipc_reg.ipcx = SST_IPCX + ctx->pdata->ipc_info->ipc_offset; in sst_context_init()
296 ctx->ipc_reg.ipcd = SST_IPCD + ctx->pdata->ipc_info->ipc_offset; in sst_context_init()
298 dev_info(ctx->dev, "Got drv data max stream %d\n", in sst_context_init()
299 ctx->info.max_streams); in sst_context_init()
301 for (i = 1; i <= ctx->info.max_streams; i++) { in sst_context_init()
302 struct stream_info *stream = &ctx->streams[i]; in sst_context_init()
310 ret = devm_request_threaded_irq(ctx->dev, ctx->irq_num, ctx->ops->interrupt, in sst_context_init()
311 ctx->ops->irq_thread, 0, SST_DRV_NAME, in sst_context_init()
312 ctx); in sst_context_init()
316 dev_dbg(ctx->dev, "Registered IRQ %#x\n", ctx->irq_num); in sst_context_init()
319 sst_shim_write64(ctx->shim, SST_IMRX, 0xFFFF0038); in sst_context_init()
321 ctx->qos = devm_kzalloc(ctx->dev, in sst_context_init()
323 if (!ctx->qos) { in sst_context_init()
327 cpu_latency_qos_add_request(ctx->qos, PM_QOS_DEFAULT_VALUE); in sst_context_init()
329 dev_dbg(ctx->dev, "Requesting FW %s now...\n", ctx->firmware_name); in sst_context_init()
330 ret = request_firmware_nowait(THIS_MODULE, true, ctx->firmware_name, in sst_context_init()
331 ctx->dev, GFP_KERNEL, ctx, sst_firmware_load_cb); in sst_context_init()
333 dev_err(ctx->dev, "Firmware download failed:%d\n", ret); in sst_context_init()
337 ret = sysfs_create_group(&ctx->dev->kobj, in sst_context_init()
340 dev_err(ctx->dev, in sst_context_init()
345 sst_register(ctx->dev); in sst_context_init()
348 sysfs_remove_group(&ctx->dev->kobj, &sst_fw_version_attr_group); in sst_context_init()
351 destroy_workqueue(ctx->post_msg_wq); in sst_context_init()
356 void sst_context_cleanup(struct intel_sst_drv *ctx) in sst_context_cleanup() argument
358 pm_runtime_get_noresume(ctx->dev); in sst_context_cleanup()
359 pm_runtime_disable(ctx->dev); in sst_context_cleanup()
360 sst_unregister(ctx->dev); in sst_context_cleanup()
361 sst_set_fw_state_locked(ctx, SST_SHUTDOWN); in sst_context_cleanup()
362 sysfs_remove_group(&ctx->dev->kobj, &sst_fw_version_attr_group); in sst_context_cleanup()
363 destroy_workqueue(ctx->post_msg_wq); in sst_context_cleanup()
364 cpu_latency_qos_remove_request(ctx->qos); in sst_context_cleanup()
365 kfree(ctx->fw_sg_list.src); in sst_context_cleanup()
366 kfree(ctx->fw_sg_list.dst); in sst_context_cleanup()
367 ctx->fw_sg_list.list_len = 0; in sst_context_cleanup()
368 kfree(ctx->fw_in_mem); in sst_context_cleanup()
369 ctx->fw_in_mem = NULL; in sst_context_cleanup()
370 sst_memcpy_free_resources(ctx); in sst_context_cleanup()
374 void sst_configure_runtime_pm(struct intel_sst_drv *ctx) in sst_configure_runtime_pm() argument
376 pm_runtime_set_autosuspend_delay(ctx->dev, SST_SUSPEND_DELAY); in sst_configure_runtime_pm()
377 pm_runtime_use_autosuspend(ctx->dev); in sst_configure_runtime_pm()
385 pm_runtime_set_active(ctx->dev); in sst_configure_runtime_pm()
387 pm_runtime_enable(ctx->dev); in sst_configure_runtime_pm()
390 pm_runtime_set_active(ctx->dev); in sst_configure_runtime_pm()
392 pm_runtime_put_noidle(ctx->dev); in sst_configure_runtime_pm()
399 struct intel_sst_drv *ctx = dev_get_drvdata(dev); in intel_sst_runtime_suspend() local
401 if (ctx->sst_state == SST_RESET) { in intel_sst_runtime_suspend()
406 if (ctx->ops->save_dsp_context(ctx)) in intel_sst_runtime_suspend()
410 sst_set_fw_state_locked(ctx, SST_RESET); in intel_sst_runtime_suspend()
412 synchronize_irq(ctx->irq_num); in intel_sst_runtime_suspend()
413 flush_workqueue(ctx->post_msg_wq); in intel_sst_runtime_suspend()
415 ctx->ops->reset(ctx); in intel_sst_runtime_suspend()
422 struct intel_sst_drv *ctx = dev_get_drvdata(dev); in intel_sst_suspend() local
427 if (ctx->sst_state == SST_RESET) in intel_sst_suspend()
434 for (i = 1; i <= ctx->info.max_streams; i++) { in intel_sst_suspend()
435 struct stream_info *stream = &ctx->streams[i]; in intel_sst_suspend()
442 if (ctx->pdata->streams_lost_on_suspend) { in intel_sst_suspend()
446 sst_free_stream(ctx, i); in intel_sst_suspend()
449 synchronize_irq(ctx->irq_num); in intel_sst_suspend()
450 flush_workqueue(ctx->post_msg_wq); in intel_sst_suspend()
453 sst_set_fw_state_locked(ctx, SST_RESET); in intel_sst_suspend()
456 if (ctx->ops->save_dsp_context(ctx)) in intel_sst_suspend()
463 fw_save->iram = kvzalloc(ctx->iram_end - ctx->iram_base, GFP_KERNEL); in intel_sst_suspend()
468 fw_save->dram = kvzalloc(ctx->dram_end - ctx->dram_base, GFP_KERNEL); in intel_sst_suspend()
479 fw_save->ddr = kvzalloc(ctx->ddr_end - ctx->ddr_base, GFP_KERNEL); in intel_sst_suspend()
485 memcpy32_fromio(fw_save->iram, ctx->iram, ctx->iram_end - ctx->iram_base); in intel_sst_suspend()
486 memcpy32_fromio(fw_save->dram, ctx->dram, ctx->dram_end - ctx->dram_base); in intel_sst_suspend()
487 memcpy32_fromio(fw_save->sram, ctx->mailbox, SST_MAILBOX_SIZE); in intel_sst_suspend()
488 memcpy32_fromio(fw_save->ddr, ctx->ddr, ctx->ddr_end - ctx->ddr_base); in intel_sst_suspend()
490 ctx->fw_save = fw_save; in intel_sst_suspend()
491 ctx->ops->reset(ctx); in intel_sst_suspend()
506 struct intel_sst_drv *ctx = dev_get_drvdata(dev); in intel_sst_resume() local
507 struct sst_fw_save *fw_save = ctx->fw_save; in intel_sst_resume()
514 sst_set_fw_state_locked(ctx, SST_FW_LOADING); in intel_sst_resume()
517 ctx->ops->reset(ctx); in intel_sst_resume()
519 ctx->fw_save = NULL; in intel_sst_resume()
521 memcpy32_toio(ctx->iram, fw_save->iram, ctx->iram_end - ctx->iram_base); in intel_sst_resume()
522 memcpy32_toio(ctx->dram, fw_save->dram, ctx->dram_end - ctx->dram_base); in intel_sst_resume()
523 memcpy32_toio(ctx->mailbox, fw_save->sram, SST_MAILBOX_SIZE); in intel_sst_resume()
524 memcpy32_toio(ctx->ddr, fw_save->ddr, ctx->ddr_end - ctx->ddr_base); in intel_sst_resume()
532 block = sst_create_block(ctx, 0, FW_DWNL_ID); in intel_sst_resume()
538 ctx->ops->start(ctx); in intel_sst_resume()
539 ret = sst_wait_timeout(ctx, block); in intel_sst_resume()
541 dev_err(ctx->dev, "fw download failed %d\n", ret); in intel_sst_resume()
546 sst_set_fw_state_locked(ctx, SST_FW_RUNNING); in intel_sst_resume()
549 if (ctx->pdata->streams_lost_on_suspend) { in intel_sst_resume()
550 for (i = 1; i <= ctx->info.max_streams; i++) { in intel_sst_resume()
551 struct stream_info *stream = &ctx->streams[i]; in intel_sst_resume()
554 dev_dbg(ctx->dev, "Re-allocing stream %d status %d prev %d\n", in intel_sst_resume()
557 sst_realloc_stream(ctx, i); in intel_sst_resume()
564 sst_free_block(ctx, block); in intel_sst_resume()