Blob Blame History Raw
From: Ben Skeggs <bskeggs@redhat.com>
Date: Wed, 16 May 2018 12:07:32 +1000
Subject: drm/nouveau/gr/gf100-: insert some WFIs during gr init
Git-commit: 6c46d01f25bcf74608d09645c27c35c3f3940ebe
Patch-mainline: v4.18-rc1
References: FATE#326289 FATE#326079 FATE#326049 FATE#322398 FATE#326166

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 <bskeggs@redhat.com>
Acked-by: Petr Tesarik <ptesarik@suse.com>
---
 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(+)

--- 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_g
 		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_g
 
 	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);
--- 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);