diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2010-12-20 10:53:44 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2010-12-21 12:46:51 +1000 |
commit | 45cfb9cf089cd56878b1cb5d15391d2470dbeb7c (patch) | |
tree | 50a262733e2f1b79d76980aab61eb993dabcbc6a /nouveau/nouveau_grobj.c | |
parent | ba731e7b58911e8caa4e37f0075a677d7ac2afc6 (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.c | 11 |
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); + } } |