Commit 11d92561 authored by Kelly Doran's avatar Kelly Doran Committed by Ben Skeggs

drm/nvc0/disp: fix regression in vblank semaphore release

Signed-off-by: default avatarKelly Doran <kel.p.doran@gmail.com>
Reviewed-by: default avatarMaarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 7707b701
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
* Authors: Ben Skeggs * Authors: Ben Skeggs
*/ */
#include <subdev/bar.h>
#include <engine/software.h> #include <engine/software.h>
#include <engine/disp.h> #include <engine/disp.h>
...@@ -37,6 +39,7 @@ nv50_disp_sclass[] = { ...@@ -37,6 +39,7 @@ nv50_disp_sclass[] = {
static void static void
nv50_disp_intr_vblank(struct nv50_disp_priv *priv, int crtc) nv50_disp_intr_vblank(struct nv50_disp_priv *priv, int crtc)
{ {
struct nouveau_bar *bar = nouveau_bar(priv);
struct nouveau_disp *disp = &priv->base; struct nouveau_disp *disp = &priv->base;
struct nouveau_software_chan *chan, *temp; struct nouveau_software_chan *chan, *temp;
unsigned long flags; unsigned long flags;
...@@ -46,18 +49,19 @@ nv50_disp_intr_vblank(struct nv50_disp_priv *priv, int crtc) ...@@ -46,18 +49,19 @@ nv50_disp_intr_vblank(struct nv50_disp_priv *priv, int crtc)
if (chan->vblank.crtc != crtc) if (chan->vblank.crtc != crtc)
continue; continue;
if (nv_device(priv)->chipset == 0x50) {
nv_wr32(priv, 0x001704, chan->vblank.channel); nv_wr32(priv, 0x001704, chan->vblank.channel);
nv_wr32(priv, 0x001710, 0x80000000 | chan->vblank.ctxdma); nv_wr32(priv, 0x001710, 0x80000000 | chan->vblank.ctxdma);
bar->flush(bar);
if (nv_device(priv)->chipset == 0x50) {
nv_wr32(priv, 0x001570, chan->vblank.offset); nv_wr32(priv, 0x001570, chan->vblank.offset);
nv_wr32(priv, 0x001574, chan->vblank.value); nv_wr32(priv, 0x001574, chan->vblank.value);
} else { } else {
if (nv_device(priv)->chipset >= 0xc0) { nv_wr32(priv, 0x001718, 0x80000000 | chan->vblank.channel);
bar->flush(bar);
nv_wr32(priv, 0x06000c, nv_wr32(priv, 0x06000c,
upper_32_bits(chan->vblank.offset)); upper_32_bits(chan->vblank.offset));
} nv_wr32(priv, 0x060010,
nv_wr32(priv, 0x060010, chan->vblank.offset); lower_32_bits(chan->vblank.offset));
nv_wr32(priv, 0x060014, chan->vblank.value); nv_wr32(priv, 0x060014, chan->vblank.value);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment