aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2020-09-02 15:30:33 +1000
committerBen Skeggs <bskeggs@redhat.com>2020-09-03 15:32:24 +1000
commitca386aa7155a5467fa7b2b8376f4da8f8e59be4d (patch)
treefb92f91a72c9111205013b164d2dca3123fe7e56
parenta9cfcfcad50c7bf4ef7335a3eefba8d989d15c06 (diff)
downloadlinux-ca386aa7155a5467fa7b2b8376f4da8f8e59be4d.tar.gz
drm/nouveau/kms/nv50-gp1xx: add WAR for EVO push buffer HW bug
Thanks to NVIDIA for confirming this workaround, and clarifying which HW is affected. Signed-off-by: Ben Skeggs <bskeggs@redhat.com> Tested-by: Alexander Kapshuk <alexander.kapshuk@gmail.com>
-rw-r--r--drivers/gpu/drm/nouveau/dispnv50/disp.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
index e7874877da8583..1ed24207000119 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
@@ -257,6 +257,12 @@ nv50_dmac_create(struct nvif_device *device, struct nvif_object *disp,
dmac->push->end = dmac->push->bgn;
dmac->max = 0x1000/4 - 1;
+ /* EVO channels are affected by a HW bug where the last 12 DWORDs
+ * of the push buffer aren't able to be used safely.
+ */
+ if (disp->oclass < GV100_DISP)
+ dmac->max -= 12;
+
args->pushbuf = nvif_handle(&dmac->_push.mem.object);
ret = nv50_chan_create(device, disp, oclass, head, data, size,