summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2015-01-19 17:50:57 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-04-04 21:04:45 -0400
commit4aef10c9507a19fb288936b88b0faeb62a520817 (patch)
tree0c773b9c18e3c9d318783c0cd575b6bb94f2bf30 /drivers/gpu/nvgpu/gm20b
parentf4883ab97af69610c0507c245f69eef00d203a28 (diff)
gpu: nvgpu: Set compression page per SoC
Compression page size varies depending on architecture. Make it 129kB on gk20a and gm20b. Also export some common functions from gm20b. Bug 1592495 Change-Id: Ifb1c5b15d25fa961dab097021080055fc385fecd Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/673790
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b')
-rw-r--r--drivers/gpu/nvgpu/gm20b/fb_gm20b.c6
-rw-r--r--drivers/gpu/nvgpu/gm20b/ltc_gm20b.c14
-rw-r--r--drivers/gpu/nvgpu/gm20b/ltc_gm20b.h7
3 files changed, 20 insertions, 7 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/fb_gm20b.c b/drivers/gpu/nvgpu/gm20b/fb_gm20b.c
index 7cdd776e..deef7896 100644
--- a/drivers/gpu/nvgpu/gm20b/fb_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/fb_gm20b.c
@@ -90,10 +90,16 @@ static void gm20b_fb_set_mmu_page_size(struct gk20a *g)
90 gk20a_writel(g, fb_mmu_ctrl_r(), fb_mmu_ctrl); 90 gk20a_writel(g, fb_mmu_ctrl_r(), fb_mmu_ctrl);
91} 91}
92 92
93static int gm20b_fb_compression_page_size(struct gk20a *g)
94{
95 return SZ_128K;
96}
97
93void gm20b_init_fb(struct gpu_ops *gops) 98void gm20b_init_fb(struct gpu_ops *gops)
94{ 99{
95 gops->fb.init_fs_state = fb_gm20b_init_fs_state; 100 gops->fb.init_fs_state = fb_gm20b_init_fs_state;
96 gops->fb.set_mmu_page_size = gm20b_fb_set_mmu_page_size; 101 gops->fb.set_mmu_page_size = gm20b_fb_set_mmu_page_size;
102 gops->fb.compression_page_size = gm20b_fb_compression_page_size;
97 gm20b_init_uncompressed_kind_map(); 103 gm20b_init_uncompressed_kind_map();
98 gm20b_init_kind_attr(); 104 gm20b_init_kind_attr();
99} 105}
diff --git a/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c b/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
index fe2e06d5..0a0efe41 100644
--- a/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
@@ -101,8 +101,8 @@ static int gm20b_ltc_init_comptags(struct gk20a *g, struct gr_gk20a *gr)
101 return 0; 101 return 0;
102} 102}
103 103
104static int gm20b_ltc_cbc_ctrl(struct gk20a *g, enum gk20a_cbc_op op, 104int gm20b_ltc_cbc_ctrl(struct gk20a *g, enum gk20a_cbc_op op,
105 u32 min, u32 max) 105 u32 min, u32 max)
106{ 106{
107 int err = 0; 107 int err = 0;
108 struct gr_gk20a *gr = &g->gr; 108 struct gr_gk20a *gr = &g->gr;
@@ -170,7 +170,7 @@ out:
170 return 0; 170 return 0;
171} 171}
172 172
173static void gm20b_ltc_init_fs_state(struct gk20a *g) 173void gm20b_ltc_init_fs_state(struct gk20a *g)
174{ 174{
175 u32 reg; 175 u32 reg;
176 176
@@ -196,7 +196,7 @@ static void gm20b_ltc_init_fs_state(struct gk20a *g)
196 gk20a_writel(g, ltc_ltcs_ltss_intr_r(), reg); 196 gk20a_writel(g, ltc_ltcs_ltss_intr_r(), reg);
197} 197}
198 198
199static void gm20b_ltc_isr(struct gk20a *g) 199void gm20b_ltc_isr(struct gk20a *g)
200{ 200{
201 u32 mc_intr, ltc_intr; 201 u32 mc_intr, ltc_intr;
202 int ltc, slice; 202 int ltc, slice;
@@ -221,7 +221,7 @@ static void gm20b_ltc_isr(struct gk20a *g)
221 } 221 }
222} 222}
223 223
224static void gm20b_ltc_g_elpg_flush_locked(struct gk20a *g) 224void gm20b_ltc_g_elpg_flush_locked(struct gk20a *g)
225{ 225{
226 u32 data; 226 u32 data;
227 bool done[g->ltc_count]; 227 bool done[g->ltc_count];
@@ -265,7 +265,7 @@ static void gm20b_ltc_g_elpg_flush_locked(struct gk20a *g)
265 "g_elpg_flush too many retries"); 265 "g_elpg_flush too many retries");
266} 266}
267 267
268static u32 gm20b_ltc_cbc_fix_config(struct gk20a *g, int base) 268u32 gm20b_ltc_cbc_fix_config(struct gk20a *g, int base)
269{ 269{
270 u32 val = gk20a_readl(g, ltc_ltcs_ltss_cbc_num_active_ltcs_r()); 270 u32 val = gk20a_readl(g, ltc_ltcs_ltss_cbc_num_active_ltcs_r());
271 if (val == 2) { 271 if (val == 2) {
@@ -281,7 +281,7 @@ static u32 gm20b_ltc_cbc_fix_config(struct gk20a *g, int base)
281/* 281/*
282 * Performs a full flush of the L2 cache. 282 * Performs a full flush of the L2 cache.
283 */ 283 */
284static void gm20b_flush_ltc(struct gk20a *g) 284void gm20b_flush_ltc(struct gk20a *g)
285{ 285{
286 u32 op_pending; 286 u32 op_pending;
287 unsigned long now, timeout; 287 unsigned long now, timeout;
diff --git a/drivers/gpu/nvgpu/gm20b/ltc_gm20b.h b/drivers/gpu/nvgpu/gm20b/ltc_gm20b.h
index c7524264..288e193a 100644
--- a/drivers/gpu/nvgpu/gm20b/ltc_gm20b.h
+++ b/drivers/gpu/nvgpu/gm20b/ltc_gm20b.h
@@ -18,4 +18,11 @@
18struct gpu_ops; 18struct gpu_ops;
19 19
20void gm20b_init_ltc(struct gpu_ops *gops); 20void gm20b_init_ltc(struct gpu_ops *gops);
21void gm20b_ltc_init_fs_state(struct gk20a *g);
22int gm20b_ltc_cbc_ctrl(struct gk20a *g, enum gk20a_cbc_op op,
23 u32 min, u32 max);
24void gm20b_ltc_g_elpg_flush_locked(struct gk20a *g);
25void gm20b_ltc_isr(struct gk20a *g);
26u32 gm20b_ltc_cbc_fix_config(struct gk20a *g, int base);
27void gm20b_flush_ltc(struct gk20a *g);
21#endif 28#endif