summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2017-02-16 12:29:15 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-02-17 18:30:58 -0500
commitc218fefe848893c9e4fa6b44ac65439444e47b04 (patch)
treedafb1ce230be964796220b5957ad7585d9307c7c /drivers
parent4b8edeffe56685a9a3bdb9440af6376bb3bded61 (diff)
gpu: nvgpu: Fix unicast register accesses for SM
In two places we used broadcast register as base, but added the unicast offset to it. This causes the write to go well beyond valid register range. Change the broadcast base to use unicast base instead in sequence to resume a single SM and to record error state of SM. Bug 200256272 Change-Id: I4ca9af2bb5877dba20ab96575f5094d42949c9e2 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> (cherry-picked from commit 04177b3414535ce5092c8baeae29883bada9d36c) Reviewed-on: http://git-master/r/1306331 Reviewed-by: Automatic_Commit_Validation_User
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c2
-rw-r--r--drivers/gpu/nvgpu/gm20b/gr_gm20b.c4
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/hw/gm20b/hw_gr_gm20b.h8
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_gr_gp106.h8
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_gr_gp10b.h8
5 files changed, 27 insertions, 3 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 170bfc7f..d3b91a50 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -8740,7 +8740,7 @@ void gk20a_resume_single_sm(struct gk20a *g,
8740 gr_gpcs_tpcs_sm_dbgr_control0_stop_trigger_m(), 8740 gr_gpcs_tpcs_sm_dbgr_control0_stop_trigger_m(),
8741 gr_gpcs_tpcs_sm_dbgr_control0_stop_trigger_disable_f()); 8741 gr_gpcs_tpcs_sm_dbgr_control0_stop_trigger_disable_f());
8742 gk20a_writel(g, 8742 gk20a_writel(g,
8743 gr_gpcs_tpcs_sm_dbgr_control0_r() + offset, dbgr_control0); 8743 gr_gpc0_tpc0_sm_dbgr_control0_r() + offset, dbgr_control0);
8744 8744
8745 /* Run trigger */ 8745 /* Run trigger */
8746 dbgr_control0 |= gr_gpcs_tpcs_sm_dbgr_control0_run_trigger_task_f(); 8746 dbgr_control0 |= gr_gpcs_tpcs_sm_dbgr_control0_run_trigger_task_f();
diff --git a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
index 0e0d3f62..0375d71f 100644
--- a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
@@ -1259,9 +1259,9 @@ static int gm20b_gr_record_sm_error_state(struct gk20a *g, u32 gpc, u32 tpc)
1259 gr->sm_error_states[sm_id].hww_warp_esr_pc = gk20a_readl(g, 1259 gr->sm_error_states[sm_id].hww_warp_esr_pc = gk20a_readl(g,
1260 gr_gpc0_tpc0_sm_hww_warp_esr_pc_r() + offset); 1260 gr_gpc0_tpc0_sm_hww_warp_esr_pc_r() + offset);
1261 gr->sm_error_states[sm_id].hww_global_esr_report_mask = gk20a_readl(g, 1261 gr->sm_error_states[sm_id].hww_global_esr_report_mask = gk20a_readl(g,
1262 gr_gpcs_tpcs_sm_hww_global_esr_report_mask_r() + offset); 1262 gr_gpc0_tpc0_sm_hww_global_esr_report_mask_r() + offset);
1263 gr->sm_error_states[sm_id].hww_warp_esr_report_mask = gk20a_readl(g, 1263 gr->sm_error_states[sm_id].hww_warp_esr_report_mask = gk20a_readl(g,
1264 gr_gpcs_tpcs_sm_hww_warp_esr_report_mask_r() + offset); 1264 gr_gpc0_tpc0_sm_hww_warp_esr_report_mask_r() + offset);
1265 1265
1266 mutex_unlock(&g->dbg_sessions_lock); 1266 mutex_unlock(&g->dbg_sessions_lock);
1267 1267
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gm20b/hw_gr_gm20b.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gm20b/hw_gr_gm20b.h
index 9f7fea45..30436fb1 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/hw/gm20b/hw_gr_gm20b.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gm20b/hw_gr_gm20b.h
@@ -3062,6 +3062,10 @@ static inline u32 gr_gpcs_tpcs_sm_hww_warp_esr_report_mask_divergent_report_f(vo
3062{ 3062{
3063 return 0x100000; 3063 return 0x100000;
3064} 3064}
3065static inline u32 gr_gpc0_tpc0_sm_hww_warp_esr_report_mask_r(void)
3066{
3067 return 0x00504644;
3068}
3065static inline u32 gr_gpcs_tpcs_sm_hww_global_esr_report_mask_r(void) 3069static inline u32 gr_gpcs_tpcs_sm_hww_global_esr_report_mask_r(void)
3066{ 3070{
3067 return 0x00419e4c; 3071 return 0x00419e4c;
@@ -3094,6 +3098,10 @@ static inline u32 gr_gpcs_tpcs_sm_hww_global_esr_report_mask_single_step_complet
3094{ 3098{
3095 return 0x40; 3099 return 0x40;
3096} 3100}
3101static inline u32 gr_gpc0_tpc0_sm_hww_global_esr_report_mask_r(void)
3102{
3103 return 0x0050464c;
3104}
3097static inline u32 gr_gpcs_tpcs_tpccs_tpc_exception_en_r(void) 3105static inline u32 gr_gpcs_tpcs_tpccs_tpc_exception_en_r(void)
3098{ 3106{
3099 return 0x00419d0c; 3107 return 0x00419d0c;
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_gr_gp106.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_gr_gp106.h
index 22b1142f..c20da067 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_gr_gp106.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_gr_gp106.h
@@ -3298,6 +3298,10 @@ static inline u32 gr_gpcs_tpcs_sm_hww_warp_esr_report_mask_divergent_report_f(vo
3298{ 3298{
3299 return 0x100000; 3299 return 0x100000;
3300} 3300}
3301static inline u32 gr_gpc0_tpc0_sm_hww_warp_esr_report_mask_r(void)
3302{
3303 return 0x00504644;
3304}
3301static inline u32 gr_gpcs_tpcs_sm_hww_global_esr_report_mask_r(void) 3305static inline u32 gr_gpcs_tpcs_sm_hww_global_esr_report_mask_r(void)
3302{ 3306{
3303 return 0x00419e4c; 3307 return 0x00419e4c;
@@ -3338,6 +3342,10 @@ static inline u32 gr_gpcs_tpcs_sm_hww_global_esr_report_mask_single_step_complet
3338{ 3342{
3339 return 0x40; 3343 return 0x40;
3340} 3344}
3345static inline u32 gr_gpc0_tpc0_sm_hww_global_esr_report_mask_r(void)
3346{
3347 return 0x0050464c;
3348}
3341static inline u32 gr_gpcs_tpcs_tpccs_tpc_exception_en_r(void) 3349static inline u32 gr_gpcs_tpcs_tpccs_tpc_exception_en_r(void)
3342{ 3350{
3343 return 0x00419d0c; 3351 return 0x00419d0c;
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_gr_gp10b.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_gr_gp10b.h
index 6bef30e0..7989337c 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_gr_gp10b.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_gr_gp10b.h
@@ -3418,6 +3418,10 @@ static inline u32 gr_gpcs_tpcs_sm_hww_warp_esr_report_mask_divergent_report_f(vo
3418{ 3418{
3419 return 0x100000; 3419 return 0x100000;
3420} 3420}
3421static inline u32 gr_gpc0_tpc0_sm_hww_warp_esr_report_mask_r(void)
3422{
3423 return 0x00504644;
3424}
3421static inline u32 gr_gpcs_tpcs_sm_hww_global_esr_report_mask_r(void) 3425static inline u32 gr_gpcs_tpcs_sm_hww_global_esr_report_mask_r(void)
3422{ 3426{
3423 return 0x00419e4c; 3427 return 0x00419e4c;
@@ -3458,6 +3462,10 @@ static inline u32 gr_gpcs_tpcs_sm_hww_global_esr_report_mask_single_step_complet
3458{ 3462{
3459 return 0x40; 3463 return 0x40;
3460} 3464}
3465static inline u32 gr_gpc0_tpc0_sm_hww_global_esr_report_mask_r(void)
3466{
3467 return 0x0050464c;
3468}
3461static inline u32 gr_gpcs_tpcs_tpccs_tpc_exception_en_r(void) 3469static inline u32 gr_gpcs_tpcs_tpccs_tpc_exception_en_r(void)
3462{ 3470{
3463 return 0x00419d0c; 3471 return 0x00419d0c;