From 577c69322eeafe5c5cf20c3038dc7b700226c202 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Thu, 23 Aug 2018 16:46:23 +0530 Subject: gpu: nvgpu: increase bootstrap vidmem carveout to 256M We right now have a bootstrap carveout in vidmem of size 16M and having base address at {total_vidmem_size - 256M} So this design divides rest of the vidmem into two chunks And the size of bootstrap carveout is also small and insufficient for vidmem allocations during boot Hence increase the bootstrap vidmem carevout to 256M and move it to the end of entire vidmem Rename the carevout name for wpr_co to bootstrap_co as it is more appropriate Also update __nvgpu_vidmem_do_clear_all() to clear only one chunk of vidmem instead of two Bug 2180284 Jira NVGPUT-12 Change-Id: I9c8d62bcd705c7112385df3d4f714e0190b48e17 Signed-off-by: Deepak Nibade Reviewed-on: https://git-master.nvidia.com/r/1805466 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom Reviewed-by: Seshendra Gadagottu Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/mm/vidmem.c | 41 +++++++++++------------------------- 1 file changed, 12 insertions(+), 29 deletions(-) (limited to 'drivers/gpu/nvgpu/common/mm') diff --git a/drivers/gpu/nvgpu/common/mm/vidmem.c b/drivers/gpu/nvgpu/common/mm/vidmem.c index 28a46ff0..290d6f99 100644 --- a/drivers/gpu/nvgpu/common/mm/vidmem.c +++ b/drivers/gpu/nvgpu/common/mm/vidmem.c @@ -86,7 +86,6 @@ static int __nvgpu_vidmem_do_clear_all(struct gk20a *g) { struct mm_gk20a *mm = &g->mm; struct gk20a_fence *gk20a_fence_out = NULL; - u64 region2_base = 0; int err = 0; if (mm->vidmem.ce_ctx_id == (u32)~0) @@ -103,28 +102,10 @@ static int __nvgpu_vidmem_do_clear_all(struct gk20a *g) NVGPU_CE_DST_LOCATION_LOCAL_FB, NVGPU_CE_MEMSET, 0, - NULL); - if (err) { - nvgpu_err(g, - "Failed to clear vidmem region 1 : %d", err); - return err; - } - - region2_base = mm->vidmem.bootstrap_base + mm->vidmem.bootstrap_size; - - err = gk20a_ce_execute_ops(g, - mm->vidmem.ce_ctx_id, - 0, - region2_base, - mm->vidmem.size - region2_base, - 0x00000000, - NVGPU_CE_DST_LOCATION_LOCAL_FB, - NVGPU_CE_MEMSET, - 0, &gk20a_fence_out); if (err) { nvgpu_err(g, - "Failed to clear vidmem region 2 : %d", err); + "Failed to clear vidmem : %d", err); return err; } @@ -304,13 +285,13 @@ static int nvgpu_vidmem_clear_pending_allocs_thr(void *mm_ptr) int nvgpu_vidmem_init(struct mm_gk20a *mm) { struct gk20a *g = mm->g; - u64 bootstrap_base, bootstrap_size, base; + u64 bootstrap_base, base; + u64 bootstrap_size = SZ_256M; u64 default_page_size = SZ_64K; size_t size; int err; - - static struct nvgpu_alloc_carveout wpr_co = - NVGPU_CARVEOUT("wpr-region", 0, SZ_16M); + static struct nvgpu_alloc_carveout bootstrap_co = + NVGPU_CARVEOUT("bootstrap-region", 0, 0); size = g->ops.mm.get_vidmem_size ? g->ops.mm.get_vidmem_size(g) : 0; @@ -319,9 +300,10 @@ int nvgpu_vidmem_init(struct mm_gk20a *mm) vidmem_dbg(g, "init begin"); - wpr_co.base = size - SZ_256M; - bootstrap_base = wpr_co.base; - bootstrap_size = SZ_16M; + bootstrap_co.base = size - bootstrap_size; + bootstrap_co.length = bootstrap_size; + + bootstrap_base = bootstrap_co.base; base = default_page_size; /* @@ -346,7 +328,7 @@ int nvgpu_vidmem_init(struct mm_gk20a *mm) } /* Reserve bootstrap region in vidmem allocator */ - nvgpu_alloc_reserve_carveout(&g->mm.vidmem.allocator, &wpr_co); + nvgpu_alloc_reserve_carveout(&g->mm.vidmem.allocator, &bootstrap_co); mm->vidmem.base = base; mm->vidmem.size = size - base; @@ -388,7 +370,8 @@ int nvgpu_vidmem_init(struct mm_gk20a *mm) mm->vidmem.bootstrap_base + mm->vidmem.bootstrap_size); vidmem_dbg(g, "VIDMEM carveouts:"); vidmem_dbg(g, " 0x%-10llx -> 0x%-10llx %s", - wpr_co.base, wpr_co.base + wpr_co.length, wpr_co.name); + bootstrap_co.base, bootstrap_co.base + bootstrap_co.length, + bootstrap_co.name); return 0; -- cgit v1.2.2