OSDN Git Service

drm/nouveau/kms/nv50-gp1xx: add WAR for EVO push buffer HW bug
authorBen Skeggs <bskeggs@redhat.com>
Wed, 2 Sep 2020 05:30:33 +0000 (15:30 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 3 Sep 2020 05:32:24 +0000 (15:32 +1000)
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>
drivers/gpu/drm/nouveau/dispnv50/disp.c

index e787487..1ed2420 100644 (file)
@@ -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,