From 6c46d01f25bcf74608d09645c27c35c3f3940ebe Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 16 May 2018 12:07:32 +1000 Subject: drm/nouveau/gr/gf100-: insert some WFIs during gr init Inserted wait-for-gr-idle in the places it seems that RM does it, seems to prevent some random mmio timeouts on Quadro GV100. Signed-off-by: Ben Skeggs --- drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.c | 4 ++++ drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.c index f0f5a51..e813a3f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.c @@ -1385,6 +1385,8 @@ gf100_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info) gf100_gr_mmio(gr, gr->fuc_sw_ctx); } + gf100_gr_wait_idle(gr); + idle_timeout = nvkm_mask(device, 0x404154, 0xffffffff, 0x00000000); grctx->pagepool(info); @@ -1396,6 +1398,8 @@ gf100_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info) gf100_grctx_generate_floorsweep(gr); + gf100_gr_wait_idle(gr); + if (grctx->r400088) grctx->r400088(gr, false); if (gr->fuc_bundle) gf100_gr_icmd(gr, gr->fuc_bundle); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c index 8dd4bd71..70d3d41 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c @@ -2123,6 +2123,8 @@ gf100_gr_init(struct gf100_gr *gr) else gf100_gr_mmio(gr, gr->func->mmio); + gf100_gr_wait_idle(gr); + if (gr->func->init_r405a14) gr->func->init_r405a14(gr); -- cgit v1.1