summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b/mm_gm20b.c
diff options
context:
space:
mode:
authorRichard Zhao <rizhao@nvidia.com>2015-11-16 13:26:23 -0500
committerVladislav Buzov <vbuzov@nvidia.com>2015-11-23 17:31:02 -0500
commit1246629c19485d9a9e6fc2c2e7d1f86f65b9516d (patch)
treeb17a44c7d47ffe20ef0d6e4e6bec8acbec9ba5ad /drivers/gpu/nvgpu/gm20b/mm_gm20b.c
parent8ec63298789a0912b9cbd90ee47c76f0701f0dca (diff)
gpu: nvgpu: abstract set mmu debug mode
Add new operaton g->ops.mm.set_debug_mode and let other places that set debug mode call this callback. It's preparing for adding vgpu set mmu debug mode hook. JIRA VFND-1005 Bug 1594604 Change-Id: I1d227a0c0f96adb0035ae16ae1f4fbfa739bf0a7 Signed-off-by: Richard Zhao <rizhao@nvidia.com> Reviewed-on: http://git-master/r/833497 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Vladislav Buzov <vbuzov@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b/mm_gm20b.c')
-rw-r--r--drivers/gpu/nvgpu/gm20b/mm_gm20b.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/mm_gm20b.c b/drivers/gpu/nvgpu/gm20b/mm_gm20b.c
index 3d75a631..9fdd860b 100644
--- a/drivers/gpu/nvgpu/gm20b/mm_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/mm_gm20b.c
@@ -78,6 +78,31 @@ static bool gm20b_mm_mmu_debug_mode_enabled(struct gk20a *g)
78 gr_gpcs_pri_mmu_debug_ctrl_debug_enabled_v(); 78 gr_gpcs_pri_mmu_debug_ctrl_debug_enabled_v();
79} 79}
80 80
81static void gm20b_mm_mmu_set_debug_mode(struct gk20a *g, bool enable)
82{
83 u32 reg_val, fb_debug_ctrl, gpc_debug_ctrl;
84
85 if (enable) {
86 fb_debug_ctrl = fb_mmu_debug_ctrl_debug_enabled_f();
87 gpc_debug_ctrl = gr_gpcs_pri_mmu_debug_ctrl_debug_enabled_f();
88 g->mmu_debug_ctrl = true;
89 } else {
90 fb_debug_ctrl = fb_mmu_debug_ctrl_debug_disabled_f();
91 gpc_debug_ctrl = gr_gpcs_pri_mmu_debug_ctrl_debug_disabled_f();
92 g->mmu_debug_ctrl = false;
93 }
94
95 reg_val = gk20a_readl(g, fb_mmu_debug_ctrl_r());
96 reg_val = set_field(reg_val,
97 fb_mmu_debug_ctrl_debug_m(), fb_debug_ctrl);
98 gk20a_writel(g, fb_mmu_debug_ctrl_r(), reg_val);
99
100 reg_val = gk20a_readl(g, gr_gpcs_pri_mmu_debug_ctrl_r());
101 reg_val = set_field(reg_val,
102 gr_gpcs_pri_mmu_debug_ctrl_debug_m(), gpc_debug_ctrl);
103 gk20a_writel(g, gr_gpcs_pri_mmu_debug_ctrl_r(), reg_val);
104}
105
81static void gm20b_mm_set_big_page_size(struct gk20a *g, 106static void gm20b_mm_set_big_page_size(struct gk20a *g,
82 void *inst_ptr, int size) 107 void *inst_ptr, int size)
83{ 108{
@@ -112,6 +137,7 @@ void gm20b_init_mm(struct gpu_ops *gops)
112{ 137{
113 gops->mm.support_sparse = gm20b_mm_support_sparse; 138 gops->mm.support_sparse = gm20b_mm_support_sparse;
114 gops->mm.is_debug_mode_enabled = gm20b_mm_mmu_debug_mode_enabled; 139 gops->mm.is_debug_mode_enabled = gm20b_mm_mmu_debug_mode_enabled;
140 gops->mm.set_debug_mode = gm20b_mm_mmu_set_debug_mode;
115 gops->mm.gmmu_map = gk20a_locked_gmmu_map; 141 gops->mm.gmmu_map = gk20a_locked_gmmu_map;
116 gops->mm.gmmu_unmap = gk20a_locked_gmmu_unmap; 142 gops->mm.gmmu_unmap = gk20a_locked_gmmu_unmap;
117 gops->mm.vm_remove = gk20a_vm_remove_support; 143 gops->mm.vm_remove = gk20a_vm_remove_support;