diff options
Diffstat (limited to 'drivers/gpu/nvgpu/common/pmu')
-rw-r--r-- | drivers/gpu/nvgpu/common/pmu/pmu.c | 47 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/common/pmu/pmu_ipc.c | 12 |
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 | |||
427 | void 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 | |||
436 | int 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 | |||
452 | int 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 | |||
468 | void 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 | } |