Lines Matching full:fw

46 /* TODO: Remove mtl_vpu.bin from names after transition to generation based FW names */
68 ret = request_firmware(&vdev->fw->file, ivpu_firmware, vdev->drm.dev); in ivpu_fw_request()
70 vdev->fw->name = ivpu_firmware; in ivpu_fw_request()
78 ret = firmware_request_nowarn(&vdev->fw->file, fw_names[i].name, vdev->drm.dev); in ivpu_fw_request()
80 vdev->fw->name = fw_names[i].name; in ivpu_fw_request()
98 ivpu_err(vdev, "Incompatible FW %s API version: %d.%d, required %d.0 or later\n", in ivpu_fw_check_api()
103 ivpu_warn(vdev, "Major FW %s API version different: %d.%d (expected %d.%d)\n", in ivpu_fw_check_api()
106 ivpu_dbg(vdev, FW_BOOT, "FW %s API version: %d.%d (expected %d.%d)\n", in ivpu_fw_check_api()
114 struct ivpu_fw_info *fw = vdev->fw; in ivpu_fw_parse() local
115 const struct vpu_firmware_header *fw_hdr = (const void *)fw->file->data; in ivpu_fw_parse()
118 if (fw->file->size <= FW_FILE_IMAGE_OFFSET) { in ivpu_fw_parse()
119 ivpu_err(vdev, "Firmware file is too small: %zu\n", fw->file->size); in ivpu_fw_parse()
138 if (runtime_size < fw->file->size || runtime_size > FW_RUNTIME_MAX_SIZE) { in ivpu_fw_parse()
143 if (FW_FILE_IMAGE_OFFSET + image_size > fw->file->size) { in ivpu_fw_parse()
168 ivpu_info(vdev, "Firmware: %s, version: %s", fw->name, in ivpu_fw_parse()
176 fw->runtime_addr = runtime_addr; in ivpu_fw_parse()
177 fw->runtime_size = runtime_size; in ivpu_fw_parse()
178 fw->image_load_offset = image_load_addr - runtime_addr; in ivpu_fw_parse()
179 fw->image_size = image_size; in ivpu_fw_parse()
180 fw->shave_nn_size = PAGE_ALIGN(fw_hdr->shave_nn_fw_size); in ivpu_fw_parse()
182 fw->cold_boot_entry_point = fw_hdr->entry_point; in ivpu_fw_parse()
183 fw->entry_point = fw->cold_boot_entry_point; in ivpu_fw_parse()
185 fw->trace_level = min_t(u32, ivpu_log_level, IVPU_FW_LOG_FATAL); in ivpu_fw_parse()
186 fw->trace_destination_mask = VPU_TRACE_DESTINATION_VERBOSE_TRACING; in ivpu_fw_parse()
187 fw->trace_hw_component_mask = -1; in ivpu_fw_parse()
190 fw->file->size, fw->image_size, fw->runtime_size, fw->shave_nn_size); in ivpu_fw_parse()
192 fw->runtime_addr, image_load_addr, fw->entry_point); in ivpu_fw_parse()
199 release_firmware(vdev->fw->file); in ivpu_fw_release()
204 struct ivpu_fw_info *fw = vdev->fw; in ivpu_fw_update_global_range() local
205 u64 start = ALIGN(fw->runtime_addr + fw->runtime_size, FW_SHARED_MEM_ALIGNMENT); in ivpu_fw_update_global_range()
219 struct ivpu_fw_info *fw = vdev->fw; in ivpu_fw_mem_init() local
227 fw->mem = ivpu_bo_alloc_internal(vdev, fw->runtime_addr, fw->runtime_size, DRM_IVPU_BO_WC); in ivpu_fw_mem_init()
228 if (!fw->mem) { in ivpu_fw_mem_init()
233 fw->mem_log_crit = ivpu_bo_alloc_internal(vdev, 0, IVPU_FW_CRITICAL_BUFFER_SIZE, in ivpu_fw_mem_init()
235 if (!fw->mem_log_crit) { in ivpu_fw_mem_init()
246 fw->mem_log_verb = ivpu_bo_alloc_internal(vdev, 0, log_verb_size, DRM_IVPU_BO_CACHED); in ivpu_fw_mem_init()
247 if (!fw->mem_log_verb) { in ivpu_fw_mem_init()
253 if (fw->shave_nn_size) { in ivpu_fw_mem_init()
254 fw->mem_shave_nn = ivpu_bo_alloc_internal(vdev, vdev->hw->ranges.shave.start, in ivpu_fw_mem_init()
255 fw->shave_nn_size, DRM_IVPU_BO_UNCACHED); in ivpu_fw_mem_init()
256 if (!fw->mem_shave_nn) { in ivpu_fw_mem_init()
266 ivpu_bo_free_internal(fw->mem_log_verb); in ivpu_fw_mem_init()
268 ivpu_bo_free_internal(fw->mem_log_crit); in ivpu_fw_mem_init()
270 ivpu_bo_free_internal(fw->mem); in ivpu_fw_mem_init()
276 struct ivpu_fw_info *fw = vdev->fw; in ivpu_fw_mem_fini() local
278 if (fw->mem_shave_nn) { in ivpu_fw_mem_fini()
279 ivpu_bo_free_internal(fw->mem_shave_nn); in ivpu_fw_mem_fini()
280 fw->mem_shave_nn = NULL; in ivpu_fw_mem_fini()
283 ivpu_bo_free_internal(fw->mem_log_verb); in ivpu_fw_mem_fini()
284 ivpu_bo_free_internal(fw->mem_log_crit); in ivpu_fw_mem_fini()
285 ivpu_bo_free_internal(fw->mem); in ivpu_fw_mem_fini()
287 fw->mem_log_verb = NULL; in ivpu_fw_mem_fini()
288 fw->mem_log_crit = NULL; in ivpu_fw_mem_fini()
289 fw->mem = NULL; in ivpu_fw_mem_fini()
323 struct ivpu_fw_info *fw = vdev->fw; in ivpu_fw_load() local
324 u64 image_end_offset = fw->image_load_offset + fw->image_size; in ivpu_fw_load()
326 memset(fw->mem->kvaddr, 0, fw->image_load_offset); in ivpu_fw_load()
327 memcpy(fw->mem->kvaddr + fw->image_load_offset, in ivpu_fw_load()
328 fw->file->data + FW_FILE_IMAGE_OFFSET, fw->image_size); in ivpu_fw_load()
331 u8 *start = fw->mem->kvaddr + image_end_offset; in ivpu_fw_load()
332 u64 size = fw->mem->base.size - image_end_offset; in ivpu_fw_load()
337 wmb(); /* Flush WC buffers after writing fw->mem */ in ivpu_fw_load()
474 if (vdev->fw->mem_shave_nn) in ivpu_fw_boot_params_setup()
475 boot_params->shave_nn_fw_base = vdev->fw->mem_shave_nn->vpu_addr; in ivpu_fw_boot_params_setup()
488 boot_params->default_trace_level = vdev->fw->trace_level; in ivpu_fw_boot_params_setup()
490 boot_params->trace_destination_mask = vdev->fw->trace_destination_mask; in ivpu_fw_boot_params_setup()
491 boot_params->trace_hw_component_mask = vdev->fw->trace_hw_component_mask; in ivpu_fw_boot_params_setup()
492 boot_params->crit_tracing_buff_addr = vdev->fw->mem_log_crit->vpu_addr; in ivpu_fw_boot_params_setup()
493 boot_params->crit_tracing_buff_size = vdev->fw->mem_log_crit->base.size; in ivpu_fw_boot_params_setup()
494 boot_params->verbose_tracing_buff_addr = vdev->fw->mem_log_verb->vpu_addr; in ivpu_fw_boot_params_setup()
495 boot_params->verbose_tracing_buff_size = vdev->fw->mem_log_verb->base.size; in ivpu_fw_boot_params_setup()