struct nouveau_object *engine,
                             struct nouveau_oclass *oclass,
                             int bar, u32 addr, u32 size, u32 pushbuf,
-                            u32 engmask, int len, void **ptr)
+                            u64 engmask, int len, void **ptr)
 {
        struct nouveau_device *device = nv_device(engine);
        struct nouveau_fifo *priv = (void *)engine;
 
 
        ret = nouveau_fifo_channel_create(parent, engine, oclass, 0, 0x800000,
                                          0x10000, args->pushbuf,
-                                         (1 << NVDEV_ENGINE_DMAOBJ) |
-                                         (1 << NVDEV_ENGINE_SW) |
-                                         (1 << NVDEV_ENGINE_GR), &chan);
+                                         (1ULL << NVDEV_ENGINE_DMAOBJ) |
+                                         (1ULL << NVDEV_ENGINE_SW) |
+                                         (1ULL << NVDEV_ENGINE_GR), &chan);
        *pobject = nv_object(chan);
        if (ret)
                return ret;
 
 
        ret = nouveau_fifo_channel_create(parent, engine, oclass, 0, 0x800000,
                                          0x10000, args->pushbuf,
-                                         (1 << NVDEV_ENGINE_DMAOBJ) |
-                                         (1 << NVDEV_ENGINE_SW) |
-                                         (1 << NVDEV_ENGINE_GR), &chan);
+                                         (1ULL << NVDEV_ENGINE_DMAOBJ) |
+                                         (1ULL << NVDEV_ENGINE_SW) |
+                                         (1ULL << NVDEV_ENGINE_GR), &chan);
        *pobject = nv_object(chan);
        if (ret)
                return ret;
 
 
        ret = nouveau_fifo_channel_create(parent, engine, oclass, 0, 0x800000,
                                          0x10000, args->pushbuf,
-                                         (1 << NVDEV_ENGINE_DMAOBJ) |
-                                         (1 << NVDEV_ENGINE_SW) |
-                                         (1 << NVDEV_ENGINE_GR) |
-                                         (1 << NVDEV_ENGINE_MPEG), /* NV31- */
+                                         (1ULL << NVDEV_ENGINE_DMAOBJ) |
+                                         (1ULL << NVDEV_ENGINE_SW) |
+                                         (1ULL << NVDEV_ENGINE_GR) |
+                                         (1ULL << NVDEV_ENGINE_MPEG), /* NV31- */
                                          &chan);
        *pobject = nv_object(chan);
        if (ret)
 
 
        ret = nouveau_fifo_channel_create(parent, engine, oclass, 0, 0xc00000,
                                          0x1000, args->pushbuf,
-                                         (1 << NVDEV_ENGINE_DMAOBJ) |
-                                         (1 << NVDEV_ENGINE_SW) |
-                                         (1 << NVDEV_ENGINE_GR) |
-                                         (1 << NVDEV_ENGINE_MPEG), &chan);
+                                         (1ULL << NVDEV_ENGINE_DMAOBJ) |
+                                         (1ULL << NVDEV_ENGINE_SW) |
+                                         (1ULL << NVDEV_ENGINE_GR) |
+                                         (1ULL << NVDEV_ENGINE_MPEG), &chan);
        *pobject = nv_object(chan);
        if (ret)
                return ret;
 
 
        ret = nouveau_fifo_channel_create(parent, engine, oclass, 0, 0xc00000,
                                          0x2000, args->pushbuf,
-                                         (1 << NVDEV_ENGINE_DMAOBJ) |
-                                         (1 << NVDEV_ENGINE_SW) |
-                                         (1 << NVDEV_ENGINE_GR) |
-                                         (1 << NVDEV_ENGINE_MPEG), &chan);
+                                         (1ULL << NVDEV_ENGINE_DMAOBJ) |
+                                         (1ULL << NVDEV_ENGINE_SW) |
+                                         (1ULL << NVDEV_ENGINE_GR) |
+                                         (1ULL << NVDEV_ENGINE_MPEG), &chan);
        *pobject = nv_object(chan);
        if (ret)
                return ret;
 
        ret = nouveau_fifo_channel_create(parent, engine, oclass, 0, 0xc00000,
                                          0x2000, args->pushbuf,
-                                         (1 << NVDEV_ENGINE_DMAOBJ) |
-                                         (1 << NVDEV_ENGINE_SW) |
-                                         (1 << NVDEV_ENGINE_GR) |
-                                         (1 << NVDEV_ENGINE_MPEG), &chan);
+                                         (1ULL << NVDEV_ENGINE_DMAOBJ) |
+                                         (1ULL << NVDEV_ENGINE_SW) |
+                                         (1ULL << NVDEV_ENGINE_GR) |
+                                         (1ULL << NVDEV_ENGINE_MPEG), &chan);
        *pobject = nv_object(chan);
        if (ret)
                return ret;
 
 
        ret = nouveau_fifo_channel_create(parent, engine, oclass, 0, 0xc00000,
                                          0x2000, args->pushbuf,
-                                         (1 << NVDEV_ENGINE_DMAOBJ) |
-                                         (1 << NVDEV_ENGINE_SW) |
-                                         (1 << NVDEV_ENGINE_GR) |
-                                         (1 << NVDEV_ENGINE_MPEG) |
-                                         (1 << NVDEV_ENGINE_ME) |
-                                         (1 << NVDEV_ENGINE_VP) |
-                                         (1 << NVDEV_ENGINE_CRYPT) |
-                                         (1 << NVDEV_ENGINE_BSP) |
-                                         (1 << NVDEV_ENGINE_PPP) |
-                                         (1 << NVDEV_ENGINE_COPY0) |
-                                         (1 << NVDEV_ENGINE_UNK1C1), &chan);
+                                         (1ULL << NVDEV_ENGINE_DMAOBJ) |
+                                         (1ULL << NVDEV_ENGINE_SW) |
+                                         (1ULL << NVDEV_ENGINE_GR) |
+                                         (1ULL << NVDEV_ENGINE_MPEG) |
+                                         (1ULL << NVDEV_ENGINE_ME) |
+                                         (1ULL << NVDEV_ENGINE_VP) |
+                                         (1ULL << NVDEV_ENGINE_CRYPT) |
+                                         (1ULL << NVDEV_ENGINE_BSP) |
+                                         (1ULL << NVDEV_ENGINE_PPP) |
+                                         (1ULL << NVDEV_ENGINE_COPY0) |
+                                         (1ULL << NVDEV_ENGINE_UNK1C1), &chan);
        *pobject = nv_object(chan);
        if (ret)
                return ret;
 
        ret = nouveau_fifo_channel_create(parent, engine, oclass, 0, 0xc00000,
                                          0x2000, args->pushbuf,
-                                         (1 << NVDEV_ENGINE_DMAOBJ) |
-                                         (1 << NVDEV_ENGINE_SW) |
-                                         (1 << NVDEV_ENGINE_GR) |
-                                         (1 << NVDEV_ENGINE_MPEG) |
-                                         (1 << NVDEV_ENGINE_ME) |
-                                         (1 << NVDEV_ENGINE_VP) |
-                                         (1 << NVDEV_ENGINE_CRYPT) |
-                                         (1 << NVDEV_ENGINE_BSP) |
-                                         (1 << NVDEV_ENGINE_PPP) |
-                                         (1 << NVDEV_ENGINE_COPY0) |
-                                         (1 << NVDEV_ENGINE_UNK1C1), &chan);
+                                         (1ULL << NVDEV_ENGINE_DMAOBJ) |
+                                         (1ULL << NVDEV_ENGINE_SW) |
+                                         (1ULL << NVDEV_ENGINE_GR) |
+                                         (1ULL << NVDEV_ENGINE_MPEG) |
+                                         (1ULL << NVDEV_ENGINE_ME) |
+                                         (1ULL << NVDEV_ENGINE_VP) |
+                                         (1ULL << NVDEV_ENGINE_CRYPT) |
+                                         (1ULL << NVDEV_ENGINE_BSP) |
+                                         (1ULL << NVDEV_ENGINE_PPP) |
+                                         (1ULL << NVDEV_ENGINE_COPY0) |
+                                         (1ULL << NVDEV_ENGINE_UNK1C1), &chan);
        *pobject = nv_object(chan);
        if (ret)
                return ret;
 
        ret = nouveau_fifo_channel_create(parent, engine, oclass, 1,
                                          priv->user.bar.offset, 0x1000,
                                          args->pushbuf,
-                                         (1 << NVDEV_ENGINE_SW) |
-                                         (1 << NVDEV_ENGINE_GR) |
-                                         (1 << NVDEV_ENGINE_COPY0) |
-                                         (1 << NVDEV_ENGINE_COPY1) |
-                                         (1 << NVDEV_ENGINE_BSP) |
-                                         (1 << NVDEV_ENGINE_VP) |
-                                         (1 << NVDEV_ENGINE_PPP), &chan);
+                                         (1ULL << NVDEV_ENGINE_SW) |
+                                         (1ULL << NVDEV_ENGINE_GR) |
+                                         (1ULL << NVDEV_ENGINE_COPY0) |
+                                         (1ULL << NVDEV_ENGINE_COPY1) |
+                                         (1ULL << NVDEV_ENGINE_BSP) |
+                                         (1ULL << NVDEV_ENGINE_VP) |
+                                         (1ULL << NVDEV_ENGINE_PPP), &chan);
        *pobject = nv_object(chan);
        if (ret)
                return ret;
 
 #include <engine/dmaobj.h>
 #include <engine/fifo.h>
 
