drm/nv50: fix iommu errors caused by device reading from address 0
authorBen Skeggs <bskeggs@redhat.com>
Mon, 7 Jun 2010 03:59:40 +0000 (13:59 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 8 Jun 2010 01:03:45 +0000 (11:03 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/nouveau/nv50_fb.c

index a95e694..32611bd 100644 (file)
@@ -6,10 +6,16 @@
 int
 nv50_fb_init(struct drm_device *dev)
 {
 int
 nv50_fb_init(struct drm_device *dev)
 {
-       /* This is needed to get meaningful information from 100c90
-        * on traps. No idea what these values mean exactly. */
        struct drm_nouveau_private *dev_priv = dev->dev_private;
 
        struct drm_nouveau_private *dev_priv = dev->dev_private;
 
+       /* Not a clue what this is exactly.  Without pointing it at a
+        * scratch page, VRAM->GART blits with M2MF (as in DDX DFS)
+        * cause IOMMU "read from address 0" errors (rh#561267)
+        */
+       nv_wr32(dev, 0x100c08, dev_priv->gart_info.sg_dummy_bus >> 8);
+
+       /* This is needed to get meaningful information from 100c90
+        * on traps. No idea what these values mean exactly. */
        switch (dev_priv->chipset) {
        case 0x50:
                nv_wr32(dev, 0x100c90, 0x0707ff);
        switch (dev_priv->chipset) {
        case 0x50:
                nv_wr32(dev, 0x100c90, 0x0707ff);