Lines Matching refs:core

29 static void venus_coredump(struct venus_core *core)  in venus_coredump()  argument
37 dev = core->dev; in venus_coredump()
38 mem_phys = core->fw.mem_phys; in venus_coredump()
39 mem_size = core->fw.mem_size; in venus_coredump()
56 static void venus_event_notify(struct venus_core *core, u32 event) in venus_event_notify() argument
68 mutex_lock(&core->lock); in venus_event_notify()
69 set_bit(0, &core->sys_error); in venus_event_notify()
70 list_for_each_entry(inst, &core->instances, list) in venus_event_notify()
72 mutex_unlock(&core->lock); in venus_event_notify()
74 disable_irq_nosync(core->irq); in venus_event_notify()
75 schedule_delayed_work(&core->work, msecs_to_jiffies(10)); in venus_event_notify()
86 struct venus_core *core = in venus_sys_error_handler() local
92 ret = pm_runtime_get_sync(core->dev); in venus_sys_error_handler()
99 core->ops->core_deinit(core); in venus_sys_error_handler()
100 core->state = CORE_UNINIT; in venus_sys_error_handler()
103 if (!pm_runtime_active(core->dev_dec) && !pm_runtime_active(core->dev_enc)) in venus_sys_error_handler()
108 mutex_lock(&core->lock); in venus_sys_error_handler()
110 venus_shutdown(core); in venus_sys_error_handler()
112 venus_coredump(core); in venus_sys_error_handler()
114 pm_runtime_put_sync(core->dev); in venus_sys_error_handler()
117 if (!core->pmdomains[0] || !pm_runtime_active(core->pmdomains[0])) in venus_sys_error_handler()
122 hfi_reinit(core); in venus_sys_error_handler()
124 ret = pm_runtime_get_sync(core->dev); in venus_sys_error_handler()
130 ret = venus_boot(core); in venus_sys_error_handler()
136 ret = hfi_core_resume(core, true); in venus_sys_error_handler()
142 enable_irq(core->irq); in venus_sys_error_handler()
144 mutex_unlock(&core->lock); in venus_sys_error_handler()
146 ret = hfi_core_init(core); in venus_sys_error_handler()
152 pm_runtime_put_sync(core->dev); in venus_sys_error_handler()
155 disable_irq_nosync(core->irq); in venus_sys_error_handler()
156 dev_warn_ratelimited(core->dev, in venus_sys_error_handler()
159 schedule_delayed_work(&core->work, msecs_to_jiffies(10)); in venus_sys_error_handler()
163 dev_warn(core->dev, "system error has occurred (recovered)\n"); in venus_sys_error_handler()
165 mutex_lock(&core->lock); in venus_sys_error_handler()
166 clear_bit(0, &core->sys_error); in venus_sys_error_handler()
167 wake_up_all(&core->sys_err_done); in venus_sys_error_handler()
168 mutex_unlock(&core->lock); in venus_sys_error_handler()
198 static int venus_enumerate_codecs(struct venus_core *core, u32 type) in venus_enumerate_codecs() argument
206 if (core->res->hfi_version != HFI_VERSION_1XX) in venus_enumerate_codecs()
214 inst->core = core; in venus_enumerate_codecs()
217 codecs = core->dec_codecs; in venus_enumerate_codecs()
219 codecs = core->enc_codecs; in venus_enumerate_codecs()
248 static void venus_assign_register_offsets(struct venus_core *core) in venus_assign_register_offsets() argument
250 if (IS_IRIS2(core) || IS_IRIS2_1(core)) { in venus_assign_register_offsets()
251 core->vbif_base = core->base + VBIF_BASE; in venus_assign_register_offsets()
252 core->cpu_base = core->base + CPU_BASE_V6; in venus_assign_register_offsets()
253 core->cpu_cs_base = core->base + CPU_CS_BASE_V6; in venus_assign_register_offsets()
254 core->cpu_ic_base = core->base + CPU_IC_BASE_V6; in venus_assign_register_offsets()
255 core->wrapper_base = core->base + WRAPPER_BASE_V6; in venus_assign_register_offsets()
256 core->wrapper_tz_base = core->base + WRAPPER_TZ_BASE_V6; in venus_assign_register_offsets()
257 core->aon_base = core->base + AON_BASE_V6; in venus_assign_register_offsets()
259 core->vbif_base = core->base + VBIF_BASE; in venus_assign_register_offsets()
260 core->cpu_base = core->base + CPU_BASE; in venus_assign_register_offsets()
261 core->cpu_cs_base = core->base + CPU_CS_BASE; in venus_assign_register_offsets()
262 core->cpu_ic_base = core->base + CPU_IC_BASE; in venus_assign_register_offsets()
263 core->wrapper_base = core->base + WRAPPER_BASE; in venus_assign_register_offsets()
264 core->wrapper_tz_base = NULL; in venus_assign_register_offsets()
265 core->aon_base = NULL; in venus_assign_register_offsets()
271 struct venus_core *core = dev_id; in venus_isr_thread() local
277 hfi_core_trigger_ssr(core, HFI_TEST_SSR_SW_ERR_FATAL); in venus_isr_thread()
285 struct venus_core *core; in venus_probe() local
288 core = devm_kzalloc(dev, sizeof(*core), GFP_KERNEL); in venus_probe()
289 if (!core) in venus_probe()
292 core->dev = dev; in venus_probe()
294 core->base = devm_platform_ioremap_resource(pdev, 0); in venus_probe()
295 if (IS_ERR(core->base)) in venus_probe()
296 return PTR_ERR(core->base); in venus_probe()
298 core->video_path = devm_of_icc_get(dev, "video-mem"); in venus_probe()
299 if (IS_ERR(core->video_path)) in venus_probe()
300 return PTR_ERR(core->video_path); in venus_probe()
302 core->cpucfg_path = devm_of_icc_get(dev, "cpu-cfg"); in venus_probe()
303 if (IS_ERR(core->cpucfg_path)) in venus_probe()
304 return PTR_ERR(core->cpucfg_path); in venus_probe()
306 core->irq = platform_get_irq(pdev, 0); in venus_probe()
307 if (core->irq < 0) in venus_probe()
308 return core->irq; in venus_probe()
310 core->res = of_device_get_match_data(dev); in venus_probe()
311 if (!core->res) in venus_probe()
314 mutex_init(&core->pm_lock); in venus_probe()
316 core->pm_ops = venus_pm_get(core->res->hfi_version); in venus_probe()
317 if (!core->pm_ops) in venus_probe()
320 if (core->pm_ops->core_get) { in venus_probe()
321 ret = core->pm_ops->core_get(core); in venus_probe()
326 ret = dma_set_mask_and_coherent(dev, core->res->dma_mask); in venus_probe()
332 INIT_LIST_HEAD(&core->instances); in venus_probe()
333 mutex_init(&core->lock); in venus_probe()
334 INIT_DELAYED_WORK(&core->work, venus_sys_error_handler); in venus_probe()
335 init_waitqueue_head(&core->sys_err_done); in venus_probe()
337 ret = devm_request_threaded_irq(dev, core->irq, hfi_isr, venus_isr_thread, in venus_probe()
339 "venus", core); in venus_probe()
343 ret = hfi_create(core, &venus_core_ops); in venus_probe()
347 venus_assign_register_offsets(core); in venus_probe()
349 ret = v4l2_device_register(dev, &core->v4l2_dev); in venus_probe()
353 platform_set_drvdata(pdev, core); in venus_probe()
365 ret = venus_firmware_init(core); in venus_probe()
369 ret = venus_boot(core); in venus_probe()
373 ret = hfi_core_resume(core, true); in venus_probe()
377 ret = hfi_core_init(core); in venus_probe()
381 ret = venus_enumerate_codecs(core, VIDC_SESSION_TYPE_DEC); in venus_probe()
385 ret = venus_enumerate_codecs(core, VIDC_SESSION_TYPE_ENC); in venus_probe()
395 venus_dbgfs_init(core); in venus_probe()
400 v4l2_device_unregister(&core->v4l2_dev); in venus_probe()
402 venus_shutdown(core); in venus_probe()
404 venus_firmware_deinit(core); in venus_probe()
411 hfi_destroy(core); in venus_probe()
413 hfi_core_deinit(core, false); in venus_probe()
415 if (core->pm_ops->core_put) in venus_probe()
416 core->pm_ops->core_put(core); in venus_probe()
422 struct venus_core *core = platform_get_drvdata(pdev); in venus_remove() local
423 const struct venus_pm_ops *pm_ops = core->pm_ops; in venus_remove()
424 struct device *dev = core->dev; in venus_remove()
430 ret = hfi_core_deinit(core, true); in venus_remove()
433 venus_shutdown(core); in venus_remove()
436 venus_firmware_deinit(core); in venus_remove()
442 pm_ops->core_put(core); in venus_remove()
444 v4l2_device_unregister(&core->v4l2_dev); in venus_remove()
446 hfi_destroy(core); in venus_remove()
448 mutex_destroy(&core->pm_lock); in venus_remove()
449 mutex_destroy(&core->lock); in venus_remove()
450 venus_dbgfs_deinit(core); in venus_remove()
455 struct venus_core *core = platform_get_drvdata(pdev); in venus_core_shutdown() local
457 pm_runtime_get_sync(core->dev); in venus_core_shutdown()
458 venus_shutdown(core); in venus_core_shutdown()
459 venus_firmware_deinit(core); in venus_core_shutdown()
460 pm_runtime_put_sync(core->dev); in venus_core_shutdown()
465 struct venus_core *core = dev_get_drvdata(dev); in venus_runtime_suspend() local
466 const struct venus_pm_ops *pm_ops = core->pm_ops; in venus_runtime_suspend()
469 ret = hfi_core_suspend(core); in venus_runtime_suspend()
474 ret = pm_ops->core_power(core, POWER_OFF); in venus_runtime_suspend()
479 ret = icc_set_bw(core->cpucfg_path, 0, 0); in venus_runtime_suspend()
483 ret = icc_set_bw(core->video_path, 0, 0); in venus_runtime_suspend()
490 icc_set_bw(core->cpucfg_path, kbps_to_icc(1000), 0); in venus_runtime_suspend()
493 pm_ops->core_power(core, POWER_ON); in venus_runtime_suspend()
500 struct venus_core *core = dev_get_drvdata(dev); in venus_runtime_resume() local
501 const struct venus_pm_ops *pm_ops = core->pm_ops; in venus_runtime_resume()
504 ret = icc_set_bw(core->video_path, kbps_to_icc(20000), 0); in venus_runtime_resume()
508 ret = icc_set_bw(core->cpucfg_path, kbps_to_icc(1000), 0); in venus_runtime_resume()
513 ret = pm_ops->core_power(core, POWER_ON); in venus_runtime_resume()
518 return hfi_core_resume(core, false); in venus_runtime_resume()