diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b')
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/acr_gm20b.c | 33 |
1 files changed, 3 insertions, 30 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/acr_gm20b.c b/drivers/gpu/nvgpu/gm20b/acr_gm20b.c index b6941ada..7029b477 100644 --- a/drivers/gpu/nvgpu/gm20b/acr_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/acr_gm20b.c | |||
@@ -350,13 +350,7 @@ int prepare_ucode_blob(struct gk20a *g) | |||
350 | int err; | 350 | int err; |
351 | struct ls_flcn_mgr lsfm_l, *plsfm; | 351 | struct ls_flcn_mgr lsfm_l, *plsfm; |
352 | struct nvgpu_pmu *pmu = &g->pmu; | 352 | struct nvgpu_pmu *pmu = &g->pmu; |
353 | phys_addr_t wpr_addr, wpr_page; | ||
354 | u32 wprsize; | ||
355 | int i; | ||
356 | struct mm_gk20a *mm = &g->mm; | ||
357 | struct vm_gk20a *vm = mm->pmu.vm; | ||
358 | struct wpr_carveout_info wpr_inf; | 353 | struct wpr_carveout_info wpr_inf; |
359 | struct page **pages; | ||
360 | 354 | ||
361 | if (g->acr.ucode_blob.cpu_va) { | 355 | if (g->acr.ucode_blob.cpu_va) { |
362 | /*Recovery case, we do not need to form | 356 | /*Recovery case, we do not need to form |
@@ -375,26 +369,8 @@ int prepare_ucode_blob(struct gk20a *g) | |||
375 | gr_gk20a_init_ctxsw_ucode(g); | 369 | gr_gk20a_init_ctxsw_ucode(g); |
376 | 370 | ||
377 | g->ops.pmu.get_wpr(g, &wpr_inf); | 371 | g->ops.pmu.get_wpr(g, &wpr_inf); |
378 | wpr_addr = (phys_addr_t)wpr_inf.wpr_base; | ||
379 | wprsize = (u32)wpr_inf.size; | ||
380 | gm20b_dbg_pmu("wpr carveout base:%llx\n", wpr_inf.wpr_base); | 372 | gm20b_dbg_pmu("wpr carveout base:%llx\n", wpr_inf.wpr_base); |
381 | gm20b_dbg_pmu("wpr carveout size :%x\n", wprsize); | 373 | gm20b_dbg_pmu("wpr carveout size :%llx\n", wpr_inf.size); |
382 | |||
383 | pages = nvgpu_kmalloc(g, sizeof(struct page *) * (wprsize / PAGE_SIZE)); | ||
384 | if (!pages) | ||
385 | return -ENOMEM; | ||
386 | |||
387 | wpr_page = wpr_addr; | ||
388 | for (i = 0; wpr_page < (wpr_addr + wprsize); i++, wpr_page += PAGE_SIZE) | ||
389 | pages[i] = phys_to_page(wpr_page); | ||
390 | __nvgpu_mem_create_from_pages(g, &g->pmu.wpr_buf, pages, | ||
391 | wprsize / PAGE_SIZE); | ||
392 | nvgpu_kfree(g, pages); | ||
393 | |||
394 | g->pmu.wpr_buf.gpu_va = nvgpu_gmmu_map(vm, &g->pmu.wpr_buf, | ||
395 | wprsize, 0, gk20a_mem_flag_none, | ||
396 | false, APERTURE_SYSMEM); | ||
397 | gm20b_dbg_pmu("wpr mapped gpu va :%llx\n", g->pmu.wpr_buf.gpu_va); | ||
398 | 374 | ||
399 | /* Discover all managed falcons*/ | 375 | /* Discover all managed falcons*/ |
400 | err = lsfm_discover_ucode_images(g, plsfm); | 376 | err = lsfm_discover_ucode_images(g, plsfm); |
@@ -423,7 +399,6 @@ int prepare_ucode_blob(struct gk20a *g) | |||
423 | gm20b_dbg_pmu("prepare ucode blob return 0\n"); | 399 | gm20b_dbg_pmu("prepare ucode blob return 0\n"); |
424 | free_acr_resources(g, plsfm); | 400 | free_acr_resources(g, plsfm); |
425 | free_sgt: | 401 | free_sgt: |
426 | nvgpu_gmmu_unmap(vm, &g->pmu.wpr_buf, g->pmu.wpr_buf.gpu_va); | ||
427 | return err; | 402 | return err; |
428 | } | 403 | } |
429 | 404 | ||
@@ -618,10 +593,8 @@ int gm20b_flcn_populate_bl_dmem_desc(struct gk20a *g, | |||
618 | */ | 593 | */ |
619 | addr_base = p_lsfm->lsb_header.ucode_off; | 594 | addr_base = p_lsfm->lsb_header.ucode_off; |
620 | g->ops.pmu.get_wpr(g, &wpr_inf); | 595 | g->ops.pmu.get_wpr(g, &wpr_inf); |
621 | if (falconid == LSF_FALCON_ID_GPCCS) | 596 | addr_base += wpr_inf.wpr_base; |
622 | addr_base += g->pmu.wpr_buf.gpu_va; | 597 | |
623 | else | ||
624 | addr_base += wpr_inf.wpr_base; | ||
625 | gm20b_dbg_pmu("gen loader cfg %x u32 addrbase %x ID\n", (u32)addr_base, | 598 | gm20b_dbg_pmu("gen loader cfg %x u32 addrbase %x ID\n", (u32)addr_base, |
626 | p_lsfm->wpr_header.falcon_id); | 599 | p_lsfm->wpr_header.falcon_id); |
627 | addr_code = u64_lo32((addr_base + | 600 | addr_code = u64_lo32((addr_base + |