aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nouveau_ttm.c
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2013-03-21 22:12:17 -0400
committerBen Skeggs <bskeggs@redhat.com>2013-04-26 01:37:38 -0400
commitde7b7d59d54852c9544a9e4fa7af719511fb5366 (patch)
tree241ed778025af12d1b26c19cdeea5a78b478e6bb /drivers/gpu/drm/nouveau/nouveau_ttm.c
parent7092a8dd5c16c32746444bcd468b429185c25472 (diff)
drm/nouveau/ttm: allow tiled memtype on system memory buffer objects
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>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_ttm.c')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_ttm.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
index 9c60ef697967..f19a15a3bc03 100644
--- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
@@ -164,6 +164,8 @@ nouveau_gart_manager_new(struct ttm_mem_type_manager *man,
164 struct ttm_placement *placement, 164 struct ttm_placement *placement,
165 struct ttm_mem_reg *mem) 165 struct ttm_mem_reg *mem)
166{ 166{
167 struct nouveau_drm *drm = nouveau_bdev(bo->bdev);
168 struct nouveau_bo *nvbo = nouveau_bo(bo);
167 struct nouveau_mem *node; 169 struct nouveau_mem *node;
168 170
169 if (unlikely((mem->num_pages << PAGE_SHIFT) >= 512 * 1024 * 1024)) 171 if (unlikely((mem->num_pages << PAGE_SHIFT) >= 512 * 1024 * 1024))
@@ -174,6 +176,20 @@ nouveau_gart_manager_new(struct ttm_mem_type_manager *man,
174 return -ENOMEM; 176 return -ENOMEM;
175 node->page_shift = 12; 177 node->page_shift = 12;
176 178
179 switch (nv_device(drm->device)->card_type) {
180 case NV_50:
181 if (nv_device(drm->device)->chipset != 0x50)
182 node->memtype = (nvbo->tile_flags & 0x7f00) >> 8;
183 break;
184 case NV_C0:
185 case NV_D0:
186 case NV_E0:
187 node->memtype = (nvbo->tile_flags & 0xff00) >> 8;
188 break;
189 default:
190 break;
191 }
192
177 mem->mm_node = node; 193 mem->mm_node = node;
178 mem->start = 0; 194 mem->start = 0;
179 return 0; 195 return 0;