Lines Matching refs:pvr_dev

49 pvr_fw_find_layout_entry(struct pvr_device *pvr_dev, enum pvr_fw_section_id id)  in pvr_fw_find_layout_entry()  argument
51 const struct pvr_fw_layout_entry *layout_entries = pvr_dev->fw_dev.layout_entries; in pvr_fw_find_layout_entry()
52 u32 num_layout_entries = pvr_dev->fw_dev.header->layout_entry_num; in pvr_fw_find_layout_entry()
63 pvr_fw_find_private_data(struct pvr_device *pvr_dev) in pvr_fw_find_private_data() argument
65 const struct pvr_fw_layout_entry *layout_entries = pvr_dev->fw_dev.layout_entries; in pvr_fw_find_private_data()
66 u32 num_layout_entries = pvr_dev->fw_dev.header->layout_entry_num; in pvr_fw_find_private_data()
89 pvr_fw_validate(struct pvr_device *pvr_dev) in pvr_fw_validate() argument
91 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_fw_validate()
92 const struct firmware *firmware = pvr_dev->fw_dev.firmware; in pvr_fw_validate()
127 if (pvr_gpu_id_to_packed_bvnc(&pvr_dev->gpu_id) != header->bvnc) { in pvr_fw_validate()
133 pvr_dev->gpu_id.b, pvr_dev->gpu_id.v, pvr_dev->gpu_id.n, pvr_dev->gpu_id.c); in pvr_fw_validate()
157 pvr_dev->fw_version.major = header->fw_version_major; in pvr_fw_validate()
158 pvr_dev->fw_version.minor = header->fw_version_minor; in pvr_fw_validate()
160 pvr_dev->fw_dev.header = header; in pvr_fw_validate()
161 pvr_dev->fw_dev.layout_entries = layout_entries; in pvr_fw_validate()
167 pvr_fw_get_device_info(struct pvr_device *pvr_dev) in pvr_fw_get_device_info() argument
169 const struct firmware *firmware = pvr_dev->fw_dev.firmware; in pvr_fw_get_device_info()
175 fw_offset = (firmware->size - SZ_4K) - pvr_dev->fw_dev.header->device_info_size; in pvr_fw_get_device_info()
180 pvr_device_info_set_quirks(pvr_dev, dev_info, header->brn_mask_size); in pvr_fw_get_device_info()
183 pvr_device_info_set_enhancements(pvr_dev, dev_info, header->ern_mask_size); in pvr_fw_get_device_info()
186 return pvr_device_info_set_features(pvr_dev, dev_info, header->feature_mask_size, in pvr_fw_get_device_info()
191 layout_get_sizes(struct pvr_device *pvr_dev) in layout_get_sizes() argument
193 const struct pvr_fw_layout_entry *layout_entries = pvr_dev->fw_dev.layout_entries; in layout_get_sizes()
194 u32 num_layout_entries = pvr_dev->fw_dev.header->layout_entry_num; in layout_get_sizes()
195 struct pvr_fw_mem *fw_mem = &pvr_dev->fw_dev.mem; in layout_get_sizes()
226 pvr_fw_find_mmu_segment(struct pvr_device *pvr_dev, u32 addr, u32 size, void *fw_code_ptr, in pvr_fw_find_mmu_segment() argument
230 const struct pvr_fw_layout_entry *layout_entries = pvr_dev->fw_dev.layout_entries; in pvr_fw_find_mmu_segment()
231 u32 num_layout_entries = pvr_dev->fw_dev.header->layout_entry_num; in pvr_fw_find_mmu_segment()
281 pvr_fw_create_fwif_connection_ctl(struct pvr_device *pvr_dev) in pvr_fw_create_fwif_connection_ctl() argument
283 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_fw_create_fwif_connection_ctl()
284 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_create_fwif_connection_ctl()
287 pvr_fw_object_create_and_map_offset(pvr_dev, in pvr_fw_create_fwif_connection_ctl()
304 pvr_fw_fini_fwif_connection_ctl(struct pvr_device *pvr_dev) in pvr_fw_fini_fwif_connection_ctl() argument
306 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_fini_fwif_connection_ctl()
315 struct pvr_device *pvr_dev = priv; in fw_osinit_init() local
316 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in fw_osinit_init()
319 fwif_osinit->kernel_ccbctl_fw_addr = pvr_dev->kccb.ccb.ctrl_fw_addr; in fw_osinit_init()
320 fwif_osinit->kernel_ccb_fw_addr = pvr_dev->kccb.ccb.ccb_fw_addr; in fw_osinit_init()
321 pvr_fw_object_get_fw_addr(pvr_dev->kccb.rtn_obj, in fw_osinit_init()
324 fwif_osinit->firmware_ccbctl_fw_addr = pvr_dev->fwccb.ctrl_fw_addr; in fw_osinit_init()
325 fwif_osinit->firmware_ccb_fw_addr = pvr_dev->fwccb.ccb_fw_addr; in fw_osinit_init()
344 struct pvr_device *pvr_dev = priv; in fw_osdata_init() local
345 struct pvr_fw_mem *fw_mem = &pvr_dev->fw_dev.mem; in fw_osdata_init()
363 struct pvr_device *pvr_dev = priv; in fw_sysinit_init() local
364 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in fw_sysinit_init()
367 u32 clock_speed_hz = clk_get_rate(pvr_dev->core_clk); in fw_sysinit_init()
414 struct pvr_device *pvr_dev = priv; in fw_sysdata_init() local
418 WARN_ON(PVR_FEATURE_VALUE(pvr_dev, slc_size_in_kilobytes, &slc_size_in_kilobytes)); in fw_sysdata_init()
430 struct pvr_device *pvr_dev = priv; in fw_runtime_cfg_init() local
431 u32 clock_speed_hz = clk_get_rate(pvr_dev->core_clk); in fw_runtime_cfg_init()
438 WARN_ON(PVR_FEATURE_VALUE(pvr_dev, num_clusters, in fw_runtime_cfg_init()
454 pvr_fw_create_structures(struct pvr_device *pvr_dev) in pvr_fw_create_structures() argument
456 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_fw_create_structures()
457 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_create_structures()
461 fw_dev->power_sync = pvr_fw_object_create_and_map(pvr_dev, sizeof(*fw_dev->power_sync), in pvr_fw_create_structures()
469 fw_dev->hwrinfobuf = pvr_fw_object_create_and_map(pvr_dev, sizeof(*fw_dev->hwrinfobuf), in pvr_fw_create_structures()
479 err = pvr_fw_object_create(pvr_dev, PVR_SYNC_OBJ_SIZE, in pvr_fw_create_structures()
488 fw_dev->fwif_sysdata = pvr_fw_object_create_and_map(pvr_dev, in pvr_fw_create_structures()
491 fw_sysdata_init, pvr_dev, in pvr_fw_create_structures()
499 err = pvr_fw_object_create(pvr_dev, PVR_ROGUE_FAULT_PAGE_SIZE, in pvr_fw_create_structures()
507 err = pvr_fw_object_create(pvr_dev, sizeof(struct rogue_fwif_gpu_util_fwcb), in pvr_fw_create_structures()
509 fw_gpu_util_fwcb_init, pvr_dev, &fw_mem->gpu_util_fwcb_obj); in pvr_fw_create_structures()
515 err = pvr_fw_object_create(pvr_dev, sizeof(struct rogue_fwif_runtime_cfg), in pvr_fw_create_structures()
517 fw_runtime_cfg_init, pvr_dev, &fw_mem->runtime_cfg_obj); in pvr_fw_create_structures()
523 err = pvr_fw_trace_init(pvr_dev); in pvr_fw_create_structures()
527 fw_dev->fwif_osdata = pvr_fw_object_create_and_map(pvr_dev, in pvr_fw_create_structures()
530 fw_osdata_init, pvr_dev, in pvr_fw_create_structures()
539 pvr_fw_object_create_and_map_offset(pvr_dev, in pvr_fw_create_structures()
544 fw_osinit_init, pvr_dev, &fw_mem->osinit_obj); in pvr_fw_create_structures()
552 pvr_fw_object_create_and_map_offset(pvr_dev, in pvr_fw_create_structures()
557 fw_sysinit_init, pvr_dev, &fw_mem->sysinit_obj); in pvr_fw_create_structures()
573 pvr_fw_trace_fini(pvr_dev); in pvr_fw_create_structures()
600 pvr_fw_destroy_structures(struct pvr_device *pvr_dev) in pvr_fw_destroy_structures() argument
602 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_destroy_structures()
605 pvr_fw_trace_fini(pvr_dev); in pvr_fw_destroy_structures()
630 pvr_fw_process(struct pvr_device *pvr_dev) in pvr_fw_process() argument
632 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_fw_process()
633 struct pvr_fw_mem *fw_mem = &pvr_dev->fw_dev.mem; in pvr_fw_process()
634 const u8 *fw = pvr_dev->fw_dev.firmware->data; in pvr_fw_process()
642 layout_get_sizes(pvr_dev); in pvr_fw_process()
644 private_data = pvr_fw_find_private_data(pvr_dev); in pvr_fw_process()
657 fw_code_ptr = pvr_fw_object_create_and_map_offset(pvr_dev, 0, fw_mem->code_alloc_size, in pvr_fw_process()
665 if (pvr_dev->fw_dev.defs->has_fixed_data_addr) { in pvr_fw_process()
666 u32 base_addr = private_data->base_addr & pvr_dev->fw_dev.fw_heap_info.offset_mask; in pvr_fw_process()
669 pvr_fw_object_create_and_map_offset(pvr_dev, base_addr, in pvr_fw_process()
674 fw_data_ptr = pvr_fw_object_create_and_map(pvr_dev, fw_mem->data_alloc_size, in pvr_fw_process()
687 pvr_fw_object_create_and_map(pvr_dev, fw_mem->core_code_alloc_size, in pvr_fw_process()
702 pvr_fw_object_create_and_map(pvr_dev, fw_mem->core_data_alloc_size, in pvr_fw_process()
729 err = pvr_dev->fw_dev.defs->fw_process(pvr_dev, fw, in pvr_fw_process()
757 err = pvr_fw_create_fwif_connection_ctl(pvr_dev); in pvr_fw_process()
809 pvr_fw_reinit_code_data(struct pvr_device *pvr_dev) in pvr_fw_reinit_code_data() argument
811 struct pvr_fw_mem *fw_mem = &pvr_dev->fw_dev.mem; in pvr_fw_reinit_code_data()
840 pvr_fw_cleanup(struct pvr_device *pvr_dev) in pvr_fw_cleanup() argument
842 struct pvr_fw_mem *fw_mem = &pvr_dev->fw_dev.mem; in pvr_fw_cleanup()
844 pvr_fw_fini_fwif_connection_ctl(pvr_dev); in pvr_fw_cleanup()
868 pvr_wait_for_fw_boot(struct pvr_device *pvr_dev) in pvr_wait_for_fw_boot() argument
871 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_wait_for_fw_boot()
888 pvr_fw_heap_info_init(struct pvr_device *pvr_dev, u32 log2_size, u32 reserved_size) in pvr_fw_heap_info_init() argument
890 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_heap_info_init()
914 pvr_fw_validate_init_device_info(struct pvr_device *pvr_dev) in pvr_fw_validate_init_device_info() argument
918 err = pvr_fw_validate(pvr_dev); in pvr_fw_validate_init_device_info()
922 return pvr_fw_get_device_info(pvr_dev); in pvr_fw_validate_init_device_info()
939 pvr_fw_init(struct pvr_device *pvr_dev) in pvr_fw_init() argument
948 u32 kccb_rtn_size = (1 << kccb_size_log2) * sizeof(*pvr_dev->kccb.rtn); in pvr_fw_init()
949 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_init()
957 err = fw_dev->defs->init(pvr_dev); in pvr_fw_init()
966 err = drmm_mutex_init(from_pvr_device(pvr_dev), &fw_dev->fw_objs.lock); in pvr_fw_init()
970 err = pvr_fw_process(pvr_dev); in pvr_fw_init()
975 err = pvr_kccb_init(pvr_dev); in pvr_fw_init()
979 err = pvr_fwccb_init(pvr_dev); in pvr_fw_init()
984 pvr_dev->kccb.rtn = pvr_fw_object_create_and_map(pvr_dev, kccb_rtn_size, in pvr_fw_init()
986 NULL, NULL, &pvr_dev->kccb.rtn_obj); in pvr_fw_init()
987 if (IS_ERR(pvr_dev->kccb.rtn)) { in pvr_fw_init()
988 err = PTR_ERR(pvr_dev->kccb.rtn); in pvr_fw_init()
992 err = pvr_fw_create_structures(pvr_dev); in pvr_fw_init()
996 err = pvr_fw_start(pvr_dev); in pvr_fw_init()
1000 err = pvr_wait_for_fw_boot(pvr_dev); in pvr_fw_init()
1002 drm_err(from_pvr_device(pvr_dev), "Firmware failed to boot\n"); in pvr_fw_init()
1011 pvr_fw_stop(pvr_dev); in pvr_fw_init()
1014 pvr_fw_destroy_structures(pvr_dev); in pvr_fw_init()
1017 pvr_fw_object_unmap_and_destroy(pvr_dev->kccb.rtn_obj); in pvr_fw_init()
1020 pvr_ccb_fini(&pvr_dev->fwccb); in pvr_fw_init()
1023 pvr_kccb_fini(pvr_dev); in pvr_fw_init()
1026 pvr_fw_cleanup(pvr_dev); in pvr_fw_init()
1032 fw_dev->defs->fini(pvr_dev); in pvr_fw_init()
1042 pvr_fw_fini(struct pvr_device *pvr_dev) in pvr_fw_fini() argument
1044 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_fini()
1048 pvr_fw_destroy_structures(pvr_dev); in pvr_fw_fini()
1049 pvr_fw_object_unmap_and_destroy(pvr_dev->kccb.rtn_obj); in pvr_fw_fini()
1055 pvr_ccb_fini(&pvr_dev->fwccb); in pvr_fw_fini()
1056 pvr_kccb_fini(pvr_dev); in pvr_fw_fini()
1057 pvr_fw_cleanup(pvr_dev); in pvr_fw_fini()
1059 mutex_lock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_fini()
1060 WARN_ON(!list_empty(&pvr_dev->fw_dev.fw_objs.list)); in pvr_fw_fini()
1061 mutex_unlock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_fini()
1066 fw_dev->defs->fini(pvr_dev); in pvr_fw_fini()
1075 pvr_fw_mts_schedule(struct pvr_device *pvr_dev, u32 val) in pvr_fw_mts_schedule() argument
1080 pvr_cr_write32(pvr_dev, ROGUE_CR_MTS_SCHEDULE, val); in pvr_fw_mts_schedule()
1100 pvr_fw_structure_cleanup(struct pvr_device *pvr_dev, u32 type, struct pvr_fw_object *fw_obj, in pvr_fw_structure_cleanup() argument
1111 down_read(&pvr_dev->reset_sem); in pvr_fw_structure_cleanup()
1113 if (!drm_dev_enter(from_pvr_device(pvr_dev), &idx)) { in pvr_fw_structure_cleanup()
1140 err = pvr_kccb_send_cmd(pvr_dev, &cmd, &slot_nr); in pvr_fw_structure_cleanup()
1144 err = pvr_kccb_wait_for_completion(pvr_dev, slot_nr, HZ, &rtn); in pvr_fw_structure_cleanup()
1155 up_read(&pvr_dev->reset_sem); in pvr_fw_structure_cleanup()
1173 pvr_fw_object_fw_map(struct pvr_device *pvr_dev, struct pvr_fw_object *fw_obj, u64 dev_addr) in pvr_fw_object_fw_map() argument
1177 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_object_fw_map()
1211 err = fw_dev->defs->vm_map(pvr_dev, fw_obj); in pvr_fw_object_fw_map()
1242 struct pvr_device *pvr_dev = to_pvr_device(gem_obj->dev); in pvr_fw_object_fw_unmap() local
1243 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_object_fw_unmap()
1245 fw_dev->defs->vm_unmap(pvr_dev, fw_obj); in pvr_fw_object_fw_unmap()
1262 pvr_fw_object_create_and_map_common(struct pvr_device *pvr_dev, size_t size, in pvr_fw_object_create_and_map_common() argument
1282 fw_obj->gem = pvr_gem_object_create(pvr_dev, size, flags); in pvr_fw_object_create_and_map_common()
1289 err = pvr_fw_object_fw_map(pvr_dev, fw_obj, dev_addr); in pvr_fw_object_create_and_map_common()
1304 mutex_lock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_object_create_and_map_common()
1305 list_add_tail(&fw_obj->node, &pvr_dev->fw_dev.fw_objs.list); in pvr_fw_object_create_and_map_common()
1306 mutex_unlock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_object_create_and_map_common()
1336 pvr_fw_object_create(struct pvr_device *pvr_dev, size_t size, u64 flags, in pvr_fw_object_create() argument
1342 cpu_ptr = pvr_fw_object_create_and_map_common(pvr_dev, size, flags, 0, init, init_priv, in pvr_fw_object_create()
1376 pvr_fw_object_create_and_map(struct pvr_device *pvr_dev, size_t size, u64 flags, in pvr_fw_object_create_and_map() argument
1380 return pvr_fw_object_create_and_map_common(pvr_dev, size, flags, 0, init, init_priv, in pvr_fw_object_create_and_map()
1410 pvr_fw_object_create_and_map_offset(struct pvr_device *pvr_dev, in pvr_fw_object_create_and_map_offset() argument
1415 u64 dev_addr = pvr_dev->fw_dev.fw_mm_base + dev_offset; in pvr_fw_object_create_and_map_offset()
1417 return pvr_fw_object_create_and_map_common(pvr_dev, size, flags, dev_addr, init, init_priv, in pvr_fw_object_create_and_map_offset()
1429 struct pvr_device *pvr_dev = to_pvr_device(gem_obj->dev); in pvr_fw_object_destroy() local
1431 mutex_lock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_object_destroy()
1433 mutex_unlock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_object_destroy()
1457 struct pvr_device *pvr_dev = to_pvr_device(gem_from_pvr_gem(pvr_obj)->dev); in pvr_fw_object_get_fw_addr_offset() local
1459 *fw_addr_out = pvr_dev->fw_dev.defs->get_fw_addr_with_offset(fw_obj, offset); in pvr_fw_object_get_fw_addr_offset()
1465 struct pvr_device *pvr_dev = to_pvr_device(gem_from_pvr_gem(fw_obj->gem)->dev); in pvr_fw_obj_get_gpu_addr() local
1466 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_obj_get_gpu_addr()
1483 pvr_fw_hard_reset(struct pvr_device *pvr_dev) in pvr_fw_hard_reset() argument
1489 mutex_lock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_hard_reset()
1491 list_for_each(pos, &pvr_dev->fw_dev.fw_objs.list) { in pvr_fw_hard_reset()
1507 mutex_unlock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_hard_reset()
1509 err = pvr_fw_reinit_code_data(pvr_dev); in pvr_fw_hard_reset()