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()
64 pvr_fw_find_private_data(struct pvr_device *pvr_dev) in pvr_fw_find_private_data() argument
66 const struct pvr_fw_layout_entry *layout_entries = pvr_dev->fw_dev.layout_entries; in pvr_fw_find_private_data()
67 u32 num_layout_entries = pvr_dev->fw_dev.header->layout_entry_num; in pvr_fw_find_private_data()
91 pvr_fw_validate(struct pvr_device *pvr_dev) in pvr_fw_validate() argument
93 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_fw_validate()
94 const struct firmware *firmware = pvr_dev->fw_dev.firmware; in pvr_fw_validate()
130 if (pvr_gpu_id_to_packed_bvnc(&pvr_dev->gpu_id) != header->bvnc) { in pvr_fw_validate()
136 pvr_dev->gpu_id.b, pvr_dev->gpu_id.v, pvr_dev->gpu_id.n, pvr_dev->gpu_id.c); in pvr_fw_validate()
160 pvr_dev->fw_version.major = header->fw_version_major; in pvr_fw_validate()
161 pvr_dev->fw_version.minor = header->fw_version_minor; in pvr_fw_validate()
163 pvr_dev->fw_dev.header = header; in pvr_fw_validate()
164 pvr_dev->fw_dev.layout_entries = layout_entries; in pvr_fw_validate()
170 pvr_fw_get_device_info(struct pvr_device *pvr_dev) in pvr_fw_get_device_info() argument
172 const struct firmware *firmware = pvr_dev->fw_dev.firmware; in pvr_fw_get_device_info()
178 fw_offset = (firmware->size - SZ_4K) - pvr_dev->fw_dev.header->device_info_size; in pvr_fw_get_device_info()
183 pvr_device_info_set_quirks(pvr_dev, dev_info, header->brn_mask_size); in pvr_fw_get_device_info()
186 pvr_device_info_set_enhancements(pvr_dev, dev_info, header->ern_mask_size); in pvr_fw_get_device_info()
189 return pvr_device_info_set_features(pvr_dev, dev_info, header->feature_mask_size, in pvr_fw_get_device_info()
194 layout_get_sizes(struct pvr_device *pvr_dev) in layout_get_sizes() argument
196 const struct pvr_fw_layout_entry *layout_entries = pvr_dev->fw_dev.layout_entries; in layout_get_sizes()
197 u32 num_layout_entries = pvr_dev->fw_dev.header->layout_entry_num; in layout_get_sizes()
198 struct pvr_fw_mem *fw_mem = &pvr_dev->fw_dev.mem; in layout_get_sizes()
229 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
233 const struct pvr_fw_layout_entry *layout_entries = pvr_dev->fw_dev.layout_entries; in pvr_fw_find_mmu_segment()
234 u32 num_layout_entries = pvr_dev->fw_dev.header->layout_entry_num; in pvr_fw_find_mmu_segment()
285 pvr_fw_create_fwif_connection_ctl(struct pvr_device *pvr_dev) in pvr_fw_create_fwif_connection_ctl() argument
287 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_fw_create_fwif_connection_ctl()
288 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_create_fwif_connection_ctl()
291 pvr_fw_object_create_and_map_offset(pvr_dev, in pvr_fw_create_fwif_connection_ctl()
308 pvr_fw_fini_fwif_connection_ctl(struct pvr_device *pvr_dev) in pvr_fw_fini_fwif_connection_ctl() argument
310 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_fini_fwif_connection_ctl()
319 struct pvr_device *pvr_dev = priv; in fw_osinit_init() local
320 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in fw_osinit_init()
323 fwif_osinit->kernel_ccbctl_fw_addr = pvr_dev->kccb.ccb.ctrl_fw_addr; in fw_osinit_init()
324 fwif_osinit->kernel_ccb_fw_addr = pvr_dev->kccb.ccb.ccb_fw_addr; in fw_osinit_init()
325 pvr_fw_object_get_fw_addr(pvr_dev->kccb.rtn_obj, in fw_osinit_init()
328 fwif_osinit->firmware_ccbctl_fw_addr = pvr_dev->fwccb.ctrl_fw_addr; in fw_osinit_init()
329 fwif_osinit->firmware_ccb_fw_addr = pvr_dev->fwccb.ccb_fw_addr; in fw_osinit_init()
348 struct pvr_device *pvr_dev = priv; in fw_osdata_init() local
349 struct pvr_fw_mem *fw_mem = &pvr_dev->fw_dev.mem; in fw_osdata_init()
367 struct pvr_device *pvr_dev = priv; in fw_sysinit_init() local
368 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in fw_sysinit_init()
371 u32 clock_speed_hz = clk_get_rate(pvr_dev->core_clk); in fw_sysinit_init()
418 struct pvr_device *pvr_dev = priv; in fw_sysdata_init() local
422 WARN_ON(PVR_FEATURE_VALUE(pvr_dev, slc_size_in_kilobytes, &slc_size_in_kilobytes)); in fw_sysdata_init()
434 struct pvr_device *pvr_dev = priv; in fw_runtime_cfg_init() local
435 u32 clock_speed_hz = clk_get_rate(pvr_dev->core_clk); in fw_runtime_cfg_init()
442 WARN_ON(PVR_FEATURE_VALUE(pvr_dev, num_clusters, in fw_runtime_cfg_init()
455 pvr_fw_create_structures(struct pvr_device *pvr_dev) in pvr_fw_create_structures() argument
457 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_fw_create_structures()
458 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_create_structures()
462 fw_dev->power_sync = pvr_fw_object_create_and_map(pvr_dev, sizeof(*fw_dev->power_sync), in pvr_fw_create_structures()
470 fw_dev->hwrinfobuf = pvr_fw_object_create_and_map(pvr_dev, sizeof(*fw_dev->hwrinfobuf), in pvr_fw_create_structures()
480 err = pvr_fw_object_create(pvr_dev, PVR_SYNC_OBJ_SIZE, in pvr_fw_create_structures()
489 fw_dev->fwif_sysdata = pvr_fw_object_create_and_map(pvr_dev, in pvr_fw_create_structures()
492 fw_sysdata_init, pvr_dev, in pvr_fw_create_structures()
500 err = pvr_fw_object_create(pvr_dev, PVR_ROGUE_FAULT_PAGE_SIZE, in pvr_fw_create_structures()
508 err = pvr_fw_object_create(pvr_dev, sizeof(struct rogue_fwif_gpu_util_fwcb), in pvr_fw_create_structures()
510 fw_gpu_util_fwcb_init, pvr_dev, &fw_mem->gpu_util_fwcb_obj); in pvr_fw_create_structures()
516 err = pvr_fw_object_create(pvr_dev, sizeof(struct rogue_fwif_runtime_cfg), in pvr_fw_create_structures()
518 fw_runtime_cfg_init, pvr_dev, &fw_mem->runtime_cfg_obj); in pvr_fw_create_structures()
524 err = pvr_fw_trace_init(pvr_dev); in pvr_fw_create_structures()
528 fw_dev->fwif_osdata = pvr_fw_object_create_and_map(pvr_dev, in pvr_fw_create_structures()
531 fw_osdata_init, pvr_dev, in pvr_fw_create_structures()
540 pvr_fw_object_create_and_map_offset(pvr_dev, in pvr_fw_create_structures()
545 fw_osinit_init, pvr_dev, &fw_mem->osinit_obj); in pvr_fw_create_structures()
553 pvr_fw_object_create_and_map_offset(pvr_dev, in pvr_fw_create_structures()
558 fw_sysinit_init, pvr_dev, &fw_mem->sysinit_obj); in pvr_fw_create_structures()
574 pvr_fw_trace_fini(pvr_dev); in pvr_fw_create_structures()
601 pvr_fw_destroy_structures(struct pvr_device *pvr_dev) in pvr_fw_destroy_structures() argument
603 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_destroy_structures()
606 pvr_fw_trace_fini(pvr_dev); in pvr_fw_destroy_structures()
631 pvr_fw_process(struct pvr_device *pvr_dev) in pvr_fw_process() argument
633 struct drm_device *drm_dev = from_pvr_device(pvr_dev); in pvr_fw_process()
634 struct pvr_fw_mem *fw_mem = &pvr_dev->fw_dev.mem; in pvr_fw_process()
635 const u8 *fw = pvr_dev->fw_dev.firmware->data; in pvr_fw_process()
643 layout_get_sizes(pvr_dev); in pvr_fw_process()
645 private_data = pvr_fw_find_private_data(pvr_dev); in pvr_fw_process()
658 fw_code_ptr = pvr_fw_object_create_and_map_offset(pvr_dev, 0, fw_mem->code_alloc_size, in pvr_fw_process()
666 if (pvr_dev->fw_dev.defs->has_fixed_data_addr()) { in pvr_fw_process()
667 u32 base_addr = private_data->base_addr & pvr_dev->fw_dev.fw_heap_info.offset_mask; in pvr_fw_process()
670 pvr_fw_object_create_and_map_offset(pvr_dev, base_addr, in pvr_fw_process()
675 fw_data_ptr = pvr_fw_object_create_and_map(pvr_dev, fw_mem->data_alloc_size, in pvr_fw_process()
688 pvr_fw_object_create_and_map(pvr_dev, fw_mem->core_code_alloc_size, in pvr_fw_process()
703 pvr_fw_object_create_and_map(pvr_dev, fw_mem->core_data_alloc_size, in pvr_fw_process()
730 err = pvr_dev->fw_dev.defs->fw_process(pvr_dev, fw, in pvr_fw_process()
754 err = pvr_fw_create_fwif_connection_ctl(pvr_dev); in pvr_fw_process()
803 pvr_fw_reinit_code_data(struct pvr_device *pvr_dev) in pvr_fw_reinit_code_data() argument
805 struct pvr_fw_mem *fw_mem = &pvr_dev->fw_dev.mem; in pvr_fw_reinit_code_data()
834 pvr_fw_cleanup(struct pvr_device *pvr_dev) in pvr_fw_cleanup() argument
836 struct pvr_fw_mem *fw_mem = &pvr_dev->fw_dev.mem; in pvr_fw_cleanup()
838 pvr_fw_fini_fwif_connection_ctl(pvr_dev); in pvr_fw_cleanup()
856 pvr_wait_for_fw_boot(struct pvr_device *pvr_dev) in pvr_wait_for_fw_boot() argument
859 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_wait_for_fw_boot()
876 pvr_fw_heap_info_init(struct pvr_device *pvr_dev, u32 log2_size, u32 reserved_size) in pvr_fw_heap_info_init() argument
878 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_heap_info_init()
902 pvr_fw_validate_init_device_info(struct pvr_device *pvr_dev) in pvr_fw_validate_init_device_info() argument
906 err = pvr_fw_validate(pvr_dev); in pvr_fw_validate_init_device_info()
910 return pvr_fw_get_device_info(pvr_dev); in pvr_fw_validate_init_device_info()
927 pvr_fw_init(struct pvr_device *pvr_dev) in pvr_fw_init() argument
930 u32 kccb_rtn_size = (1 << kccb_size_log2) * sizeof(*pvr_dev->kccb.rtn); in pvr_fw_init()
931 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_init()
941 err = fw_dev->defs->init(pvr_dev); in pvr_fw_init()
950 err = drmm_mutex_init(from_pvr_device(pvr_dev), &fw_dev->fw_objs.lock); in pvr_fw_init()
954 err = pvr_fw_process(pvr_dev); in pvr_fw_init()
959 err = pvr_kccb_init(pvr_dev); in pvr_fw_init()
963 err = pvr_fwccb_init(pvr_dev); in pvr_fw_init()
968 pvr_dev->kccb.rtn = pvr_fw_object_create_and_map(pvr_dev, kccb_rtn_size, in pvr_fw_init()
970 NULL, NULL, &pvr_dev->kccb.rtn_obj); in pvr_fw_init()
971 if (IS_ERR(pvr_dev->kccb.rtn)) { in pvr_fw_init()
972 err = PTR_ERR(pvr_dev->kccb.rtn); in pvr_fw_init()
976 err = pvr_fw_create_structures(pvr_dev); in pvr_fw_init()
980 err = pvr_fw_start(pvr_dev); in pvr_fw_init()
984 err = pvr_wait_for_fw_boot(pvr_dev); in pvr_fw_init()
986 drm_err(from_pvr_device(pvr_dev), "Firmware failed to boot\n"); in pvr_fw_init()
995 pvr_fw_stop(pvr_dev); in pvr_fw_init()
998 pvr_fw_destroy_structures(pvr_dev); in pvr_fw_init()
1001 pvr_fw_object_unmap_and_destroy(pvr_dev->kccb.rtn_obj); in pvr_fw_init()
1004 pvr_ccb_fini(&pvr_dev->fwccb); in pvr_fw_init()
1007 pvr_kccb_fini(pvr_dev); in pvr_fw_init()
1010 pvr_fw_cleanup(pvr_dev); in pvr_fw_init()
1016 fw_dev->defs->fini(pvr_dev); in pvr_fw_init()
1026 pvr_fw_fini(struct pvr_device *pvr_dev) in pvr_fw_fini() argument
1028 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_fini()
1032 pvr_fw_destroy_structures(pvr_dev); in pvr_fw_fini()
1033 pvr_fw_object_unmap_and_destroy(pvr_dev->kccb.rtn_obj); in pvr_fw_fini()
1039 pvr_ccb_fini(&pvr_dev->fwccb); in pvr_fw_fini()
1040 pvr_kccb_fini(pvr_dev); in pvr_fw_fini()
1041 pvr_fw_cleanup(pvr_dev); in pvr_fw_fini()
1043 mutex_lock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_fini()
1044 WARN_ON(!list_empty(&pvr_dev->fw_dev.fw_objs.list)); in pvr_fw_fini()
1045 mutex_unlock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_fini()
1050 fw_dev->defs->fini(pvr_dev); in pvr_fw_fini()
1059 pvr_fw_mts_schedule(struct pvr_device *pvr_dev, u32 val) in pvr_fw_mts_schedule() argument
1064 pvr_cr_write32(pvr_dev, ROGUE_CR_MTS_SCHEDULE, val); in pvr_fw_mts_schedule()
1084 pvr_fw_structure_cleanup(struct pvr_device *pvr_dev, u32 type, struct pvr_fw_object *fw_obj, in pvr_fw_structure_cleanup() argument
1095 down_read(&pvr_dev->reset_sem); in pvr_fw_structure_cleanup()
1097 if (!drm_dev_enter(from_pvr_device(pvr_dev), &idx)) { in pvr_fw_structure_cleanup()
1124 err = pvr_kccb_send_cmd(pvr_dev, &cmd, &slot_nr); in pvr_fw_structure_cleanup()
1128 err = pvr_kccb_wait_for_completion(pvr_dev, slot_nr, HZ, &rtn); in pvr_fw_structure_cleanup()
1139 up_read(&pvr_dev->reset_sem); in pvr_fw_structure_cleanup()
1157 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
1161 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_object_fw_map()
1195 err = fw_dev->defs->vm_map(pvr_dev, fw_obj); in pvr_fw_object_fw_map()
1226 struct pvr_device *pvr_dev = to_pvr_device(gem_obj->dev); in pvr_fw_object_fw_unmap() local
1227 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_fw_object_fw_unmap()
1229 fw_dev->defs->vm_unmap(pvr_dev, fw_obj); in pvr_fw_object_fw_unmap()
1246 pvr_fw_object_create_and_map_common(struct pvr_device *pvr_dev, size_t size, in pvr_fw_object_create_and_map_common() argument
1266 fw_obj->gem = pvr_gem_object_create(pvr_dev, size, flags); in pvr_fw_object_create_and_map_common()
1273 err = pvr_fw_object_fw_map(pvr_dev, fw_obj, dev_addr); in pvr_fw_object_create_and_map_common()
1288 mutex_lock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_object_create_and_map_common()
1289 list_add_tail(&fw_obj->node, &pvr_dev->fw_dev.fw_objs.list); in pvr_fw_object_create_and_map_common()
1290 mutex_unlock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_object_create_and_map_common()
1320 pvr_fw_object_create(struct pvr_device *pvr_dev, size_t size, u64 flags, in pvr_fw_object_create() argument
1326 cpu_ptr = pvr_fw_object_create_and_map_common(pvr_dev, size, flags, 0, init, init_priv, in pvr_fw_object_create()
1360 pvr_fw_object_create_and_map(struct pvr_device *pvr_dev, size_t size, u64 flags, in pvr_fw_object_create_and_map() argument
1364 return pvr_fw_object_create_and_map_common(pvr_dev, size, flags, 0, init, init_priv, in pvr_fw_object_create_and_map()
1394 pvr_fw_object_create_and_map_offset(struct pvr_device *pvr_dev, in pvr_fw_object_create_and_map_offset() argument
1399 u64 dev_addr = pvr_dev->fw_dev.fw_mm_base + dev_offset; in pvr_fw_object_create_and_map_offset()
1401 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()
1413 struct pvr_device *pvr_dev = to_pvr_device(gem_obj->dev); in pvr_fw_object_destroy() local
1415 mutex_lock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_object_destroy()
1417 mutex_unlock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_object_destroy()
1441 struct pvr_device *pvr_dev = to_pvr_device(gem_from_pvr_gem(pvr_obj)->dev); in pvr_fw_object_get_fw_addr_offset() local
1443 *fw_addr_out = pvr_dev->fw_dev.defs->get_fw_addr_with_offset(fw_obj, offset); in pvr_fw_object_get_fw_addr_offset()
1458 pvr_fw_hard_reset(struct pvr_device *pvr_dev) in pvr_fw_hard_reset() argument
1464 mutex_lock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_hard_reset()
1466 list_for_each(pos, &pvr_dev->fw_dev.fw_objs.list) { in pvr_fw_hard_reset()
1482 mutex_unlock(&pvr_dev->fw_dev.fw_objs.lock); in pvr_fw_hard_reset()
1484 err = pvr_fw_reinit_code_data(pvr_dev); in pvr_fw_hard_reset()