drm/nouveau: initialise DMA tracking parameters earlier
authorBen Skeggs <bskeggs@redhat.com>
Fri, 8 Jan 2010 00:57:39 +0000 (10:57 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 11 Jan 2010 04:41:18 +0000 (14:41 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_channel.c
drivers/gpu/drm/nouveau/nouveau_dma.c
drivers/gpu/drm/nouveau/nouveau_drv.h

index d1c7f8c911c7411932f1640986a206c5ea3ee152..343d718a9667625e4900f78f2bb757a1ebdd4fd9 100644 (file)
@@ -158,6 +158,8 @@ nouveau_channel_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret,
                return ret;
        }
 
+       nouveau_dma_pre_init(chan);
+
        /* Locate channel's user control regs */
        if (dev_priv->card_type < NV_40)
                user = NV03_USER(channel);
index 3f7f78e03d4223ff2ad9aaaed4184e17b3a44cbe..7afbe8b40d511f39f034d29b62e971ac6eab2a79 100644 (file)
 #include "nouveau_drv.h"
 #include "nouveau_dma.h"
 
+void
+nouveau_dma_pre_init(struct nouveau_channel *chan)
+{
+       chan->dma.max  = (chan->pushbuf_bo->bo.mem.size >> 2) - 2;
+       chan->dma.put  = 0;
+       chan->dma.cur  = chan->dma.put;
+       chan->dma.free = chan->dma.max - chan->dma.cur;
+}
+
 int
 nouveau_dma_init(struct nouveau_channel *chan)
 {
@@ -74,12 +83,6 @@ nouveau_dma_init(struct nouveau_channel *chan)
                        return ret;
        }
 
-       /* Initialise DMA vars */
-       chan->dma.max  = (chan->pushbuf_bo->bo.mem.size >> 2) - 2;
-       chan->dma.put  = 0;
-       chan->dma.cur  = chan->dma.put;
-       chan->dma.free = chan->dma.max - chan->dma.cur;
-
        /* Insert NOPS for NOUVEAU_DMA_SKIPS */
        ret = RING_SPACE(chan, NOUVEAU_DMA_SKIPS);
        if (ret)
index 4087a9a20ba987cb11d7dc2c0fcf7a619d740dc5..026419fe8791e3cb941874398872ad23ef7ce811 100644 (file)
@@ -837,6 +837,7 @@ nouveau_debugfs_channel_fini(struct nouveau_channel *chan)
 #endif
 
 /* nouveau_dma.c */
+extern void nouveau_dma_pre_init(struct nouveau_channel *);
 extern int  nouveau_dma_init(struct nouveau_channel *);
 extern int  nouveau_dma_wait(struct nouveau_channel *, int size);