summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common
diff options
context:
space:
mode:
authorMahantesh Kumbar <mkumbar@nvidia.com>2017-05-12 01:54:31 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-06-13 05:40:15 -0400
commit8c66aef3bdbfbbeb1d3c3ef3bd6b1bee3ac05411 (patch)
tree80b8135576c2419887dc18d588c2efd493600ab2 /drivers/gpu/nvgpu/common
parent69dee6a648ad434b75e1a9c64b022ee45d3ff87b (diff)
gpu: nvgpu: reorganize PMU FB alloc/free
Moved PMU FB access related code from pmu_gk20a.c to "drivers/gpu/nvgpu/common/pmu/pmu.c" file - Prepended with nvgpu_ for global functions & replaced wherever used. JIRA NVGPU-56 JIRA NVGPU-94 Change-Id: I42bfd9d216e6b35672a9738f01302d954b32b69e Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com> Reviewed-on: http://git-master/r/1480551 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/common')
-rw-r--r--drivers/gpu/nvgpu/common/pmu/pmu.c47
-rw-r--r--drivers/gpu/nvgpu/common/pmu/pmu_ipc.c12
2 files changed, 53 insertions, 6 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}
diff --git a/drivers/gpu/nvgpu/common/pmu/pmu_ipc.c b/drivers/gpu/nvgpu/common/pmu/pmu_ipc.c
index 74966f2d..e45a6182 100644
--- a/drivers/gpu/nvgpu/common/pmu/pmu_ipc.c
+++ b/drivers/gpu/nvgpu/common/pmu/pmu_ipc.c
@@ -552,9 +552,9 @@ int gk20a_pmu_cmd_post(struct gk20a *g, struct pmu_cmd *cmd,
552 goto clean_up; 552 goto clean_up;
553 } 553 }
554 554
555 gk20a_pmu_vidmem_surface_alloc(g, seq->in_mem, 555 nvgpu_pmu_vidmem_surface_alloc(g, seq->in_mem,
556 payload->in.fb_size); 556 payload->in.fb_size);
557 gk20a_pmu_surface_describe(g, seq->in_mem, 557 nvgpu_pmu_surface_describe(g, seq->in_mem,
558 (struct flcn_mem_desc_v0 *) 558 (struct flcn_mem_desc_v0 *)
559 pv->pmu_allocation_get_fb_addr(pmu, in)); 559 pv->pmu_allocation_get_fb_addr(pmu, in));
560 560
@@ -595,9 +595,9 @@ int gk20a_pmu_cmd_post(struct gk20a *g, struct pmu_cmd *cmd,
595 err = -ENOMEM; 595 err = -ENOMEM;
596 goto clean_up; 596 goto clean_up;
597 } 597 }
598 gk20a_pmu_vidmem_surface_alloc(g, seq->out_mem, 598 nvgpu_pmu_vidmem_surface_alloc(g, seq->out_mem,
599 payload->out.fb_size); 599 payload->out.fb_size);
600 gk20a_pmu_surface_describe(g, seq->out_mem, 600 nvgpu_pmu_surface_describe(g, seq->out_mem,
601 (struct flcn_mem_desc_v0 *) 601 (struct flcn_mem_desc_v0 *)
602 pv->pmu_allocation_get_fb_addr(pmu, 602 pv->pmu_allocation_get_fb_addr(pmu,
603 out)); 603 out));
@@ -699,7 +699,7 @@ static int pmu_response_handle(struct nvgpu_pmu *pmu,
699 pv->pmu_allocation_get_fb_size(pmu, 699 pv->pmu_allocation_get_fb_size(pmu,
700 pv->get_pmu_seq_out_a_ptr(seq))); 700 pv->get_pmu_seq_out_a_ptr(seq)));
701 701
702 gk20a_pmu_surface_free(g, seq->out_mem); 702 nvgpu_pmu_surface_free(g, seq->out_mem);
703 if (seq->out_mem != seq->in_mem) 703 if (seq->out_mem != seq->in_mem)
704 nvgpu_kfree(g, seq->out_mem); 704 nvgpu_kfree(g, seq->out_mem);
705 else 705 else
@@ -712,7 +712,7 @@ static int pmu_response_handle(struct nvgpu_pmu *pmu,
712 pv->pmu_allocation_get_fb_size(pmu, 712 pv->pmu_allocation_get_fb_size(pmu,
713 pv->get_pmu_seq_in_a_ptr(seq))); 713 pv->get_pmu_seq_in_a_ptr(seq)));
714 714
715 gk20a_pmu_surface_free(g, seq->in_mem); 715 nvgpu_pmu_surface_free(g, seq->in_mem);
716 nvgpu_kfree(g, seq->in_mem); 716 nvgpu_kfree(g, seq->in_mem);
717 seq->in_mem = NULL; 717 seq->in_mem = NULL;
718 } 718 }