diff --git a/drivers/gpu/nvgpu/gk20a/fb_gk20a.c b/drivers/gpu/nvgpu/gk20a/fb_gk20a.c index b73be02a1..355519394 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 19c9e7866..2b905dcc8 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 8ed9d0aac..d8dacad81 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 666d27e98..746ed42fa 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();