diff --git a/drivers/gpu/nvgpu/gp106/fb_gp106.c b/drivers/gpu/nvgpu/gp106/fb_gp106.c index 53f9af568..dcb7e5456 100644 --- a/drivers/gpu/nvgpu/gp106/fb_gp106.c +++ b/drivers/gpu/nvgpu/gp106/fb_gp106.c @@ -21,6 +21,8 @@ static void gp106_fb_reset(struct gk20a *g) { + u32 val; + int retries = HW_SCRUB_TIMEOUT_MAX / HW_SCRUB_TIMEOUT_DEFAULT; /* wait for memory to be accessible */ do { @@ -31,6 +33,10 @@ static void gp106_fb_reset(struct gk20a *g) } nvgpu_udelay(HW_SCRUB_TIMEOUT_DEFAULT); } while (--retries); + + val = gk20a_readl(g, fb_mmu_priv_level_mask_r()); + val &= ~fb_mmu_priv_level_mask_write_violation_m(); + gk20a_writel(g, fb_mmu_priv_level_mask_r(), val); } void gp106_init_fb(struct gpu_ops *gops) diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_fb_gp106.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_fb_gp106.h index 1248e0f3c..64b99cf05 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_fb_gp106.h +++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_fb_gp106.h @@ -482,6 +482,14 @@ static inline u32 fb_mmu_vpr_info_fetch_true_v(void) { return 0x00000001; } +static inline u32 fb_mmu_priv_level_mask_r(void) +{ + return 0x00100cdc; +} +static inline u32 fb_mmu_priv_level_mask_write_violation_m(void) +{ + return 0x1 << 7; +} static inline u32 fb_niso_flush_sysmem_addr_r(void) { return 0x00100c10;