diff --git a/drivers/gpu/nvgpu/common/boardobj/boardobjgrp.c b/drivers/gpu/nvgpu/common/boardobj/boardobjgrp.c index b97c8c7cd..00bdc85eb 100644 --- a/drivers/gpu/nvgpu/common/boardobj/boardobjgrp.c +++ b/drivers/gpu/nvgpu/common/boardobj/boardobjgrp.c @@ -26,6 +26,7 @@ #include #include #include +#include /* * Inserts a previously constructed Board Object into a Board Object Group for diff --git a/drivers/gpu/nvgpu/common/pmu/ipc/pmu_cmd.c b/drivers/gpu/nvgpu/common/pmu/ipc/pmu_cmd.c index 15dc5a7c8..4561b0d87 100644 --- a/drivers/gpu/nvgpu/common/pmu/ipc/pmu_cmd.c +++ b/drivers/gpu/nvgpu/common/pmu/ipc/pmu_cmd.c @@ -35,6 +35,7 @@ #include #include #include +#include static bool pmu_validate_cmd(struct nvgpu_pmu *pmu, struct pmu_cmd *cmd, struct pmu_payload *payload, u32 queue_id) diff --git a/drivers/gpu/nvgpu/common/pmu/pmu.c b/drivers/gpu/nvgpu/common/pmu/pmu.c index 51ed3d1b0..51a5968ad 100644 --- a/drivers/gpu/nvgpu/common/pmu/pmu.c +++ b/drivers/gpu/nvgpu/common/pmu/pmu.c @@ -466,47 +466,6 @@ exit: return err; } -void nvgpu_pmu_surface_describe(struct gk20a *g, struct nvgpu_mem *mem, - struct flcn_mem_desc_v0 *fb) -{ - fb->address.lo = u64_lo32(mem->gpu_va); - fb->address.hi = u64_hi32(mem->gpu_va); - fb->params = ((u32)mem->size & 0xFFFFFFU); - fb->params |= (GK20A_PMU_DMAIDX_VIRT << 24U); -} - -int nvgpu_pmu_vidmem_surface_alloc(struct gk20a *g, struct nvgpu_mem *mem, - u32 size) -{ - struct mm_gk20a *mm = &g->mm; - struct vm_gk20a *vm = mm->pmu.vm; - int err; - - err = nvgpu_dma_alloc_map_vid(vm, size, mem); - if (err != 0) { - nvgpu_err(g, "memory allocation failed"); - return -ENOMEM; - } - - return 0; -} - -int nvgpu_pmu_sysmem_surface_alloc(struct gk20a *g, struct nvgpu_mem *mem, - u32 size) -{ - struct mm_gk20a *mm = &g->mm; - struct vm_gk20a *vm = mm->pmu.vm; - int err; - - err = nvgpu_dma_alloc_map_sys(vm, size, mem); - if (err != 0) { - nvgpu_err(g, "failed to allocate memory\n"); - return -ENOMEM; - } - - return 0; -} - struct gk20a *gk20a_from_pmu(struct nvgpu_pmu *pmu) { return pmu->g; @@ -547,10 +506,3 @@ int nvgpu_pmu_lock_release(struct gk20a *g, struct nvgpu_pmu *pmu, return nvgpu_pmu_mutex_release(g, &pmu->mutexes, id, token); } - -void nvgpu_pmu_surface_free(struct gk20a *g, struct nvgpu_mem *mem) -{ - nvgpu_log_fn(g, " "); - - nvgpu_dma_free(g, mem); -} diff --git a/drivers/gpu/nvgpu/common/pmu/pmu_allocator.c b/drivers/gpu/nvgpu/common/pmu/pmu_allocator.c index a7d2bd4a8..c96ff22d8 100644 --- a/drivers/gpu/nvgpu/common/pmu/pmu_allocator.c +++ b/drivers/gpu/nvgpu/common/pmu/pmu_allocator.c @@ -25,6 +25,7 @@ #include #include #include +#include void nvgpu_pmu_dmem_allocator_init(struct gk20a *g, struct nvgpu_pmu *pmu, struct nvgpu_allocator *dmem, @@ -54,3 +55,51 @@ void nvgpu_pmu_dmem_allocator_destroy(struct nvgpu_allocator *dmem) nvgpu_alloc_destroy(dmem); } } + +void nvgpu_pmu_surface_free(struct gk20a *g, struct nvgpu_mem *mem) +{ + if (nvgpu_mem_is_valid(mem)) { + nvgpu_dma_free(g, mem); + } +} + +void nvgpu_pmu_surface_describe(struct gk20a *g, struct nvgpu_mem *mem, + struct flcn_mem_desc_v0 *fb) +{ + fb->address.lo = u64_lo32(mem->gpu_va); + fb->address.hi = u64_hi32(mem->gpu_va); + fb->params = ((u32)mem->size & 0xFFFFFFU); + fb->params |= (GK20A_PMU_DMAIDX_VIRT << 24U); +} + +int nvgpu_pmu_vidmem_surface_alloc(struct gk20a *g, struct nvgpu_mem *mem, + u32 size) +{ + struct mm_gk20a *mm = &g->mm; + struct vm_gk20a *vm = mm->pmu.vm; + int err; + + err = nvgpu_dma_alloc_map_vid(vm, size, mem); + if (err != 0) { + nvgpu_err(g, "memory allocation failed"); + return -ENOMEM; + } + + return 0; +} + +int nvgpu_pmu_sysmem_surface_alloc(struct gk20a *g, struct nvgpu_mem *mem, + u32 size) +{ + struct mm_gk20a *mm = &g->mm; + struct vm_gk20a *vm = mm->pmu.vm; + int err; + + err = nvgpu_dma_alloc_map_sys(vm, size, mem); + if (err != 0) { + nvgpu_err(g, "failed to allocate memory\n"); + return -ENOMEM; + } + + return 0; +} diff --git a/drivers/gpu/nvgpu/include/nvgpu/pmu.h b/drivers/gpu/nvgpu/include/nvgpu/pmu.h index 0676e8225..1e1ea3f51 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/pmu.h +++ b/drivers/gpu/nvgpu/include/nvgpu/pmu.h @@ -260,15 +260,6 @@ int nvgpu_pmu_destroy(struct gk20a *g); int nvgpu_pmu_super_surface_alloc(struct gk20a *g, struct nvgpu_mem *mem_surface, u32 size); -/* NVGPU-PMU MEM alloc */ -void nvgpu_pmu_surface_free(struct gk20a *g, struct nvgpu_mem *mem); -void nvgpu_pmu_surface_describe(struct gk20a *g, struct nvgpu_mem *mem, - struct flcn_mem_desc_v0 *fb); -int nvgpu_pmu_vidmem_surface_alloc(struct gk20a *g, struct nvgpu_mem *mem, - u32 size); -int nvgpu_pmu_sysmem_surface_alloc(struct gk20a *g, struct nvgpu_mem *mem, - u32 size); - int nvgpu_early_init_pmu_sw(struct gk20a *g, struct nvgpu_pmu *pmu); /* PMU reset */ diff --git a/drivers/gpu/nvgpu/include/nvgpu/pmu/allocator.h b/drivers/gpu/nvgpu/include/nvgpu/pmu/allocator.h index 465e26780..b70fa787b 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/pmu/allocator.h +++ b/drivers/gpu/nvgpu/include/nvgpu/pmu/allocator.h @@ -23,13 +23,25 @@ #ifndef NVGPU_PMU_ALLOCATOR_H #define NVGPU_PMU_ALLOCATOR_H +#include + struct gk20a; struct nvgpu_pmu; +struct nvgpu_mem; struct nvgpu_allocator; union pmu_init_msg_pmu; +struct flcn_mem_desc_v0; void nvgpu_pmu_dmem_allocator_init(struct gk20a *g, struct nvgpu_pmu *pmu, struct nvgpu_allocator *dmem, union pmu_init_msg_pmu *init); void nvgpu_pmu_dmem_allocator_destroy(struct nvgpu_allocator *dmem); + +void nvgpu_pmu_surface_free(struct gk20a *g, struct nvgpu_mem *mem); +void nvgpu_pmu_surface_describe(struct gk20a *g, struct nvgpu_mem *mem, + struct flcn_mem_desc_v0 *fb); +int nvgpu_pmu_vidmem_surface_alloc(struct gk20a *g, struct nvgpu_mem *mem, + u32 size); +int nvgpu_pmu_sysmem_surface_alloc(struct gk20a *g, struct nvgpu_mem *mem, + u32 size); #endif /* NVGPU_PMU_ALLOCATOR_H */