Lines Matching refs:pvr_dev
52 pvr_device_reg_init(struct pvr_device *pvr_dev) in pvr_device_reg_init() argument
54 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_device_reg_init()
59 pvr_dev->regs_resource = NULL; in pvr_device_reg_init()
60 pvr_dev->regs = NULL; in pvr_device_reg_init()
67 pvr_dev->regs = regs; in pvr_device_reg_init()
68 pvr_dev->regs_resource = regs_resource; in pvr_device_reg_init()
94 static int pvr_device_clk_init(struct pvr_device *pvr_dev) in pvr_device_clk_init() argument
96 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_device_clk_init()
116 pvr_dev->core_clk = core_clk; in pvr_device_clk_init()
117 pvr_dev->sys_clk = sys_clk; in pvr_device_clk_init()
118 pvr_dev->mem_clk = mem_clk; in pvr_device_clk_init()
130 static void pvr_device_process_active_queues(struct pvr_device *pvr_dev) in pvr_device_process_active_queues() argument
135 mutex_lock(&pvr_dev->queues.lock); in pvr_device_process_active_queues()
141 list_splice_init(&pvr_dev->queues.active, &active_queues); in pvr_device_process_active_queues()
146 mutex_unlock(&pvr_dev->queues.lock); in pvr_device_process_active_queues()
151 struct pvr_device *pvr_dev = data; in pvr_device_irq_thread_handler() local
158 while (pvr_fw_irq_pending(pvr_dev)) { in pvr_device_irq_thread_handler()
159 pvr_fw_irq_clear(pvr_dev); in pvr_device_irq_thread_handler()
161 if (pvr_dev->fw_dev.booted) { in pvr_device_irq_thread_handler()
162 pvr_fwccb_process(pvr_dev); in pvr_device_irq_thread_handler()
163 pvr_kccb_wake_up_waiters(pvr_dev); in pvr_device_irq_thread_handler()
164 pvr_device_process_active_queues(pvr_dev); in pvr_device_irq_thread_handler()
167 pm_runtime_mark_last_busy(from_pvr_device(pvr_dev)->dev); in pvr_device_irq_thread_handler()
173 pvr_fw_irq_enable(pvr_dev); in pvr_device_irq_thread_handler()
179 struct pvr_device *pvr_dev = data; in pvr_device_irq_handler() local
181 if (!pvr_fw_irq_pending(pvr_dev)) in pvr_device_irq_handler()
187 pvr_fw_irq_disable(pvr_dev); in pvr_device_irq_handler()
201 pvr_device_irq_init(struct pvr_device *pvr_dev) in pvr_device_irq_init() argument
203 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_device_irq_init()
206 init_waitqueue_head(&pvr_dev->kccb.rtn_q); in pvr_device_irq_init()
208 pvr_dev->irq = platform_get_irq(plat_dev, 0); in pvr_device_irq_init()
209 if (pvr_dev->irq < 0) in pvr_device_irq_init()
210 return pvr_dev->irq; in pvr_device_irq_init()
213 pvr_fw_irq_clear(pvr_dev); in pvr_device_irq_init()
214 pvr_fw_irq_enable(pvr_dev); in pvr_device_irq_init()
216 return request_threaded_irq(pvr_dev->irq, pvr_device_irq_handler, in pvr_device_irq_init()
218 IRQF_SHARED, "gpu", pvr_dev); in pvr_device_irq_init()
226 pvr_device_irq_fini(struct pvr_device *pvr_dev) in pvr_device_irq_fini() argument
228 free_irq(pvr_dev->irq, pvr_dev); in pvr_device_irq_fini()
251 pvr_build_firmware_filename(struct pvr_device *pvr_dev, const char *base, in pvr_build_firmware_filename() argument
254 struct pvr_gpu_id *gpu_id = &pvr_dev->gpu_id; in pvr_build_firmware_filename()
263 struct pvr_device *pvr_dev = data; in pvr_release_firmware() local
265 release_firmware(pvr_dev->fw_dev.firmware); in pvr_release_firmware()
280 pvr_request_firmware(struct pvr_device *pvr_dev) in pvr_request_firmware() argument
282 struct drm_device *drm_dev = &pvr_dev->base; in pvr_request_firmware()
287 filename = pvr_build_firmware_filename(pvr_dev, "powervr/rogue", in pvr_request_firmware()
296 err = request_firmware(&fw, filename, pvr_dev->base.dev); in pvr_request_firmware()
306 pvr_dev->fw_dev.firmware = fw; in pvr_request_firmware()
308 return devm_add_action_or_reset(drm_dev->dev, pvr_release_firmware, pvr_dev); in pvr_request_firmware()
324 pvr_load_gpu_id(struct pvr_device *pvr_dev) in pvr_load_gpu_id() argument
326 struct pvr_gpu_id *gpu_id = &pvr_dev->gpu_id; in pvr_load_gpu_id()
333 bvnc = pvr_cr_read64(pvr_dev, ROGUE_CR_CORE_ID__PBVNC); in pvr_load_gpu_id()
341 u32 core_rev = pvr_cr_read32(pvr_dev, ROGUE_CR_CORE_REVISION); in pvr_load_gpu_id()
342 u32 core_id = pvr_cr_read32(pvr_dev, ROGUE_CR_CORE_ID); in pvr_load_gpu_id()
365 pvr_set_dma_info(struct pvr_device *pvr_dev) in pvr_set_dma_info() argument
367 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_set_dma_info()
371 err = PVR_FEATURE_VALUE(pvr_dev, phys_bus_width, &phys_bus_width); in pvr_set_dma_info()
408 pvr_device_gpu_init(struct pvr_device *pvr_dev) in pvr_device_gpu_init() argument
412 pvr_load_gpu_id(pvr_dev); in pvr_device_gpu_init()
414 err = pvr_request_firmware(pvr_dev); in pvr_device_gpu_init()
418 err = pvr_fw_validate_init_device_info(pvr_dev); in pvr_device_gpu_init()
422 if (PVR_HAS_FEATURE(pvr_dev, meta)) in pvr_device_gpu_init()
423 pvr_dev->fw_dev.processor_type = PVR_FW_PROCESSOR_TYPE_META; in pvr_device_gpu_init()
424 else if (PVR_HAS_FEATURE(pvr_dev, mips)) in pvr_device_gpu_init()
425 pvr_dev->fw_dev.processor_type = PVR_FW_PROCESSOR_TYPE_MIPS; in pvr_device_gpu_init()
426 else if (PVR_HAS_FEATURE(pvr_dev, riscv_fw_processor)) in pvr_device_gpu_init()
427 pvr_dev->fw_dev.processor_type = PVR_FW_PROCESSOR_TYPE_RISCV; in pvr_device_gpu_init()
431 pvr_stream_create_musthave_masks(pvr_dev); in pvr_device_gpu_init()
433 err = pvr_set_dma_info(pvr_dev); in pvr_device_gpu_init()
437 if (pvr_dev->fw_dev.processor_type != PVR_FW_PROCESSOR_TYPE_MIPS) { in pvr_device_gpu_init()
438 pvr_dev->kernel_vm_ctx = pvr_vm_create_context(pvr_dev, false); in pvr_device_gpu_init()
439 if (IS_ERR(pvr_dev->kernel_vm_ctx)) in pvr_device_gpu_init()
440 return PTR_ERR(pvr_dev->kernel_vm_ctx); in pvr_device_gpu_init()
443 err = pvr_fw_init(pvr_dev); in pvr_device_gpu_init()
450 if (pvr_dev->fw_dev.processor_type != PVR_FW_PROCESSOR_TYPE_MIPS) { in pvr_device_gpu_init()
451 pvr_vm_context_put(pvr_dev->kernel_vm_ctx); in pvr_device_gpu_init()
452 pvr_dev->kernel_vm_ctx = NULL; in pvr_device_gpu_init()
463 pvr_device_gpu_fini(struct pvr_device *pvr_dev) in pvr_device_gpu_fini() argument
465 pvr_fw_fini(pvr_dev); in pvr_device_gpu_fini()
467 if (pvr_dev->fw_dev.processor_type != PVR_FW_PROCESSOR_TYPE_MIPS) { in pvr_device_gpu_fini()
468 WARN_ON(!pvr_vm_context_put(pvr_dev->kernel_vm_ctx)); in pvr_device_gpu_fini()
469 pvr_dev->kernel_vm_ctx = NULL; in pvr_device_gpu_fini()
493 pvr_device_init(struct pvr_device *pvr_dev) in pvr_device_init() argument
495 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_device_init()
503 err = pvr_device_params_init(&pvr_dev->params); in pvr_device_init()
508 err = pvr_device_clk_init(pvr_dev); in pvr_device_init()
518 err = pvr_device_reg_init(pvr_dev); in pvr_device_init()
523 err = pvr_device_gpu_init(pvr_dev); in pvr_device_init()
527 err = pvr_device_irq_init(pvr_dev); in pvr_device_init()
536 pvr_device_gpu_fini(pvr_dev); in pvr_device_init()
549 pvr_device_fini(struct pvr_device *pvr_dev) in pvr_device_fini() argument
555 pvr_device_irq_fini(pvr_dev); in pvr_device_fini()
556 pvr_device_gpu_fini(pvr_dev); in pvr_device_fini()
560 pvr_device_has_uapi_quirk(struct pvr_device *pvr_dev, u32 quirk) in pvr_device_has_uapi_quirk() argument
564 return PVR_HAS_QUIRK(pvr_dev, 47217); in pvr_device_has_uapi_quirk()
566 return PVR_HAS_QUIRK(pvr_dev, 48545); in pvr_device_has_uapi_quirk()
568 return PVR_HAS_QUIRK(pvr_dev, 49927); in pvr_device_has_uapi_quirk()
570 return PVR_HAS_QUIRK(pvr_dev, 51764); in pvr_device_has_uapi_quirk()
572 return PVR_HAS_QUIRK(pvr_dev, 62269); in pvr_device_has_uapi_quirk()
579 pvr_device_has_uapi_enhancement(struct pvr_device *pvr_dev, u32 enhancement) in pvr_device_has_uapi_enhancement() argument
583 return PVR_HAS_ENHANCEMENT(pvr_dev, 35421); in pvr_device_has_uapi_enhancement()
585 return PVR_HAS_ENHANCEMENT(pvr_dev, 42064); in pvr_device_has_uapi_enhancement()
601 pvr_device_has_feature(struct pvr_device *pvr_dev, u32 feature) in pvr_device_has_feature() argument
605 return PVR_HAS_FEATURE(pvr_dev, cluster_grouping); in pvr_device_has_feature()
608 return PVR_HAS_FEATURE(pvr_dev, compute_morton_capable); in pvr_device_has_feature()
611 return PVR_HAS_FEATURE(pvr_dev, fb_cdc_v4); in pvr_device_has_feature()
614 return PVR_HAS_FEATURE(pvr_dev, gpu_multicore_support); in pvr_device_has_feature()
617 return PVR_HAS_FEATURE(pvr_dev, isp_zls_d24_s8_packing_ogl_mode); in pvr_device_has_feature()
620 return PVR_HAS_FEATURE(pvr_dev, s7_top_infrastructure); in pvr_device_has_feature()
623 return PVR_HAS_FEATURE(pvr_dev, tessellation); in pvr_device_has_feature()
626 return PVR_HAS_FEATURE(pvr_dev, tpu_dm_global_registers); in pvr_device_has_feature()
629 return PVR_HAS_FEATURE(pvr_dev, vdm_drawindirect); in pvr_device_has_feature()
632 return PVR_HAS_FEATURE(pvr_dev, vdm_object_level_lls); in pvr_device_has_feature()
635 return PVR_HAS_FEATURE(pvr_dev, zls_subtile); in pvr_device_has_feature()
641 PVR_FEATURE_VALUE(pvr_dev, cdm_control_stream_format, &cdm_control_stream_format); in pvr_device_has_feature()
646 if (PVR_HAS_FEATURE(pvr_dev, fbcdc_algorithm)) { in pvr_device_has_feature()
649 PVR_FEATURE_VALUE(pvr_dev, fbcdc_algorithm, &fbcdc_algorithm); in pvr_device_has_feature()
650 return (fbcdc_algorithm < 3 || PVR_HAS_FEATURE(pvr_dev, fb_cdc_v4)); in pvr_device_has_feature()