diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2010-11-23 19:26:24 -0500 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2010-12-21 02:17:34 -0500 |
commit | 96545299d7405d4c0f44b727718e263653fc11aa (patch) | |
tree | d5c9ffd220778e11e026dab5cabbf74ae8a7cf2d /drivers/gpu/drm/nouveau/nouveau_dma.c | |
parent | 5216782bf8c195de3befe0742a877c987dd3c4fd (diff) |
drm/nvc0: fix channel dma init paths
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_dma.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_dma.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_dma.c b/drivers/gpu/drm/nouveau/nouveau_dma.c index 6ff77cedc008..65699bfaaaea 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dma.c +++ b/drivers/gpu/drm/nouveau/nouveau_dma.c | |||
@@ -36,7 +36,7 @@ nouveau_dma_pre_init(struct nouveau_channel *chan) | |||
36 | struct drm_nouveau_private *dev_priv = chan->dev->dev_private; | 36 | struct drm_nouveau_private *dev_priv = chan->dev->dev_private; |
37 | struct nouveau_bo *pushbuf = chan->pushbuf_bo; | 37 | struct nouveau_bo *pushbuf = chan->pushbuf_bo; |
38 | 38 | ||
39 | if (dev_priv->card_type == NV_50) { | 39 | if (dev_priv->card_type >= NV_50) { |
40 | const int ib_size = pushbuf->bo.mem.size / 2; | 40 | const int ib_size = pushbuf->bo.mem.size / 2; |
41 | 41 | ||
42 | chan->dma.ib_base = (pushbuf->bo.mem.size - ib_size) >> 2; | 42 | chan->dma.ib_base = (pushbuf->bo.mem.size - ib_size) >> 2; |
@@ -61,6 +61,21 @@ nouveau_dma_init(struct nouveau_channel *chan) | |||
61 | struct drm_nouveau_private *dev_priv = dev->dev_private; | 61 | struct drm_nouveau_private *dev_priv = dev->dev_private; |
62 | int ret, i; | 62 | int ret, i; |
63 | 63 | ||
64 | if (dev_priv->card_type >= NV_C0) { | ||
65 | ret = nouveau_gpuobj_gr_new(chan, 0x9039, 0x9039); | ||
66 | if (ret) | ||
67 | return ret; | ||
68 | |||
69 | ret = RING_SPACE(chan, 2); | ||
70 | if (ret) | ||
71 | return ret; | ||
72 | |||
73 | BEGIN_NVC0(chan, 2, NvSubM2MF, 0x0000, 1); | ||
74 | OUT_RING (chan, 0x00009039); | ||
75 | FIRE_RING (chan); | ||
76 | return 0; | ||
77 | } | ||
78 | |||
64 | /* Create NV_MEMORY_TO_MEMORY_FORMAT for buffer moves */ | 79 | /* Create NV_MEMORY_TO_MEMORY_FORMAT for buffer moves */ |
65 | ret = nouveau_gpuobj_gr_new(chan, NvM2MF, dev_priv->card_type < NV_50 ? | 80 | ret = nouveau_gpuobj_gr_new(chan, NvM2MF, dev_priv->card_type < NV_50 ? |
66 | 0x0039 : 0x5039); | 81 | 0x0039 : 0x5039); |
@@ -72,11 +87,6 @@ nouveau_dma_init(struct nouveau_channel *chan) | |||
72 | if (ret) | 87 | if (ret) |
73 | return ret; | 88 | return ret; |
74 | 89 | ||
75 | /* Map push buffer */ | ||
76 | ret = nouveau_bo_map(chan->pushbuf_bo); | ||
77 | if (ret) | ||
78 | return ret; | ||
79 | |||
80 | /* Insert NOPS for NOUVEAU_DMA_SKIPS */ | 90 | /* Insert NOPS for NOUVEAU_DMA_SKIPS */ |
81 | ret = RING_SPACE(chan, NOUVEAU_DMA_SKIPS); | 91 | ret = RING_SPACE(chan, NOUVEAU_DMA_SKIPS); |
82 | if (ret) | 92 | if (ret) |