From 9974201d610c7f3cc43e34a9db942da0f71917c4 Mon Sep 17 00:00:00 2001 From: Terje Bergstrom Date: Tue, 31 Mar 2015 14:37:21 -0700 Subject: gpu: nvgpu: Per-SoC compressible page size Define smallest compressible page size per SoC, and use that for determining if a compressible kind should be downgraded to uncompressed. Bug 1605769 Change-Id: I7c9991ba0ae82fe533641f045e506c0b01a10d8b Signed-off-by: Terje Bergstrom Reviewed-on: http://git-master/r/724492 --- drivers/gpu/nvgpu/gk20a/fb_gk20a.c | 6 ++++++ drivers/gpu/nvgpu/gk20a/gk20a.h | 1 + drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 4 ++-- drivers/gpu/nvgpu/gm20b/fb_gm20b.c | 6 ++++++ 4 files changed, 15 insertions(+), 2 deletions(-) (limited to 'drivers/gpu') diff --git a/drivers/gpu/nvgpu/gk20a/fb_gk20a.c b/drivers/gpu/nvgpu/gk20a/fb_gk20a.c index b73be02a..35551939 100644 --- a/drivers/gpu/nvgpu/gk20a/fb_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fb_gk20a.c @@ -55,11 +55,17 @@ static int gk20a_fb_compression_page_size(struct gk20a *g) return SZ_128K; } +static int gk20a_fb_compressible_page_size(struct gk20a *g) +{ + return SZ_64K; +} + void gk20a_init_fb(struct gpu_ops *gops) { gops->fb.reset = fb_gk20a_reset; gops->fb.set_mmu_page_size = gk20a_fb_set_mmu_page_size; gops->fb.compression_page_size = gk20a_fb_compression_page_size; + gops->fb.compressible_page_size = gk20a_fb_compressible_page_size; gk20a_init_uncompressed_kind_map(); gk20a_init_kind_attr(); } diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 19c9e786..2b905dcc 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -182,6 +182,7 @@ struct gpu_ops { void (*init_kind_attr)(struct gk20a *g); void (*set_mmu_page_size)(struct gk20a *g); int (*compression_page_size)(struct gk20a *g); + int (*compressible_page_size)(struct gk20a *g); void (*dump_vpr_wpr_info)(struct gk20a *g); } fb; struct { diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 8ed9d0aa..d8dacad8 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c @@ -1001,8 +1001,8 @@ static int setup_buffer_kind_and_compression(struct vm_gk20a *vm, } } /* comptags only supported for suitable kinds, 128KB pagesize */ - if (unlikely(kind_compressible && - (vm->gmmu_page_sizes[pgsz_idx] != vm->big_page_size))) { + if (kind_compressible && + vm->gmmu_page_sizes[pgsz_idx] < g->ops.fb.compressible_page_size(g)) { /* gk20a_warn(d, "comptags specified" " but pagesize being used doesn't support it");*/ diff --git a/drivers/gpu/nvgpu/gm20b/fb_gm20b.c b/drivers/gpu/nvgpu/gm20b/fb_gm20b.c index 666d27e9..746ed42f 100644 --- a/drivers/gpu/nvgpu/gm20b/fb_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/fb_gm20b.c @@ -95,6 +95,11 @@ static int gm20b_fb_compression_page_size(struct gk20a *g) return SZ_128K; } +static int gm20b_fb_compressible_page_size(struct gk20a *g) +{ + return SZ_64K; +} + static void gm20b_fb_dump_vpr_wpr_info(struct gk20a *g) { u32 val; @@ -129,6 +134,7 @@ void gm20b_init_fb(struct gpu_ops *gops) gops->fb.init_fs_state = fb_gm20b_init_fs_state; gops->fb.set_mmu_page_size = gm20b_fb_set_mmu_page_size; gops->fb.compression_page_size = gm20b_fb_compression_page_size; + gops->fb.compressible_page_size = gm20b_fb_compressible_page_size; gops->fb.dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info; gm20b_init_uncompressed_kind_map(); gm20b_init_kind_attr(); -- cgit v1.2.2