summaryrefslogtreecommitdiff
path: root/nouveau/nouveau_grobj.c
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2010-12-20 10:53:44 +1000
committerBen Skeggs <bskeggs@redhat.com>2010-12-21 12:46:51 +1000
commit45cfb9cf089cd56878b1cb5d15391d2470dbeb7c (patch)
tree50a262733e2f1b79d76980aab61eb993dabcbc6a /nouveau/nouveau_grobj.c
parentba731e7b58911e8caa4e37f0075a677d7ac2afc6 (diff)
nouveau: split pushbuf macros specific to nv04-nv50 out, and add nvc0
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'nouveau/nouveau_grobj.c')
-rw-r--r--nouveau/nouveau_grobj.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/nouveau/nouveau_grobj.c b/nouveau/nouveau_grobj.c
index df2ffb91..c6b98f16 100644
--- a/nouveau/nouveau_grobj.c
+++ b/nouveau/nouveau_grobj.c
@@ -112,6 +112,7 @@ nouveau_grobj_free(struct nouveau_grobj **grobj)
void
nouveau_grobj_autobind(struct nouveau_grobj *grobj)
{
+ struct nouveau_channel *chan = grobj->channel;
struct nouveau_subchannel *subc = NULL;
int i;
@@ -134,7 +135,13 @@ nouveau_grobj_autobind(struct nouveau_grobj *grobj)
subc->gr->bound = NOUVEAU_GROBJ_BOUND;
subc->gr->subc = subc - &grobj->channel->subc[0];
- BEGIN_RING(grobj->channel, grobj, 0x0000, 1);
- OUT_RING (grobj->channel, grobj->handle);
+ WAIT_RING(chan, 2);
+ if (chan->device->chipset < 0xc0) {
+ OUT_RING (chan, (1 << 18) | (grobj->subc << 13));
+ OUT_RING (chan, grobj->handle);
+ } else {
+ OUT_RING (chan, (2 << 28) | (1 << 16) | (grobj->subc << 13));
+ OUT_RING (chan, grobj->grclass);
+ }
}