diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b')
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/gr_gm20b.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c index 333f0340..90046232 100644 --- a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c | |||
@@ -1530,6 +1530,18 @@ static void gr_gm20b_split_ltc_broadcast_addr(struct gk20a *g, u32 addr, | |||
1530 | priv_addr_table, priv_addr_table_index); | 1530 | priv_addr_table, priv_addr_table_index); |
1531 | } | 1531 | } |
1532 | 1532 | ||
1533 | static void gm20b_gr_clear_sm_hww(struct gk20a *g, u32 gpc, u32 tpc, u32 sm, | ||
1534 | u32 global_esr) | ||
1535 | { | ||
1536 | u32 offset = gk20a_gr_gpc_offset(g, gpc) + gk20a_gr_tpc_offset(g, tpc); | ||
1537 | |||
1538 | gk20a_writel(g, gr_gpc0_tpc0_sm_hww_global_esr_r() + offset, | ||
1539 | global_esr); | ||
1540 | |||
1541 | /* clear the warp hww */ | ||
1542 | gk20a_writel(g, gr_gpc0_tpc0_sm_hww_warp_esr_r() + offset, 0); | ||
1543 | } | ||
1544 | |||
1533 | void gm20b_init_gr(struct gpu_ops *gops) | 1545 | void gm20b_init_gr(struct gpu_ops *gops) |
1534 | { | 1546 | { |
1535 | gops->gr.init_gpc_mmu = gr_gm20b_init_gpc_mmu; | 1547 | gops->gr.init_gpc_mmu = gr_gm20b_init_gpc_mmu; |
@@ -1640,4 +1652,5 @@ void gm20b_init_gr(struct gpu_ops *gops) | |||
1640 | gk20a_gr_get_sm_no_lock_down_hww_global_esr_mask; | 1652 | gk20a_gr_get_sm_no_lock_down_hww_global_esr_mask; |
1641 | gops->gr.lock_down_sm = gk20a_gr_lock_down_sm; | 1653 | gops->gr.lock_down_sm = gk20a_gr_lock_down_sm; |
1642 | gops->gr.wait_for_sm_lock_down = gk20a_gr_wait_for_sm_lock_down; | 1654 | gops->gr.wait_for_sm_lock_down = gk20a_gr_wait_for_sm_lock_down; |
1655 | gops->gr.clear_sm_hww = gm20b_gr_clear_sm_hww; | ||
1643 | } | 1656 | } |