summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common/pmu/pmu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/common/pmu/pmu.c')
-rw-r--r--drivers/gpu/nvgpu/common/pmu/pmu.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/common/pmu/pmu.c b/drivers/gpu/nvgpu/common/pmu/pmu.c
index 90db07b4..ca532049 100644
--- a/drivers/gpu/nvgpu/common/pmu/pmu.c
+++ b/drivers/gpu/nvgpu/common/pmu/pmu.c
@@ -423,3 +423,50 @@ int nvgpu_pmu_destroy(struct gk20a *g)
423 nvgpu_log_fn(g, "done"); 423 nvgpu_log_fn(g, "done");
424 return 0; 424 return 0;
425} 425}
426
427void nvgpu_pmu_surface_describe(struct gk20a *g, struct nvgpu_mem *mem,
428 struct flcn_mem_desc_v0 *fb)
429{
430 fb->address.lo = u64_lo32(mem->gpu_va);
431 fb->address.hi = u64_hi32(mem->gpu_va);
432 fb->params = ((u32)mem->size & 0xFFFFFF);
433 fb->params |= (GK20A_PMU_DMAIDX_VIRT << 24);
434}
435
436int nvgpu_pmu_vidmem_surface_alloc(struct gk20a *g, struct nvgpu_mem *mem,
437 u32 size)
438{
439 struct mm_gk20a *mm = &g->mm;
440 struct vm_gk20a *vm = mm->pmu.vm;
441 int err;
442
443 err = nvgpu_dma_alloc_map_vid(vm, size, mem);
444 if (err) {
445 nvgpu_err(g, "memory allocation failed");
446 return -ENOMEM;
447 }
448
449 return 0;
450}
451
452int nvgpu_pmu_sysmem_surface_alloc(struct gk20a *g, struct nvgpu_mem *mem,
453 u32 size)
454{
455 struct mm_gk20a *mm = &g->mm;
456 struct vm_gk20a *vm = mm->pmu.vm;
457 int err;
458
459 err = nvgpu_dma_alloc_map_sys(vm, size, mem);
460 if (err) {
461 nvgpu_err(g, "failed to allocate memory\n");
462 return -ENOMEM;
463 }
464
465 return 0;
466}
467
468void nvgpu_pmu_surface_free(struct gk20a *g, struct nvgpu_mem *mem)
469{
470 nvgpu_dma_free(g, mem);
471 memset(mem, 0, sizeof(struct nvgpu_mem));
472}