Alexandre Courbot
2015-Aug-12 04:17 UTC
[Nouveau] [PATCH] Revert "drm/nouveau/fifo/gk104: kick channels when deactivating them"
This reverts commit 1addc1264852 This commit seems to cause crashes in gk104_fifo_intr_runlist() by returning 0xbad0da00 when register 0x2a00 is read. Since this commit was intended for GM20B which is not completely supported yet, let's revert it for the time being. Reported-by: Eric Biggers <ebiggers3 at gmail.com> Signed-off-by: Alexandre Courbot <acourbot at nvidia.com> --- David, it would be great if this could be merged for 4.2 since lots of users could potentially experience this issue. Thanks! drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 29 +++++++----------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index 52c22b026005..e10f9644140f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c @@ -166,30 +166,14 @@ gk104_fifo_context_attach(struct nvkm_object *parent, } static int -gk104_fifo_chan_kick(struct gk104_fifo_chan *chan) -{ - struct nvkm_object *obj = (void *)chan; - struct gk104_fifo_priv *priv = (void *)obj->engine; - - nv_wr32(priv, 0x002634, chan->base.chid); - if (!nv_wait(priv, 0x002634, 0x100000, 0x000000)) { - nv_error(priv, "channel %d [%s] kick timeout\n", - chan->base.chid, nvkm_client_name(chan)); - return -EBUSY; - } - - return 0; -} - -static int gk104_fifo_context_detach(struct nvkm_object *parent, bool suspend, struct nvkm_object *object) { struct nvkm_bar *bar = nvkm_bar(parent); + struct gk104_fifo_priv *priv = (void *)parent->engine; struct gk104_fifo_base *base = (void *)parent->parent; struct gk104_fifo_chan *chan = (void *)parent; u32 addr; - int ret; switch (nv_engidx(object->engine)) { case NVDEV_ENGINE_SW : return 0; @@ -204,9 +188,13 @@ gk104_fifo_context_detach(struct nvkm_object *parent, bool suspend, return -EINVAL; } - ret = gk104_fifo_chan_kick(chan); - if (ret && suspend) - return ret; + nv_wr32(priv, 0x002634, chan->base.chid); + if (!nv_wait(priv, 0x002634, 0xffffffff, chan->base.chid)) { + nv_error(priv, "channel %d [%s] kick timeout\n", + chan->base.chid, nvkm_client_name(chan)); + if (suspend) + return -EBUSY; + } if (addr) { nv_wo32(base, addr + 0x00, 0x00000000); @@ -331,7 +319,6 @@ gk104_fifo_chan_fini(struct nvkm_object *object, bool suspend) gk104_fifo_runlist_update(priv, chan->engine); } - gk104_fifo_chan_kick(chan); nv_wr32(priv, 0x800000 + (chid * 8), 0x00000000); return nvkm_fifo_channel_fini(&chan->base, suspend); } -- 2.5.0
Afzal Mohammed
2015-Aug-12 06:00 UTC
[Nouveau] [PATCH] Revert "drm/nouveau/fifo/gk104: kick channels when deactivating them"
Hi, On Wed, Aug 12, 2015 at 01:17:38PM +0900, Alexandre Courbot wrote:> This reverts commit 1addc1264852 > > This commit seems to cause crashes in gk104_fifo_intr_runlist() by > returning 0xbad0da00 when register 0x2a00 is read. Since this commit was > intended for GM20B which is not completely supported yet, let's revert > it for the time being. > > Reported-by: Eric Biggers <ebiggers3 at gmail.com> > Signed-off-by: Alexandre Courbot <acourbot at nvidia.com> > --- > David, it would be great if this could be merged for 4.2 since lots of > users could potentially experience this issue. Thanks!Tested-by: Afzal Mohammed <afzal.mohd.ma at gmail.com> Please help $subject reach mainline for 4.2, w/o this revert, the system here hangs most (>90%) of the time at boot time. As an aside, yesterday after a marathon git bisect, came to the same solution (though I don't understand what that change means). Was about to report it and saw this one. Thanks Alexandre. W/o the revert, in the rare case where it boots, below is observed in addition to as compared to w/ revert, [ 9.826010] nouveau E[ PBUS][0000:01:00.0] MMIO read of 0x00000000 FAULT at 0x122130 [ !ENGINE ] Regards Afzal
Alexandre Courbot
2015-Aug-12 07:12 UTC
[Nouveau] [PATCH] Revert "drm/nouveau/fifo/gk104: kick channels when deactivating them"
On Wed, Aug 12, 2015 at 3:00 PM, Afzal Mohammed <afzal.mohd.ma at gmail.com> wrote:> Hi, > > On Wed, Aug 12, 2015 at 01:17:38PM +0900, Alexandre Courbot wrote: >> This reverts commit 1addc1264852 >> >> This commit seems to cause crashes in gk104_fifo_intr_runlist() by >> returning 0xbad0da00 when register 0x2a00 is read. Since this commit was >> intended for GM20B which is not completely supported yet, let's revert >> it for the time being. >> >> Reported-by: Eric Biggers <ebiggers3 at gmail.com> >> Signed-off-by: Alexandre Courbot <acourbot at nvidia.com> >> --- >> David, it would be great if this could be merged for 4.2 since lots of >> users could potentially experience this issue. Thanks! > > Tested-by: Afzal Mohammed <afzal.mohd.ma at gmail.com>Thanks!> > Please help $subject reach mainline for 4.2, w/o this revert, the > system here hangs most (>90%) of the time at boot time. > > As an aside, yesterday after a marathon git bisect, came to the same > solution (though I don't understand what that change means). Was > about to report it and saw this one. Thanks Alexandre.All credit goes to Eric for bisecting and reporting this issue.> > W/o the revert, in the rare case where it boots, below is observed in > addition to as compared to w/ revert, > > [ 9.826010] nouveau E[ PBUS][0000:01:00.0] MMIO read of 0x00000000 FAULT at 0x122130 [ !ENGINE ]Could you let me know what your card is? It may be useful to know the range of affected cards when trying to fix this. Thanks, Alex.
Reasonably Related Threads
- [PATCH] Revert "drm/nouveau/fifo/gk104: kick channels when deactivating them"
- [PATCH] Revert "drm/nouveau/fifo/gk104: kick channels when deactivating them"
- [Bug 71472] New: GT-740M not detected
- [PATCH] fifo/gk104: kick channel upon removal
- [PATCH] fifo/gk104: kick channel upon removal