summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b/fb_gm20b.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2015-12-17 13:12:21 -0500
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-01-05 10:50:02 -0500
commit9812bd5eea1c5d2c97149d64c5ccf81eae75fda1 (patch)
tree5b9c006b9c94d8c6920fc779f71a9bf36db43766 /drivers/gpu/nvgpu/gm20b/fb_gm20b.c
parentc9d6a79a4ce28744bc1c68f8c16c28d453b91a51 (diff)
gpu: nvgpu: Control comptagline assignment from kernel
On Maxwell comptaglines are assigned per 128k, but preferred big page size for graphics is 64k. Bit 16 of GPU VA is used for determining which half of comptagline is used. This creates problems if user space wants to map a page multiple times and to arbitrary GPU VA. In one mapping the page might be mapped to lower half of 128k comptagline, and in another mapping the page might be mapped to upper half. Turn on mode where MSB of comptagline in PTE is used instead of bit 16 for determining the comptagline lower/upper half selection. Bug 1704834 Change-Id: If87e8f6ac0fc9c5624e80fa1ba2ceeb02781355b Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/924322 Reviewed-by: Alex Waterman <alexw@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b/fb_gm20b.c')
-rw-r--r--drivers/gpu/nvgpu/gm20b/fb_gm20b.c11
1 files changed, 11 insertions, 0 deletions
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
94static 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
94static int gm20b_fb_compression_page_size(struct gk20a *g) 104static 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;