drm/nouveau/ttm: allow tiled memtype on system memory buffer objects
authorBen Skeggs <bskeggs@redhat.com>
Fri, 22 Mar 2013 02:12:17 +0000 (12:12 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 26 Apr 2013 05:37:38 +0000 (15:37 +1000)
Compression not supported, and will be silently dropped.  Original G80
can't handle this either and requires LINEAR memtype, though it's still
possible to correctly texture and m2mf to/from these objects anyway.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_ttm.c

index 9c60ef6..f19a15a 100644 (file)
@@ -164,6 +164,8 @@ nouveau_gart_manager_new(struct ttm_mem_type_manager *man,
                         struct ttm_placement *placement,
                         struct ttm_mem_reg *mem)
 {
+       struct nouveau_drm *drm = nouveau_bdev(bo->bdev);
+       struct nouveau_bo *nvbo = nouveau_bo(bo);
        struct nouveau_mem *node;
 
        if (unlikely((mem->num_pages << PAGE_SHIFT) >= 512 * 1024 * 1024))
@@ -174,6 +176,20 @@ nouveau_gart_manager_new(struct ttm_mem_type_manager *man,
                return -ENOMEM;
        node->page_shift = 12;
 
+       switch (nv_device(drm->device)->card_type) {
+       case NV_50:
+               if (nv_device(drm->device)->chipset != 0x50)
+                       node->memtype = (nvbo->tile_flags & 0x7f00) >> 8;
+               break;
+       case NV_C0:
+       case NV_D0:
+       case NV_E0:
+               node->memtype = (nvbo->tile_flags & 0xff00) >> 8;
+               break;
+       default:
+               break;
+       }
+
        mem->mm_node = node;
        mem->start   = 0;
        return 0;