summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b
diff options
context:
space:
mode:
authorsujeet baranwal <sbaranwal@nvidia.com>2015-03-02 18:36:22 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-04-04 21:58:04 -0400
commit895675e1d5790e2361b22edb50d702f7dd9a8edd (patch)
treedbe3586cec5351fd2c2eb13d91c258e663d73b08 /drivers/gpu/nvgpu/gm20b
parentcf0085ec231246748b34081d2786c29cedcbd706 (diff)
gpu: nvgpu: Removal of regops from CUDA driver
The current CUDA drivers have been using the regops to directly accessing the GPU registers from user space through the dbg node. This is a security hole and needs to be avoided. The patch alternatively implements the similar functionality in the kernel and provide an ioctl for it. Bug 200083334 Change-Id: Ic5ff5a215cbabe7a46837bc4e15efcceb0df0367 Signed-off-by: sujeet baranwal <sbaranwal@nvidia.com> Reviewed-on: http://git-master/r/711758 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b')
-rw-r--r--drivers/gpu/nvgpu/gm20b/gr_gm20b.c5
-rw-r--r--drivers/gpu/nvgpu/gm20b/hw_fb_gm20b.h8
-rw-r--r--drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h68
3 files changed, 81 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
index 4c2b00a8..3d99e94d 100644
--- a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
@@ -533,10 +533,15 @@ static int gr_gm20b_ctx_state_floorsweep(struct gk20a *g)
533 + gpc_offset + tpc_offset, 533 + gpc_offset + tpc_offset,
534 gr_gpc0_tpc0_pe_cfg_smid_value_f(sm_id)); 534 gr_gpc0_tpc0_pe_cfg_smid_value_f(sm_id));
535 535
536 g->gr.sm_to_cluster[sm_id].tpc_index = tpc_index;
537 g->gr.sm_to_cluster[sm_id].gpc_index = gpc_index;
538
536 sm_id++; 539 sm_id++;
537 } 540 }
538 } 541 }
539 542
543 gr->no_of_sm = sm_id;
544
540 for (gpc_index = 0; gpc_index < gr->gpc_count; gpc_index++) 545 for (gpc_index = 0; gpc_index < gr->gpc_count; gpc_index++)
541 tpc_per_gpc |= gr->gpc_tpc_count[gpc_index] 546 tpc_per_gpc |= gr->gpc_tpc_count[gpc_index]
542 << (gr_pd_num_tpc_per_gpc__size_1_v() * gpc_index); 547 << (gr_pd_num_tpc_per_gpc__size_1_v() * gpc_index);
diff --git a/drivers/gpu/nvgpu/gm20b/hw_fb_gm20b.h b/drivers/gpu/nvgpu/gm20b/hw_fb_gm20b.h
index a753074e..214306cb 100644
--- a/drivers/gpu/nvgpu/gm20b/hw_fb_gm20b.h
+++ b/drivers/gpu/nvgpu/gm20b/hw_fb_gm20b.h
@@ -214,10 +214,18 @@ static inline u32 fb_mmu_debug_ctrl_debug_v(u32 r)
214{ 214{
215 return (r >> 16) & 0x1; 215 return (r >> 16) & 0x1;
216} 216}
217static inline u32 fb_mmu_debug_ctrl_debug_m(void)
218{
219 return 0x1 << 16;
220}
217static inline u32 fb_mmu_debug_ctrl_debug_enabled_v(void) 221static inline u32 fb_mmu_debug_ctrl_debug_enabled_v(void)
218{ 222{
219 return 0x00000001; 223 return 0x00000001;
220} 224}
225static inline u32 fb_mmu_debug_ctrl_debug_disabled_v(void)
226{
227 return 0x00000000;
228}
221static inline u32 fb_mmu_vpr_info_r(void) 229static inline u32 fb_mmu_vpr_info_r(void)
222{ 230{
223 return 0x00100cd0; 231 return 0x00100cd0;
diff --git a/drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h b/drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h
index 868b8fe7..11605deb 100644
--- a/drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h
+++ b/drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h
@@ -330,6 +330,30 @@ static inline u32 gr_activity_4_r(void)
330{ 330{
331 return 0x00400390; 331 return 0x00400390;
332} 332}
333static inline u32 gr_pri_gpc0_gcc_dbg_r(void)
334{
335 return 0x00501000;
336}
337static inline u32 gr_pri_gpcs_gcc_dbg_r(void)
338{
339 return 0x00419000;
340}
341static inline u32 gr_pri_gpcs_gcc_dbg_invalidate_m(void)
342{
343 return 0x1 << 1;
344}
345static inline u32 gr_pri_gpc0_tpc0_sm_cache_control_r(void)
346{
347 return 0x005046a4;
348}
349static inline u32 gr_pri_gpcs_tpcs_sm_cache_control_r(void)
350{
351 return 0x00419ea4;
352}
353static inline u32 gr_pri_gpcs_tpcs_sm_cache_control_invalidate_cache_m(void)
354{
355 return 0x1 << 0;
356}
333static inline u32 gr_pri_sked_activity_r(void) 357static inline u32 gr_pri_sked_activity_r(void)
334{ 358{
335 return 0x00407054; 359 return 0x00407054;
@@ -2998,6 +3022,10 @@ static inline u32 gr_gpc0_tpc0_tpccs_tpc_exception_en_sm_enabled_f(void)
2998{ 3022{
2999 return 0x2; 3023 return 0x2;
3000} 3024}
3025static inline u32 gr_gpc0_tpc0_tpccs_tpc_exception_en_sm_v(u32 r)
3026{
3027 return (r >> 1) & 0x1;
3028}
3001static inline u32 gr_gpcs_gpccs_gpc_exception_en_r(void) 3029static inline u32 gr_gpcs_gpccs_gpc_exception_en_r(void)
3002{ 3030{
3003 return 0x0041ac94; 3031 return 0x0041ac94;
@@ -3054,10 +3082,50 @@ static inline u32 gr_gpc0_tpc0_sm_dbgr_control0_run_trigger_task_f(void)
3054{ 3082{
3055 return 0x40000000; 3083 return 0x40000000;
3056} 3084}
3085static inline u32 gr_gpc0_tpc0_sm_dbgr_control0_stop_on_any_warp_v(u32 r)
3086{
3087 return (r >> 1) & 0x1;
3088}
3089static inline u32 gr_gpc0_tpc0_sm_dbgr_control0_stop_on_any_warp_disable_f(void)
3090{
3091 return 0x0;
3092}
3093static inline u32 gr_gpc0_tpc0_sm_dbgr_control0_stop_on_any_sm_v(u32 r)
3094{
3095 return (r >> 2) & 0x1;
3096}
3097static inline u32 gr_gpc0_tpc0_sm_dbgr_control0_stop_on_any_sm_disable_f(void)
3098{
3099 return 0x0;
3100}
3101static inline u32 gr_gpc0_tpc0_sm_warp_valid_mask_r(void)
3102{
3103 return 0x00504614;
3104}
3105static inline u32 gr_gpc0_tpc0_sm_dbgr_bpt_pause_mask_r(void)
3106{
3107 return 0x00504624;
3108}
3109static inline u32 gr_gpc0_tpc0_sm_dbgr_bpt_trap_mask_r(void)
3110{
3111 return 0x00504634;
3112}
3113static inline u32 gr_gpc0_tpc0_sm_dbgr_bpt_trap_mask_stop_on_any_warp_disable_v(void)
3114{
3115 return 0x00000000;
3116}
3117static inline u32 gr_gpc0_tpc0_sm_dbgr_bpt_trap_mask_stop_on_any_sm_disable_v(void)
3118{
3119 return 0x00000000;
3120}
3057static inline u32 gr_gpc0_tpc0_sm_dbgr_status0_r(void) 3121static inline u32 gr_gpc0_tpc0_sm_dbgr_status0_r(void)
3058{ 3122{
3059 return 0x0050460c; 3123 return 0x0050460c;
3060} 3124}
3125static inline u32 gr_gpc0_tpc0_sm_dbgr_status0_sm_in_trap_mode_v(u32 r)
3126{
3127 return (r >> 0) & 0x1;
3128}
3061static inline u32 gr_gpc0_tpc0_sm_dbgr_status0_locked_down_v(u32 r) 3129static inline u32 gr_gpc0_tpc0_sm_dbgr_status0_locked_down_v(u32 r)
3062{ 3130{
3063 return (r >> 4) & 0x1; 3131 return (r >> 4) & 0x1;