diff options
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/hw_gmmu_gk20a.h | 6 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 9 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.h | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/fb_gm20b.c | 11 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/hw_fb_gm20b.h | 8 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/hw_gmmu_gm20b.h | 6 |
7 files changed, 40 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index d3dc03e7..6f2258e9 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h | |||
@@ -197,6 +197,7 @@ struct gpu_ops { | |||
197 | void (*init_uncompressed_kind_map)(struct gk20a *g); | 197 | void (*init_uncompressed_kind_map)(struct gk20a *g); |
198 | void (*init_kind_attr)(struct gk20a *g); | 198 | void (*init_kind_attr)(struct gk20a *g); |
199 | void (*set_mmu_page_size)(struct gk20a *g); | 199 | void (*set_mmu_page_size)(struct gk20a *g); |
200 | bool (*set_use_full_comp_tag_line)(struct gk20a *g); | ||
200 | int (*compression_page_size)(struct gk20a *g); | 201 | int (*compression_page_size)(struct gk20a *g); |
201 | int (*compressible_page_size)(struct gk20a *g); | 202 | int (*compressible_page_size)(struct gk20a *g); |
202 | void (*dump_vpr_wpr_info)(struct gk20a *g); | 203 | void (*dump_vpr_wpr_info)(struct gk20a *g); |
diff --git a/drivers/gpu/nvgpu/gk20a/hw_gmmu_gk20a.h b/drivers/gpu/nvgpu/gk20a/hw_gmmu_gk20a.h index 19e44382..d92f0d58 100644 --- a/drivers/gpu/nvgpu/gk20a/hw_gmmu_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/hw_gmmu_gk20a.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2012-2014, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2012-2015, NVIDIA CORPORATION. All rights reserved. |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
5 | * under the terms and conditions of the GNU General Public License, | 5 | * under the terms and conditions of the GNU General Public License, |
@@ -210,6 +210,10 @@ static inline u32 gmmu_pte_read_disable_true_f(void) | |||
210 | { | 210 | { |
211 | return 0x40000000; | 211 | return 0x40000000; |
212 | } | 212 | } |
213 | static inline u32 gmmu_pte_comptagline_s(void) | ||
214 | { | ||
215 | return 17; | ||
216 | } | ||
213 | static inline u32 gmmu_pte_comptagline_f(u32 v) | 217 | static inline u32 gmmu_pte_comptagline_f(u32 v) |
214 | { | 218 | { |
215 | return (v & 0x1ffff) << 12; | 219 | return (v & 0x1ffff) << 12; |
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 6c4637e8..76c33512 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |||
@@ -414,6 +414,10 @@ int gk20a_init_mm_setup_hw(struct gk20a *g) | |||
414 | gk20a_dbg_fn(""); | 414 | gk20a_dbg_fn(""); |
415 | 415 | ||
416 | g->ops.fb.set_mmu_page_size(g); | 416 | g->ops.fb.set_mmu_page_size(g); |
417 | if (g->ops.fb.set_use_full_comp_tag_line) | ||
418 | mm->use_full_comp_tag_line = | ||
419 | g->ops.fb.set_use_full_comp_tag_line(g); | ||
420 | |||
417 | 421 | ||
418 | inst_pa = (u32)(inst_pa >> bar1_instance_block_shift_gk20a()); | 422 | inst_pa = (u32)(inst_pa >> bar1_instance_block_shift_gk20a()); |
419 | gk20a_dbg_info("bar1 inst block ptr: 0x%08x", (u32)inst_pa); | 423 | gk20a_dbg_info("bar1 inst block ptr: 0x%08x", (u32)inst_pa); |
@@ -2327,6 +2331,11 @@ static int update_gmmu_pte_locked(struct vm_gk20a *vm, | |||
2327 | gmmu_pte_kind_f(kind_v) | | 2331 | gmmu_pte_kind_f(kind_v) | |
2328 | gmmu_pte_comptagline_f((u32)(*ctag / ctag_granularity)); | 2332 | gmmu_pte_comptagline_f((u32)(*ctag / ctag_granularity)); |
2329 | 2333 | ||
2334 | if (vm->mm->use_full_comp_tag_line && *iova & 0x10000) { | ||
2335 | pte_w[1] |= gmmu_pte_comptagline_f( | ||
2336 | 1 << (gmmu_pte_comptagline_s() - 1)); | ||
2337 | } | ||
2338 | |||
2330 | if (rw_flag == gk20a_mem_flag_read_only) { | 2339 | if (rw_flag == gk20a_mem_flag_read_only) { |
2331 | pte_w[0] |= gmmu_pte_read_only_true_f(); | 2340 | pte_w[0] |= gmmu_pte_read_only_true_f(); |
2332 | pte_w[1] |= | 2341 | pte_w[1] |= |
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h index ac55e988..5ce931c3 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h | |||
@@ -329,6 +329,7 @@ struct mm_gk20a { | |||
329 | void (*remove_support)(struct mm_gk20a *mm); | 329 | void (*remove_support)(struct mm_gk20a *mm); |
330 | bool sw_ready; | 330 | bool sw_ready; |
331 | int physical_bits; | 331 | int physical_bits; |
332 | bool use_full_comp_tag_line; | ||
332 | #ifdef CONFIG_DEBUG_FS | 333 | #ifdef CONFIG_DEBUG_FS |
333 | u32 ltc_enabled; | 334 | u32 ltc_enabled; |
334 | u32 ltc_enabled_debug; | 335 | u32 ltc_enabled_debug; |
diff --git a/drivers/gpu/nvgpu/gm20b/fb_gm20b.c b/drivers/gpu/nvgpu/gm20b/fb_gm20b.c index 3d4604c5..c65cd450 100644 --- a/drivers/gpu/nvgpu/gm20b/fb_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/fb_gm20b.c | |||
@@ -91,6 +91,16 @@ static void gm20b_fb_set_mmu_page_size(struct gk20a *g) | |||
91 | gk20a_writel(g, fb_mmu_ctrl_r(), fb_mmu_ctrl); | 91 | gk20a_writel(g, fb_mmu_ctrl_r(), fb_mmu_ctrl); |
92 | } | 92 | } |
93 | 93 | ||
94 | static bool gm20b_fb_set_use_full_comp_tag_line(struct gk20a *g) | ||
95 | { | ||
96 | /* set large page size in fb */ | ||
97 | u32 fb_mmu_ctrl = gk20a_readl(g, fb_mmu_ctrl_r()); | ||
98 | fb_mmu_ctrl |= fb_mmu_ctrl_use_full_comp_tag_line_true_f(); | ||
99 | gk20a_writel(g, fb_mmu_ctrl_r(), fb_mmu_ctrl); | ||
100 | |||
101 | return true; | ||
102 | } | ||
103 | |||
94 | static int gm20b_fb_compression_page_size(struct gk20a *g) | 104 | static int gm20b_fb_compression_page_size(struct gk20a *g) |
95 | { | 105 | { |
96 | return SZ_128K; | 106 | return SZ_128K; |
@@ -135,6 +145,7 @@ void gm20b_init_fb(struct gpu_ops *gops) | |||
135 | gops->fb.reset = fb_gk20a_reset; | 145 | gops->fb.reset = fb_gk20a_reset; |
136 | gops->fb.init_fs_state = fb_gm20b_init_fs_state; | 146 | gops->fb.init_fs_state = fb_gm20b_init_fs_state; |
137 | gops->fb.set_mmu_page_size = gm20b_fb_set_mmu_page_size; | 147 | gops->fb.set_mmu_page_size = gm20b_fb_set_mmu_page_size; |
148 | gops->fb.set_use_full_comp_tag_line = gm20b_fb_set_use_full_comp_tag_line; | ||
138 | gops->fb.compression_page_size = gm20b_fb_compression_page_size; | 149 | gops->fb.compression_page_size = gm20b_fb_compression_page_size; |
139 | gops->fb.compressible_page_size = gm20b_fb_compressible_page_size; | 150 | gops->fb.compressible_page_size = gm20b_fb_compressible_page_size; |
140 | gops->fb.dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info; | 151 | gops->fb.dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info; |
diff --git a/drivers/gpu/nvgpu/gm20b/hw_fb_gm20b.h b/drivers/gpu/nvgpu/gm20b/hw_fb_gm20b.h index 5ec4a46e..d68f6479 100644 --- a/drivers/gpu/nvgpu/gm20b/hw_fb_gm20b.h +++ b/drivers/gpu/nvgpu/gm20b/hw_fb_gm20b.h | |||
@@ -94,6 +94,14 @@ static inline u32 fb_mmu_ctrl_use_pdb_big_page_size_false_f(void) | |||
94 | { | 94 | { |
95 | return 0x0; | 95 | return 0x0; |
96 | } | 96 | } |
97 | static inline u32 fb_mmu_ctrl_use_full_comp_tag_line_v(u32 r) | ||
98 | { | ||
99 | return (r >> 12) & 0x1; | ||
100 | } | ||
101 | static inline u32 fb_mmu_ctrl_use_full_comp_tag_line_true_f(void) | ||
102 | { | ||
103 | return 0x1000; | ||
104 | } | ||
97 | static inline u32 fb_priv_mmu_phy_secure_r(void) | 105 | static inline u32 fb_priv_mmu_phy_secure_r(void) |
98 | { | 106 | { |
99 | return 0x00100ce4; | 107 | return 0x00100ce4; |
diff --git a/drivers/gpu/nvgpu/gm20b/hw_gmmu_gm20b.h b/drivers/gpu/nvgpu/gm20b/hw_gmmu_gm20b.h index 32b65912..572f727f 100644 --- a/drivers/gpu/nvgpu/gm20b/hw_gmmu_gm20b.h +++ b/drivers/gpu/nvgpu/gm20b/hw_gmmu_gm20b.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved. |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
5 | * under the terms and conditions of the GNU General Public License, | 5 | * under the terms and conditions of the GNU General Public License, |
@@ -210,6 +210,10 @@ static inline u32 gmmu_pte_read_disable_true_f(void) | |||
210 | { | 210 | { |
211 | return 0x40000000; | 211 | return 0x40000000; |
212 | } | 212 | } |
213 | static inline u32 gmmu_pte_comptagline_s(void) | ||
214 | { | ||
215 | return 17; | ||
216 | } | ||
213 | static inline u32 gmmu_pte_comptagline_f(u32 v) | 217 | static inline u32 gmmu_pte_comptagline_f(u32 v) |
214 | { | 218 | { |
215 | return (v & 0x1ffff) << 12; | 219 | return (v & 0x1ffff) << 12; |