diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 4872bb95b..bcde1746a 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c @@ -940,6 +940,16 @@ int gk20a_init_mm_setup_sw(struct gk20a *g) if (err) return err; + /* + * this requires fixed allocations in vidmem which must be + * allocated before all other buffers + */ + if (g->ops.pmu.alloc_blob_space && g->mm.vidmem_is_vidmem) { + err = g->ops.pmu.alloc_blob_space(g, 0, &g->acr.ucode_blob); + if (err) + return err; + } + err = gk20a_alloc_sysmem_flush(g); if (err) return err; diff --git a/drivers/gpu/nvgpu/gm206/acr_gm206.c b/drivers/gpu/nvgpu/gm206/acr_gm206.c index 988761f03..39b30ea6c 100644 --- a/drivers/gpu/nvgpu/gm206/acr_gm206.c +++ b/drivers/gpu/nvgpu/gm206/acr_gm206.c @@ -58,6 +58,9 @@ int gm206_alloc_blob_space(struct gk20a *g, { struct wpr_carveout_info wpr_inf; + if (mem->size) + return 0; + g->ops.pmu.get_wpr(g, &wpr_inf); return gk20a_gmmu_alloc_attr_vid_at(g, 0, wpr_inf.size, mem,