OSDN Git Service

drm/nv50: fix nv9x chipsets
authorBen Skeggs <skeggsb@gmail.com>
Wed, 11 Feb 2009 00:48:36 +0000 (10:48 +1000)
committerBen Skeggs <skeggsb@gmail.com>
Wed, 11 Feb 2009 01:22:41 +0000 (11:22 +1000)
NVIDIA do this fun little sequence after updating the PRAMIN page tables.

On 9xxx chips, none of the PRAMIN BAR bindings (except the initial one)
worked, hence the majority of the setup needed to create a channel
ended up in the wrong place, causing all sorts of fun.

This is done by NVIDIA on nv8x chips also, so we'll do it for them too,
even though they appear to work without it.

shared-core/nv50_instmem.c

index b7a51f0..d76ebf3 100644 (file)
@@ -297,6 +297,13 @@ nv50_instmem_bind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj)
                vram += NV50_INSTMEM_PAGE_SIZE;
        }
 
+       NV_WRITE(0x070000, 0x00000001);
+       while(NV_READ(0x070000) & 1);
+       NV_WRITE(0x100c80, 0x00040001);
+       while(NV_READ(0x100c80) & 1);
+       NV_WRITE(0x100c80, 0x00060001);
+       while(NV_READ(0x100c80) & 1);
+
        gpuobj->im_bound = 1;
        return 0;
 }