aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nv50_sor.c
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2010-07-05 15:19:16 +1000
committerBen Skeggs <bskeggs@redhat.com>2010-07-13 10:13:30 +1000
commit835aadbef3b762bc43eceddfec90c9a5a312d3c1 (patch)
tree1f79a03f0c690b51ab5ba9fcc970998d83d76667 /drivers/gpu/drm/nouveau/nv50_sor.c
parent4664c67b5d054012562a74414ed3f8619912b3d1 (diff)
downloadkernel_samsung_smdk4412-835aadbef3b762bc43eceddfec90c9a5a312d3c1.zip
kernel_samsung_smdk4412-835aadbef3b762bc43eceddfec90c9a5a312d3c1.tar.gz
kernel_samsung_smdk4412-835aadbef3b762bc43eceddfec90c9a5a312d3c1.tar.bz2
drm/nv50: send evo "update" command after each disconnect
It turns out that the display engine signals an interrupt for disconnects too. In order to make it easier to process the display interrupts correctly, we want to ensure we only get one operation per interrupt sequence - this is what this commit achieves. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nv50_sor.c')
-rw-r--r--drivers/gpu/drm/nouveau/nv50_sor.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/gpu/drm/nouveau/nv50_sor.c b/drivers/gpu/drm/nouveau/nv50_sor.c
index 03cb021..6461eae 100644
--- a/drivers/gpu/drm/nouveau/nv50_sor.c
+++ b/drivers/gpu/drm/nouveau/nv50_sor.c
@@ -47,16 +47,19 @@ nv50_sor_disconnect(struct drm_encoder *encoder)
if (!nv_encoder->crtc)
return;
+ nv50_crtc_blank(nouveau_crtc(nv_encoder->crtc), true);
NV_DEBUG_KMS(dev, "Disconnecting SOR %d\n", nv_encoder->or);
- ret = RING_SPACE(evo, 2);
+ ret = RING_SPACE(evo, 4);
if (ret) {
NV_ERROR(dev, "no space while disconnecting SOR\n");
return;
}
BEGIN_RING(evo, 0, NV50_EVO_SOR(nv_encoder->or, MODE_CTRL), 1);
- OUT_RING(evo, 0);
+ OUT_RING (evo, 0);
+ BEGIN_RING(evo, 0, NV50_EVO_UPDATE, 1);
+ OUT_RING (evo, 0);
nv_encoder->crtc = NULL;
nv_encoder->last_dpms = DRM_MODE_DPMS_OFF;