drm/nouveau/fifo/gk104: kick channel upon removal
authorAlexandre Courbot <acourbot@nvidia.com>
Tue, 1 Mar 2016 07:59:05 +0000 (16:59 +0900)
committerBen Skeggs <bskeggs@redhat.com>
Mon, 14 Mar 2016 00:13:34 +0000 (10:13 +1000)
A channel may still be processed by the PBDMA even after removal, unless
it is properly kicked. Some chips are more sensible to this than others,
with GM20B triggering the issue very easily (the PBDMA will try to fetch
methods from the previously-removed channel after a new one is added).

Make sure this cannot happen by kicking the channel right after it is
disabled, and before the new runlist is submitted.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c

index 2e1df01bd9284d1d577ebcba567a2e4a074d4d42..8b4a5e01829c84bdcd0c9d8eeb980ebca6ce3428 100644 (file)
@@ -154,6 +154,7 @@ gk104_fifo_gpfifo_fini(struct nvkm_fifo_chan *base)
        if (!list_empty(&chan->head)) {
                gk104_fifo_runlist_remove(fifo, chan);
                nvkm_mask(device, 0x800004 + coff, 0x00000800, 0x00000800);
+               gk104_fifo_gpfifo_kick(chan);
                gk104_fifo_runlist_commit(fifo, chan->engine);
        }