Commit 70ee6f1c authored by Ben Skeggs's avatar Ben Skeggs

drm/nv04-nv40/fifo: remove use of nouveau_gpuobj_new_fake()

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 5787640d
...@@ -61,7 +61,7 @@ struct nv04_fifo_priv { ...@@ -61,7 +61,7 @@ struct nv04_fifo_priv {
struct nv04_fifo_chan { struct nv04_fifo_chan {
struct nouveau_fifo_chan base; struct nouveau_fifo_chan base;
struct nouveau_gpuobj *ramfc; u32 ramfc;
}; };
bool bool
...@@ -107,6 +107,8 @@ nv04_fifo_context_new(struct nouveau_channel *chan, int engine) ...@@ -107,6 +107,8 @@ nv04_fifo_context_new(struct nouveau_channel *chan, int engine)
if (!fctx) if (!fctx)
return -ENOMEM; return -ENOMEM;
fctx->ramfc = chan->id * 32;
/* map channel control registers */ /* map channel control registers */
chan->user = ioremap(pci_resource_start(dev->pdev, 0) + chan->user = ioremap(pci_resource_start(dev->pdev, 0) +
NV03_USER(chan->id), PAGE_SIZE); NV03_USER(chan->id), PAGE_SIZE);
...@@ -116,25 +118,16 @@ nv04_fifo_context_new(struct nouveau_channel *chan, int engine) ...@@ -116,25 +118,16 @@ nv04_fifo_context_new(struct nouveau_channel *chan, int engine)
} }
/* initialise default fifo context */ /* initialise default fifo context */
ret = nouveau_gpuobj_new_fake(dev, priv->ramfc->pinst + nv_wo32(priv->ramfc, fctx->ramfc + 0x00, chan->pushbuf_base);
chan->id * 32, ~0, 32, nv_wo32(priv->ramfc, fctx->ramfc + 0x04, chan->pushbuf_base);
NVOBJ_FLAG_ZERO_FREE, &fctx->ramfc); nv_wo32(priv->ramfc, fctx->ramfc + 0x08, chan->pushbuf->pinst >> 4);
if (ret) nv_wo32(priv->ramfc, fctx->ramfc + 0x10,
goto error; NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES |
nv_wo32(fctx->ramfc, 0x00, chan->pushbuf_base);
nv_wo32(fctx->ramfc, 0x04, chan->pushbuf_base);
nv_wo32(fctx->ramfc, 0x08, chan->pushbuf->pinst >> 4);
nv_wo32(fctx->ramfc, 0x0c, 0x00000000);
nv_wo32(fctx->ramfc, 0x10, NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES |
NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES | NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES |
#ifdef __BIG_ENDIAN #ifdef __BIG_ENDIAN
NV_PFIFO_CACHE1_BIG_ENDIAN | NV_PFIFO_CACHE1_BIG_ENDIAN |
#endif #endif
NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8); NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8);
nv_wo32(fctx->ramfc, 0x14, 0x00000000);
nv_wo32(fctx->ramfc, 0x18, 0x00000000);
nv_wo32(fctx->ramfc, 0x1c, 0x00000000);
/* enable dma mode on the channel */ /* enable dma mode on the channel */
spin_lock_irqsave(&dev_priv->context_switch_lock, flags); spin_lock_irqsave(&dev_priv->context_switch_lock, flags);
...@@ -172,6 +165,7 @@ nv04_fifo_context_del(struct nouveau_channel *chan, int engine) ...@@ -172,6 +165,7 @@ nv04_fifo_context_del(struct nouveau_channel *chan, int engine)
do { do {
u32 mask = ((1ULL << c->bits) - 1) << c->regs; u32 mask = ((1ULL << c->bits) - 1) << c->regs;
nv_mask(dev, c->regp, mask, 0x00000000); nv_mask(dev, c->regp, mask, 0x00000000);
nv_wo32(priv->ramfc, fctx->ramfc + c->ctxp, 0x00000000);
} while ((++c)->bits); } while ((++c)->bits);
nv_wr32(dev, NV03_PFIFO_CACHE1_GET, 0); nv_wr32(dev, NV03_PFIFO_CACHE1_GET, 0);
...@@ -187,7 +181,6 @@ nv04_fifo_context_del(struct nouveau_channel *chan, int engine) ...@@ -187,7 +181,6 @@ nv04_fifo_context_del(struct nouveau_channel *chan, int engine)
spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags);
/* clean up */ /* clean up */
nouveau_gpuobj_ref(NULL, &fctx->ramfc);
nouveau_gpuobj_ref(NULL, &chan->ramfc); /*XXX: nv40 */ nouveau_gpuobj_ref(NULL, &chan->ramfc); /*XXX: nv40 */
if (chan->user) { if (chan->user) {
iounmap(chan->user); iounmap(chan->user);
...@@ -250,14 +243,14 @@ nv04_fifo_fini(struct drm_device *dev, int engine, bool suspend) ...@@ -250,14 +243,14 @@ nv04_fifo_fini(struct drm_device *dev, int engine, bool suspend)
chan = dev_priv->channels.ptr[chid]; chan = dev_priv->channels.ptr[chid];
if (suspend && chid != priv->base.channels && chan) { if (suspend && chid != priv->base.channels && chan) {
struct nv04_fifo_chan *fctx = chan->engctx[engine]; struct nv04_fifo_chan *fctx = chan->engctx[engine];
struct nouveau_gpuobj *ctx = fctx->ramfc; struct nouveau_gpuobj *ctx = priv->ramfc;
struct ramfc_desc *c = priv->ramfc_desc; struct ramfc_desc *c = priv->ramfc_desc;
do { do {
u32 rm = ((1ULL << c->bits) - 1) << c->regs; u32 rm = ((1ULL << c->bits) - 1) << c->regs;
u32 cm = ((1ULL << c->bits) - 1) << c->ctxs; u32 cm = ((1ULL << c->bits) - 1) << c->ctxs;
u32 rv = (nv_rd32(dev, c->regp) & rm) >> c->regs; u32 rv = (nv_rd32(dev, c->regp) & rm) >> c->regs;
u32 cv = (nv_ro32(ctx, c->ctxp) & ~cm); u32 cv = (nv_ro32(ctx, c->ctxp + fctx->ramfc) & ~cm);
nv_wo32(ctx, c->ctxp, cv | (rv << c->ctxs)); nv_wo32(ctx, c->ctxp + fctx->ramfc, cv | (rv << c->ctxs));
} while ((++c)->bits); } while ((++c)->bits);
} }
......
...@@ -61,7 +61,7 @@ struct nv10_fifo_priv { ...@@ -61,7 +61,7 @@ struct nv10_fifo_priv {
struct nv10_fifo_chan { struct nv10_fifo_chan {
struct nouveau_fifo_chan base; struct nouveau_fifo_chan base;
struct nouveau_gpuobj *ramfc; u32 ramfc;
}; };
static int static int
...@@ -78,6 +78,8 @@ nv10_fifo_context_new(struct nouveau_channel *chan, int engine) ...@@ -78,6 +78,8 @@ nv10_fifo_context_new(struct nouveau_channel *chan, int engine)
if (!fctx) if (!fctx)
return -ENOMEM; return -ENOMEM;
fctx->ramfc = chan->id * 32;
/* map channel control registers */ /* map channel control registers */
chan->user = ioremap(pci_resource_start(dev->pdev, 0) + chan->user = ioremap(pci_resource_start(dev->pdev, 0) +
NV03_USER(chan->id), PAGE_SIZE); NV03_USER(chan->id), PAGE_SIZE);
...@@ -87,25 +89,16 @@ nv10_fifo_context_new(struct nouveau_channel *chan, int engine) ...@@ -87,25 +89,16 @@ nv10_fifo_context_new(struct nouveau_channel *chan, int engine)
} }
/* initialise default fifo context */ /* initialise default fifo context */
ret = nouveau_gpuobj_new_fake(dev, priv->ramfc->pinst + nv_wo32(priv->ramfc, fctx->ramfc + 0x00, chan->pushbuf_base);
chan->id * 32, ~0, 32, nv_wo32(priv->ramfc, fctx->ramfc + 0x04, chan->pushbuf_base);
NVOBJ_FLAG_ZERO_FREE, &fctx->ramfc); nv_wo32(priv->ramfc, fctx->ramfc + 0x0c, chan->pushbuf->pinst >> 4);
if (ret) nv_wo32(priv->ramfc, fctx->ramfc + 0x14,
goto error; NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES |
nv_wo32(fctx->ramfc, 0x00, chan->pushbuf_base);
nv_wo32(fctx->ramfc, 0x04, chan->pushbuf_base);
nv_wo32(fctx->ramfc, 0x08, 0x00000000);
nv_wo32(fctx->ramfc, 0x0c, chan->pushbuf->pinst >> 4);
nv_wo32(fctx->ramfc, 0x10, 0x00000000);
nv_wo32(fctx->ramfc, 0x14, NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES |
NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES | NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES |
#ifdef __BIG_ENDIAN #ifdef __BIG_ENDIAN
NV_PFIFO_CACHE1_BIG_ENDIAN | NV_PFIFO_CACHE1_BIG_ENDIAN |
#endif #endif
NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8); NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8);
nv_wo32(fctx->ramfc, 0x18, 0x00000000);
nv_wo32(fctx->ramfc, 0x1c, 0x00000000);
/* enable dma mode on the channel */ /* enable dma mode on the channel */
spin_lock_irqsave(&dev_priv->context_switch_lock, flags); spin_lock_irqsave(&dev_priv->context_switch_lock, flags);
......
...@@ -66,7 +66,7 @@ struct nv17_fifo_priv { ...@@ -66,7 +66,7 @@ struct nv17_fifo_priv {
struct nv17_fifo_chan { struct nv17_fifo_chan {
struct nouveau_fifo_chan base; struct nouveau_fifo_chan base;
struct nouveau_gpuobj *ramfc; u32 ramfc;
}; };
static int static int
...@@ -83,6 +83,8 @@ nv17_fifo_context_new(struct nouveau_channel *chan, int engine) ...@@ -83,6 +83,8 @@ nv17_fifo_context_new(struct nouveau_channel *chan, int engine)
if (!fctx) if (!fctx)
return -ENOMEM; return -ENOMEM;
fctx->ramfc = chan->id * 64;
/* map channel control registers */ /* map channel control registers */
chan->user = ioremap(pci_resource_start(dev->pdev, 0) + chan->user = ioremap(pci_resource_start(dev->pdev, 0) +
NV03_USER(chan->id), PAGE_SIZE); NV03_USER(chan->id), PAGE_SIZE);
...@@ -92,17 +94,11 @@ nv17_fifo_context_new(struct nouveau_channel *chan, int engine) ...@@ -92,17 +94,11 @@ nv17_fifo_context_new(struct nouveau_channel *chan, int engine)
} }
/* initialise default fifo context */ /* initialise default fifo context */
ret = nouveau_gpuobj_new_fake(dev, priv->ramfc->pinst + nv_wo32(priv->ramfc, fctx->ramfc + 0x00, chan->pushbuf_base);
chan->id * 64, ~0, 64, nv_wo32(priv->ramfc, fctx->ramfc + 0x04, chan->pushbuf_base);
NVOBJ_FLAG_ZERO_ALLOC | nv_wo32(priv->ramfc, fctx->ramfc + 0x0c, chan->pushbuf->pinst >> 4);
NVOBJ_FLAG_ZERO_FREE, &fctx->ramfc); nv_wo32(priv->ramfc, fctx->ramfc + 0x14,
if (ret) NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES |
goto error;
nv_wo32(fctx->ramfc, 0x00, chan->pushbuf_base);
nv_wo32(fctx->ramfc, 0x04, chan->pushbuf_base);
nv_wo32(fctx->ramfc, 0x0c, chan->pushbuf->pinst >> 4);
nv_wo32(fctx->ramfc, 0x14, NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES |
NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES | NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES |
#ifdef __BIG_ENDIAN #ifdef __BIG_ENDIAN
NV_PFIFO_CACHE1_BIG_ENDIAN | NV_PFIFO_CACHE1_BIG_ENDIAN |
......
...@@ -74,7 +74,7 @@ struct nv40_fifo_priv { ...@@ -74,7 +74,7 @@ struct nv40_fifo_priv {
struct nv40_fifo_chan { struct nv40_fifo_chan {
struct nouveau_fifo_chan base; struct nouveau_fifo_chan base;
struct nouveau_gpuobj *ramfc; u32 ramfc;
}; };
static int static int
...@@ -91,6 +91,8 @@ nv40_fifo_context_new(struct nouveau_channel *chan, int engine) ...@@ -91,6 +91,8 @@ nv40_fifo_context_new(struct nouveau_channel *chan, int engine)
if (!fctx) if (!fctx)
return -ENOMEM; return -ENOMEM;
fctx->ramfc = chan->id * 128;
/* map channel control registers */ /* map channel control registers */
chan->user = ioremap(pci_resource_start(dev->pdev, 0) + chan->user = ioremap(pci_resource_start(dev->pdev, 0) +
NV03_USER(chan->id), PAGE_SIZE); NV03_USER(chan->id), PAGE_SIZE);
...@@ -100,24 +102,17 @@ nv40_fifo_context_new(struct nouveau_channel *chan, int engine) ...@@ -100,24 +102,17 @@ nv40_fifo_context_new(struct nouveau_channel *chan, int engine)
} }
/* initialise default fifo context */ /* initialise default fifo context */
ret = nouveau_gpuobj_new_fake(dev, priv->ramfc->pinst + nv_wo32(priv->ramfc, fctx->ramfc + 0x00, chan->pushbuf_base);
chan->id * 128, ~0, 128, nv_wo32(priv->ramfc, fctx->ramfc + 0x04, chan->pushbuf_base);
NVOBJ_FLAG_ZERO_ALLOC | nv_wo32(priv->ramfc, fctx->ramfc + 0x0c, chan->pushbuf->pinst >> 4);
NVOBJ_FLAG_ZERO_FREE, &fctx->ramfc); nv_wo32(priv->ramfc, fctx->ramfc + 0x18, 0x30000000 |
if (ret)
goto error;
nv_wo32(fctx->ramfc, 0x00, chan->pushbuf_base);
nv_wo32(fctx->ramfc, 0x04, chan->pushbuf_base);
nv_wo32(fctx->ramfc, 0x0c, chan->pushbuf->pinst >> 4);
nv_wo32(fctx->ramfc, 0x18, 0x30000000 |
NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES | NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES |
NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES | NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES |
#ifdef __BIG_ENDIAN #ifdef __BIG_ENDIAN
NV_PFIFO_CACHE1_BIG_ENDIAN | NV_PFIFO_CACHE1_BIG_ENDIAN |
#endif #endif
NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8); NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8);
nv_wo32(fctx->ramfc, 0x3c, 0x0001ffff); nv_wo32(priv->ramfc, fctx->ramfc + 0x3c, 0x0001ffff);
/* enable dma mode on the channel */ /* enable dma mode on the channel */
spin_lock_irqsave(&dev_priv->context_switch_lock, flags); spin_lock_irqsave(&dev_priv->context_switch_lock, flags);
...@@ -125,7 +120,7 @@ nv40_fifo_context_new(struct nouveau_channel *chan, int engine) ...@@ -125,7 +120,7 @@ nv40_fifo_context_new(struct nouveau_channel *chan, int engine)
spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags); spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags);
/*XXX: remove this later, need fifo engine context commit hook */ /*XXX: remove this later, need fifo engine context commit hook */
nouveau_gpuobj_ref(fctx->ramfc, &chan->ramfc); nouveau_gpuobj_ref(priv->ramfc, &chan->ramfc);
error: error:
if (ret) if (ret)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment