summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2015-03-31 17:37:21 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-04-04 22:17:37 -0400
commit9974201d610c7f3cc43e34a9db942da0f71917c4 (patch)
tree024849097e38631be2d0602b08c86e5afc7b63e8 /drivers/gpu
parent9f4405aeb532692b215337985fb371e859817a88 (diff)
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 <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/724492
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/nvgpu/gk20a/fb_gk20a.c6
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.c4
-rw-r--r--drivers/gpu/nvgpu/gm20b/fb_gm20b.c6
4 files changed, 15 insertions, 2 deletions
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)
55 return SZ_128K; 55 return SZ_128K;
56} 56}
57 57
58static int gk20a_fb_compressible_page_size(struct gk20a *g)
59{
60 return SZ_64K;
61}
62
58void gk20a_init_fb(struct gpu_ops *gops) 63void gk20a_init_fb(struct gpu_ops *gops)
59{ 64{
60 gops->fb.reset = fb_gk20a_reset; 65 gops->fb.reset = fb_gk20a_reset;
61 gops->fb.set_mmu_page_size = gk20a_fb_set_mmu_page_size; 66 gops->fb.set_mmu_page_size = gk20a_fb_set_mmu_page_size;
62 gops->fb.compression_page_size = gk20a_fb_compression_page_size; 67 gops->fb.compression_page_size = gk20a_fb_compression_page_size;
68 gops->fb.compressible_page_size = gk20a_fb_compressible_page_size;
63 gk20a_init_uncompressed_kind_map(); 69 gk20a_init_uncompressed_kind_map();
64 gk20a_init_kind_attr(); 70 gk20a_init_kind_attr();
65} 71}
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 {
182 void (*init_kind_attr)(struct gk20a *g); 182 void (*init_kind_attr)(struct gk20a *g);
183 void (*set_mmu_page_size)(struct gk20a *g); 183 void (*set_mmu_page_size)(struct gk20a *g);
184 int (*compression_page_size)(struct gk20a *g); 184 int (*compression_page_size)(struct gk20a *g);
185 int (*compressible_page_size)(struct gk20a *g);
185 void (*dump_vpr_wpr_info)(struct gk20a *g); 186 void (*dump_vpr_wpr_info)(struct gk20a *g);
186 } fb; 187 } fb;
187 struct { 188 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,
1001 } 1001 }
1002 } 1002 }
1003 /* comptags only supported for suitable kinds, 128KB pagesize */ 1003 /* comptags only supported for suitable kinds, 128KB pagesize */
1004 if (unlikely(kind_compressible && 1004 if (kind_compressible &&
1005 (vm->gmmu_page_sizes[pgsz_idx] != vm->big_page_size))) { 1005 vm->gmmu_page_sizes[pgsz_idx] < g->ops.fb.compressible_page_size(g)) {
1006 /* 1006 /*
1007 gk20a_warn(d, "comptags specified" 1007 gk20a_warn(d, "comptags specified"
1008 " but pagesize being used doesn't support it");*/ 1008 " 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)
95 return SZ_128K; 95 return SZ_128K;
96} 96}
97 97
98static int gm20b_fb_compressible_page_size(struct gk20a *g)
99{
100 return SZ_64K;
101}
102
98static void gm20b_fb_dump_vpr_wpr_info(struct gk20a *g) 103static void gm20b_fb_dump_vpr_wpr_info(struct gk20a *g)
99{ 104{
100 u32 val; 105 u32 val;
@@ -129,6 +134,7 @@ void gm20b_init_fb(struct gpu_ops *gops)
129 gops->fb.init_fs_state = fb_gm20b_init_fs_state; 134 gops->fb.init_fs_state = fb_gm20b_init_fs_state;
130 gops->fb.set_mmu_page_size = gm20b_fb_set_mmu_page_size; 135 gops->fb.set_mmu_page_size = gm20b_fb_set_mmu_page_size;
131 gops->fb.compression_page_size = gm20b_fb_compression_page_size; 136 gops->fb.compression_page_size = gm20b_fb_compression_page_size;
137 gops->fb.compressible_page_size = gm20b_fb_compressible_page_size;
132 gops->fb.dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info; 138 gops->fb.dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info;
133 gm20b_init_uncompressed_kind_map(); 139 gm20b_init_uncompressed_kind_map();
134 gm20b_init_kind_attr(); 140 gm20b_init_kind_attr();