@@ -220,8 +220,7 @@ static int ivpu_fw_mem_init(struct ivpu_device *vdev)
220220 if (ret )
221221 return ret ;
222222
223- fw -> mem = ivpu_bo_alloc_internal (vdev , fw -> runtime_addr , fw -> runtime_size ,
224- DRM_IVPU_BO_CACHED | DRM_IVPU_BO_NOSNOOP );
223+ fw -> mem = ivpu_bo_alloc_internal (vdev , fw -> runtime_addr , fw -> runtime_size , DRM_IVPU_BO_WC );
225224 if (!fw -> mem ) {
226225 ivpu_err (vdev , "Failed to allocate firmware runtime memory\n" );
227226 return - ENOMEM ;
@@ -331,7 +330,7 @@ int ivpu_fw_load(struct ivpu_device *vdev)
331330 memset (start , 0 , size );
332331 }
333332
334- clflush_cache_range ( fw -> mem -> kvaddr , fw -> mem -> base . size );
333+ wmb (); /* Flush WC buffers after writing fw->mem */
335334
336335 return 0 ;
337336}
@@ -433,7 +432,7 @@ void ivpu_fw_boot_params_setup(struct ivpu_device *vdev, struct vpu_boot_params
433432 if (!ivpu_fw_is_cold_boot (vdev )) {
434433 boot_params -> save_restore_ret_address = 0 ;
435434 vdev -> pm -> is_warmboot = true;
436- clflush_cache_range ( vdev -> fw -> mem -> kvaddr , SZ_4K );
435+ wmb (); /* Flush WC buffers after writing save_restore_ret_address */
437436 return ;
438437 }
439438
@@ -495,7 +494,7 @@ void ivpu_fw_boot_params_setup(struct ivpu_device *vdev, struct vpu_boot_params
495494 boot_params -> punit_telemetry_sram_size = ivpu_hw_reg_telemetry_size_get (vdev );
496495 boot_params -> vpu_telemetry_enable = ivpu_hw_reg_telemetry_enable_get (vdev );
497496
498- clflush_cache_range ( vdev -> fw -> mem -> kvaddr , SZ_4K );
497+ wmb (); /* Flush WC buffers after writing bootparams */
499498
500499 ivpu_fw_boot_params_print (vdev , boot_params );
501500}
0 commit comments