diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2011-01-10 23:10:09 -0500 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2011-02-24 15:30:15 -0500 |
commit | 58e6c7a9183071b89b0ac94862f369ed55775a7a (patch) | |
tree | f72e90154cb8663230d2ea7f12dcb3257118ecc0 /drivers/gpu/drm/nouveau | |
parent | efa58db3de82ab0fdc0774aef69e2dd8a27cc98f (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.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_drv.h | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_object.c | 22 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_sgdma.c | 3 |
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 | ||