-#define _(a,b) { (a), ((1 << (a)) | (b)) }
+#define _(a,b) { (a), ((1ULL << (a)) | (b)) }
 static const struct {
-       int subdev;
-       u32 mask;
+       u64 subdev;
+       u64 mask;
 } fifo_engine[] = {
-       _(NVDEV_ENGINE_GR      , (1 << NVDEV_ENGINE_SW)),
+       _(NVDEV_ENGINE_GR      , (1ULL << NVDEV_ENGINE_SW)),
        _(NVDEV_ENGINE_VP      , 0),
        _(NVDEV_ENGINE_PPP     , 0),
        _(NVDEV_ENGINE_BSP     , 0),
 
        struct nouveau_object base;
 
        struct nouveau_sclass *sclass;
-       u32 engine;
+       u64 engine;
 
        int  (*context_attach)(struct nouveau_object *,
                               struct nouveau_object *);
 
                                  struct nouveau_object *,
                                  struct nouveau_oclass *,
                                  int bar, u32 addr, u32 size, u32 push,
-                                 u32 engmask, int len, void **);
+                                 u64 engmask, int len, void **);
 void nouveau_fifo_channel_destroy(struct nouveau_fifo_chan *);
 
 #define _nouveau_fifo_channel_init _nouveau_namedb_init