void    (*resume)(struct drm_device *dev);
 
        int     (*populate)(struct drm_device *, struct nouveau_gpuobj *,
-                           uint32_t *size);
+                           u32 *size, u32 align);
        void    (*clear)(struct drm_device *, struct nouveau_gpuobj *);
        int     (*bind)(struct drm_device *, struct nouveau_gpuobj *);
        int     (*unbind)(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nv04_instmem_suspend(struct drm_device *);
 extern void nv04_instmem_resume(struct drm_device *);
 extern int  nv04_instmem_populate(struct drm_device *, struct nouveau_gpuobj *,
-                                 uint32_t *size);
+                                 u32 *size, u32 align);
 extern void nv04_instmem_clear(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nv04_instmem_bind(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nv04_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nv50_instmem_suspend(struct drm_device *);
 extern void nv50_instmem_resume(struct drm_device *);
 extern int  nv50_instmem_populate(struct drm_device *, struct nouveau_gpuobj *,
-                                 uint32_t *size);
+                                 u32 *size, u32 align);
 extern void nv50_instmem_clear(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nv50_instmem_bind(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nv50_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nvc0_instmem_suspend(struct drm_device *);
 extern void nvc0_instmem_resume(struct drm_device *);
 extern int  nvc0_instmem_populate(struct drm_device *, struct nouveau_gpuobj *,
-                                 uint32_t *size);
+                                 u32 *size, u32 align);
 extern void nvc0_instmem_clear(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nvc0_instmem_bind(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nvc0_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *);
 
                NV_DEBUG(dev, "global heap\n");
 
                /* allocate backing pages, sets vinst */
-               ret = engine->instmem.populate(dev, gpuobj, &size);
+               ret = engine->instmem.populate(dev, gpuobj, &size, align);
                if (ret) {
                        nouveau_gpuobj_ref(NULL, &gpuobj);
                        return ret;
 
 
 int
 nv04_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
-                     uint32_t *sz)
+                     u32 *size, u32 align)
 {
        return 0;
 }
 
 
 int
 nv50_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
-                     uint32_t *sz)
+                     u32 *size, u32 align)
 {
        int ret;
 
        if (gpuobj->im_backing)
                return -EINVAL;
 
-       *sz = ALIGN(*sz, 4096);
-       if (*sz == 0)
+       *size = ALIGN(*size, 4096);
+       if (*size == 0)
                return -EINVAL;
 
-       ret = nouveau_bo_new(dev, NULL, *sz, 0, TTM_PL_FLAG_VRAM, 0, 0x0000,
-                            true, false, &gpuobj->im_backing);
+       ret = nouveau_bo_new(dev, NULL, *size, align, TTM_PL_FLAG_VRAM,
+                            0, 0x0000, true, false, &gpuobj->im_backing);
        if (ret) {
                NV_ERROR(dev, "error getting PRAMIN backing pages: %d\n", ret);
                return ret;
 
 
 int
 nvc0_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
-                     uint32_t *size)
+                     u32 *size, u32 align)
 {
        int ret;
 
        if (*size == 0)
                return -EINVAL;
 
-       ret = nouveau_bo_new(dev, NULL, *size, 0, TTM_PL_FLAG_VRAM, 0, 0x0000,
-                            true, false, &gpuobj->im_backing);
+       ret = nouveau_bo_new(dev, NULL, *size, align, TTM_PL_FLAG_VRAM,
+                            0, 0x0000, true, false, &gpuobj->im_backing);
        if (ret) {
                NV_ERROR(dev, "error getting PRAMIN backing pages: %d\n", ret);
                return ret;