diff options
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_drv.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_object.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_sgdma.c | 16 |
3 files changed, 10 insertions, 18 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h index f8931b2d129b..8f13906185b2 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drv.h +++ b/drivers/gpu/drm/nouveau/nouveau_drv.h | |||
@@ -934,8 +934,8 @@ extern void nouveau_irq_uninstall(struct drm_device *); | |||
934 | /* nouveau_sgdma.c */ | 934 | /* nouveau_sgdma.c */ |
935 | extern int nouveau_sgdma_init(struct drm_device *); | 935 | extern int nouveau_sgdma_init(struct drm_device *); |
936 | extern void nouveau_sgdma_takedown(struct drm_device *); | 936 | extern void nouveau_sgdma_takedown(struct drm_device *); |
937 | extern int nouveau_sgdma_get_page(struct drm_device *, uint32_t offset, | 937 | extern uint32_t nouveau_sgdma_get_physical(struct drm_device *, |
938 | uint32_t *page); | 938 | uint32_t offset); |
939 | extern struct ttm_backend *nouveau_sgdma_init_ttm(struct drm_device *); | 939 | extern struct ttm_backend *nouveau_sgdma_init_ttm(struct drm_device *); |
940 | 940 | ||
941 | /* nouveau_debugfs.c */ | 941 | /* nouveau_debugfs.c */ |
diff --git a/drivers/gpu/drm/nouveau/nouveau_object.c b/drivers/gpu/drm/nouveau/nouveau_object.c index d1bed40dc449..55c9fdcfa67f 100644 --- a/drivers/gpu/drm/nouveau/nouveau_object.c +++ b/drivers/gpu/drm/nouveau/nouveau_object.c | |||
@@ -478,7 +478,7 @@ nouveau_gpuobj_dma_new(struct nouveau_channel *chan, int class, u64 base, | |||
478 | struct drm_nouveau_private *dev_priv = chan->dev->dev_private; | 478 | struct drm_nouveau_private *dev_priv = chan->dev->dev_private; |
479 | struct drm_device *dev = chan->dev; | 479 | struct drm_device *dev = chan->dev; |
480 | struct nouveau_gpuobj *obj; | 480 | struct nouveau_gpuobj *obj; |
481 | u32 page_addr, flags0, flags2; | 481 | u32 flags0, flags2; |
482 | int ret; | 482 | int ret; |
483 | 483 | ||
484 | if (dev_priv->card_type >= NV_50) { | 484 | if (dev_priv->card_type >= NV_50) { |
@@ -495,12 +495,8 @@ nouveau_gpuobj_dma_new(struct nouveau_channel *chan, int class, u64 base, | |||
495 | base += dev_priv->gart_info.aper_base; | 495 | base += dev_priv->gart_info.aper_base; |
496 | } else | 496 | } else |
497 | if (base != 0) { | 497 | if (base != 0) { |
498 | ret = nouveau_sgdma_get_page(dev, base, &page_addr); | 498 | base = nouveau_sgdma_get_physical(dev, base); |
499 | if (ret) | ||
500 | return ret; | ||
501 | |||
502 | target = NV_MEM_TARGET_PCI; | 499 | target = NV_MEM_TARGET_PCI; |
503 | base = page_addr; | ||
504 | } else { | 500 | } else { |
505 | nouveau_gpuobj_ref(dev_priv->gart_info.sg_ctxdma, pobj); | 501 | nouveau_gpuobj_ref(dev_priv->gart_info.sg_ctxdma, pobj); |
506 | return 0; | 502 | return 0; |
diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c index b57201ab538e..9a250eb53098 100644 --- a/drivers/gpu/drm/nouveau/nouveau_sgdma.c +++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c | |||
@@ -267,19 +267,15 @@ nouveau_sgdma_takedown(struct drm_device *dev) | |||
267 | nouveau_vm_put(&dev_priv->gart_info.vma); | 267 | nouveau_vm_put(&dev_priv->gart_info.vma); |
268 | } | 268 | } |
269 | 269 | ||
270 | int | 270 | uint32_t |
271 | nouveau_sgdma_get_page(struct drm_device *dev, uint32_t offset, uint32_t *page) | 271 | nouveau_sgdma_get_physical(struct drm_device *dev, uint32_t offset) |
272 | { | 272 | { |
273 | struct drm_nouveau_private *dev_priv = dev->dev_private; | 273 | struct drm_nouveau_private *dev_priv = dev->dev_private; |
274 | struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma; | 274 | struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma; |
275 | int pte; | 275 | int pte = (offset >> NV_CTXDMA_PAGE_SHIFT) + 2; |
276 | 276 | ||
277 | pte = (offset >> NV_CTXDMA_PAGE_SHIFT) << 2; | 277 | BUG_ON(dev_priv->card_type >= NV_50); |
278 | if (dev_priv->card_type < NV_50) { | ||
279 | *page = nv_ro32(gpuobj, (pte + 8)) & ~NV_CTXDMA_PAGE_MASK; | ||
280 | return 0; | ||
281 | } | ||
282 | 278 | ||
283 | NV_ERROR(dev, "Unimplemented on NV50\n"); | 279 | return (nv_ro32(gpuobj, 4 * pte) & ~NV_CTXDMA_PAGE_MASK) | |
284 | return -EINVAL; | 280 | (offset & NV_CTXDMA_PAGE_MASK); |
285 | } | 281 | } |