summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/fb_gk20a.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2014-10-16 08:15:11 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:11:46 -0400
commit2eb6dcb4694c8b83e22c50d9fd4d3fdd85b93c46 (patch)
tree0a2d10c9873b81fd6a6821959874d4345cc6bfad /drivers/gpu/nvgpu/gk20a/fb_gk20a.c
parentecc6f27fd13e7560d124faf67d114b93d47b73de (diff)
gpu: nvgpu: Implement 64k large page support
Implement support for 64kB large page size. Add an API to create an address space via IOCTL so that we can accept flags, and assign one flag for enabling 64kB large page size. Also adds APIs to set per-context large page size. This is possible only on Maxwell, so return error if caller tries to set large page size on Kepler. Default large page size is still 128kB. Change-Id: I20b51c8f6d4a984acae8411ace3de9000c78e82f Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/fb_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/fb_gk20a.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fb_gk20a.c b/drivers/gpu/nvgpu/gk20a/fb_gk20a.c
index 52f2db4d..d5b3fd87 100644
--- a/drivers/gpu/nvgpu/gk20a/fb_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/fb_gk20a.c
@@ -18,6 +18,7 @@
18#include "gk20a.h" 18#include "gk20a.h"
19#include "kind_gk20a.h" 19#include "kind_gk20a.h"
20#include "hw_mc_gk20a.h" 20#include "hw_mc_gk20a.h"
21#include "hw_fb_gk20a.h"
21 22
22static void fb_gk20a_reset(struct gk20a *g) 23static void fb_gk20a_reset(struct gk20a *g)
23{ 24{
@@ -29,9 +30,22 @@ static void fb_gk20a_reset(struct gk20a *g)
29 | mc_enable_hub_enabled_f()); 30 | mc_enable_hub_enabled_f());
30} 31}
31 32
33static void gk20a_fb_set_mmu_page_size(struct gk20a *g)
34{
35 /* set large page size in fb */
36 u32 fb_mmu_ctrl = gk20a_readl(g, fb_mmu_ctrl_r());
37
38 fb_mmu_ctrl = (fb_mmu_ctrl &
39 ~fb_mmu_ctrl_vm_pg_size_f(~0x0)) |
40 fb_mmu_ctrl_vm_pg_size_128kb_f();
41
42 gk20a_writel(g, fb_mmu_ctrl_r(), fb_mmu_ctrl);
43}
44
32void gk20a_init_fb(struct gpu_ops *gops) 45void gk20a_init_fb(struct gpu_ops *gops)
33{ 46{
34 gops->fb.reset = fb_gk20a_reset; 47 gops->fb.reset = fb_gk20a_reset;
48 gops->fb.set_mmu_page_size = gk20a_fb_set_mmu_page_size;
35 gk20a_init_uncompressed_kind_map(); 49 gk20a_init_uncompressed_kind_map();
36 gk20a_init_kind_attr(); 50 gk20a_init_kind_attr();
37} 51}