drm/nv50: fix a couple of vm init issues
authorFrancisco Jerez <currojerez@riseup.net>
Thu, 16 Dec 2010 00:30:35 +0000 (10:30 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 16 Dec 2010 00:34:43 +0000 (10:34 +1000)
Fixes overwriting the first page table entry when testing that the PRAMIN
BAR can be correctly read/written, and adds an additional bar flush after
poking the BAR3 control regs.

Signed-off-by: Francisco Jerez <currojerez@riseup.net>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nv50_instmem.c

index 38f30270cb9feb3499380a5af1b0b295405acd07..adac4da98f7e5786f013194188779c9a825863b8 100644 (file)
@@ -182,16 +182,17 @@ nv50_instmem_init(struct drm_device *dev)
        nv_wr32(dev, 0x001704, 0x40000000 | (chan->ramin->vinst >> 12));
        nv_wr32(dev, 0x00170c, 0x80000000 | (priv->bar3_dmaobj->cinst >> 4));
 
-       tmp = nv_ri32(dev, 0);
-       nv_wi32(dev, 0, ~tmp);
-       if (nv_ri32(dev, 0) != ~tmp) {
+       dev_priv->engine.instmem.flush(dev);
+       dev_priv->ramin_available = true;
+
+       tmp = nv_ro32(chan->ramin, 0);
+       nv_wo32(chan->ramin, 0, ~tmp);
+       if (nv_ro32(chan->ramin, 0) != ~tmp) {
                NV_ERROR(dev, "PRAMIN readback failed\n");
                ret = -EIO;
                goto error;
        }
-       nv_wi32(dev, 0, tmp);
-
-       dev_priv->ramin_available = true;
+       nv_wo32(chan->ramin, 0, tmp);
 
        /* BAR1 */
        ret = nouveau_vm_new(dev, BAR1_VM_BASE, BAR1_VM_SIZE, BAR1_VM_BASE,