aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2011-01-10 23:10:09 -0500
committerBen Skeggs <bskeggs@redhat.com>2011-02-24 15:30:15 -0500
commit58e6c7a9183071b89b0ac94862f369ed55775a7a (patch)
treef72e90154cb8663230d2ea7f12dcb3257118ecc0 /drivers/gpu/drm/nouveau
parentefa58db3de82ab0fdc0774aef69e2dd8a27cc98f (diff)
drm/nouveau: introduce new gart type, and name _SGDMA more appropriately
In preparation for the addition of a new nv40 backend, we'll need to be able to distinguish between a paged dma object and the on-chip GART. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_bo.c6
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_drv.h5
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_object.c22
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_sgdma.c3
4 files changed, 23 insertions, 13 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index d38a4d9f9b0b..bf260af18b31 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -382,7 +382,8 @@ nouveau_bo_create_ttm_backend_entry(struct ttm_bo_device *bdev)
382 case NOUVEAU_GART_AGP: 382 case NOUVEAU_GART_AGP:
383 return ttm_agp_backend_init(bdev, dev->agp->bridge); 383 return ttm_agp_backend_init(bdev, dev->agp->bridge);
384#endif 384#endif
385 case NOUVEAU_GART_SGDMA: 385 case NOUVEAU_GART_PDMA:
386 case NOUVEAU_GART_HW:
386 return nouveau_sgdma_init_ttm(dev); 387 return nouveau_sgdma_init_ttm(dev);
387 default: 388 default:
388 NV_ERROR(dev, "Unknown GART type %d\n", 389 NV_ERROR(dev, "Unknown GART type %d\n",
@@ -436,7 +437,8 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
436 TTM_PL_FLAG_WC; 437 TTM_PL_FLAG_WC;
437 man->default_caching = TTM_PL_FLAG_WC; 438 man->default_caching = TTM_PL_FLAG_WC;
438 break; 439 break;
439 case NOUVEAU_GART_SGDMA: 440 case NOUVEAU_GART_PDMA:
441 case NOUVEAU_GART_HW:
440 man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | 442 man->flags = TTM_MEMTYPE_FLAG_MAPPABLE |
441 TTM_MEMTYPE_FLAG_CMA; 443 TTM_MEMTYPE_FLAG_CMA;
442 man->available_caching = TTM_PL_MASK_CACHING; 444 man->available_caching = TTM_PL_MASK_CACHING;
diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
index 9821fcacc3d2..b36dc351f8eb 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
+++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
@@ -691,8 +691,9 @@ struct drm_nouveau_private {
691 struct { 691 struct {
692 enum { 692 enum {
693 NOUVEAU_GART_NONE = 0, 693 NOUVEAU_GART_NONE = 0,
694 NOUVEAU_GART_AGP, 694 NOUVEAU_GART_AGP, /* AGP */
695 NOUVEAU_GART_SGDMA 695 NOUVEAU_GART_PDMA, /* paged dma object */
696 NOUVEAU_GART_HW /* on-chip gart/vm */
696 } type; 697 } type;
697 uint64_t aper_base; 698 uint64_t aper_base;
698 uint64_t aper_size; 699 uint64_t aper_size;
diff --git a/drivers/gpu/drm/nouveau/nouveau_object.c b/drivers/gpu/drm/nouveau/nouveau_object.c
index 03adfe4c7665..710a7053dc99 100644
--- a/drivers/gpu/drm/nouveau/nouveau_object.c
+++ b/drivers/gpu/drm/nouveau/nouveau_object.c
@@ -490,16 +490,22 @@ nouveau_gpuobj_dma_new(struct nouveau_channel *chan, int class, u64 base,
490 } 490 }
491 491
492 if (target == NV_MEM_TARGET_GART) { 492 if (target == NV_MEM_TARGET_GART) {
493 if (dev_priv->gart_info.type == NOUVEAU_GART_AGP) { 493 struct nouveau_gpuobj *gart = dev_priv->gart_info.sg_ctxdma;
494 target = NV_MEM_TARGET_PCI_NOSNOOP; 494
495 base += dev_priv->gart_info.aper_base; 495 if (dev_priv->gart_info.type == NOUVEAU_GART_PDMA) {
496 } else 496 if (base == 0) {
497 if (base != 0) { 497 nouveau_gpuobj_ref(gart, pobj);
498 base = nouveau_sgdma_get_physical(dev, base); 498 return 0;
499 }
500
501 base = nouveau_sgdma_get_physical(dev, base);
499 target = NV_MEM_TARGET_PCI; 502 target = NV_MEM_TARGET_PCI;
500 } else { 503 } else {
501 nouveau_gpuobj_ref(dev_priv->gart_info.sg_ctxdma, pobj); 504 base += dev_priv->gart_info.aper_base;
502 return 0; 505 if (dev_priv->gart_info.type == NOUVEAU_GART_AGP)
506 target = NV_MEM_TARGET_PCI_NOSNOOP;
507 else
508 target = NV_MEM_TARGET_PCI;
503 } 509 }
504 } 510 }
505 511
diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c
index a6002f456899..fd2093c31e68 100644
--- a/drivers/gpu/drm/nouveau/nouveau_sgdma.c
+++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c
@@ -237,6 +237,7 @@ nouveau_sgdma_init(struct drm_device *dev)
237 237
238 dev_priv->gart_info.aper_base = dev_priv->gart_info.vma.offset; 238 dev_priv->gart_info.aper_base = dev_priv->gart_info.vma.offset;
239 dev_priv->gart_info.aper_size = 512 * 1024 * 1024; 239 dev_priv->gart_info.aper_size = 512 * 1024 * 1024;
240 dev_priv->gart_info.type = NOUVEAU_GART_HW;
240 } else { 241 } else {
241 if(dev_priv->ramin_rsvd_vram < 2 * 1024 * 1024) 242 if(dev_priv->ramin_rsvd_vram < 2 * 1024 * 1024)
242 aper_size = 64 * 1024 * 1024; 243 aper_size = 64 * 1024 * 1024;
@@ -266,9 +267,9 @@ nouveau_sgdma_init(struct drm_device *dev)
266 dev_priv->gart_info.sg_ctxdma = gpuobj; 267 dev_priv->gart_info.sg_ctxdma = gpuobj;
267 dev_priv->gart_info.aper_base = 0; 268 dev_priv->gart_info.aper_base = 0;
268 dev_priv->gart_info.aper_size = aper_size; 269 dev_priv->gart_info.aper_size = aper_size;
270 dev_priv->gart_info.type = NOUVEAU_GART_PDMA;
269 } 271 }
270 272
271 dev_priv->gart_info.type = NOUVEAU_GART_SGDMA;
272 return 0; 273 return 0;
273} 274}
274 275