diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2012-04-30 11:33:43 -0500 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2012-05-24 16:55:41 +1000 |
commit | 20abd1634a6e2eedb84ca977adea56b8aa06cc3e (patch) | |
tree | 32eca9cf843cf2aa5163b15e76f833691eb306a2 /drivers/gpu/drm/nouveau/nouveau_channel.c | |
parent | 2cda7f4c5e83925fe687f63625893e033358de4e (diff) | |
download | linux-20abd1634a6e2eedb84ca977adea56b8aa06cc3e.tar.gz linux-20abd1634a6e2eedb84ca977adea56b8aa06cc3e.tar.bz2 linux-20abd1634a6e2eedb84ca977adea56b8aa06cc3e.zip |
drm/nouveau: create real execution engine for software object class
Just a cleanup more or less, and to remove the need for special handling of
software objects.
This removes a heap of documentation on dma/graph object formats. The info
is very out of date with our current understanding, and is far better
documented in rnndb in envytools git.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_channel.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_channel.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_channel.c b/drivers/gpu/drm/nouveau/nouveau_channel.c index 730bbb249b01..26c08e9b4a33 100644 --- a/drivers/gpu/drm/nouveau/nouveau_channel.c +++ b/drivers/gpu/drm/nouveau/nouveau_channel.c @@ -28,6 +28,7 @@ #include "nouveau_drm.h" #include "nouveau_dma.h" #include "nouveau_ramht.h" +#include "nouveau_software.h" static int nouveau_channel_pushbuf_init(struct nouveau_channel *chan) @@ -155,8 +156,6 @@ nouveau_channel_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret, } NV_DEBUG(dev, "initialising channel %d\n", chan->id); - INIT_LIST_HEAD(&chan->nvsw.vbl_wait); - INIT_LIST_HEAD(&chan->nvsw.flip); INIT_LIST_HEAD(&chan->fence.pending); spin_lock_init(&chan->fence.lock); @@ -213,6 +212,12 @@ nouveau_channel_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret, OUT_RING (chan, 0x00000000); FIRE_RING(chan); + ret = nouveau_gpuobj_gr_new(chan, NvSw, nouveau_software_class(dev)); + if (ret) { + nouveau_channel_put(&chan); + return ret; + } + ret = nouveau_fence_channel_init(chan); if (ret) { nouveau_channel_put(&chan); |