drm/nouveau: pass gpuobj alignment request down into backing allocator
authorBen Skeggs <bskeggs@redhat.com>
Thu, 14 Oct 2010 23:15:26 +0000 (09:15 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 3 Dec 2010 05:06:51 +0000 (15:06 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_drv.h
drivers/gpu/drm/nouveau/nouveau_object.c
drivers/gpu/drm/nouveau/nv04_instmem.c
drivers/gpu/drm/nouveau/nv50_instmem.c
drivers/gpu/drm/nouveau/nvc0_instmem.c

index d152bc334fd656765812e06a9d344a699232e9d3..1d474f526986098679be8200d7825e10854ed98f 100644 (file)
@@ -265,7 +265,7 @@ struct nouveau_instmem_engine {
        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 *);
@@ -1121,7 +1121,7 @@ extern void nv04_instmem_takedown(struct drm_device *);
 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 *);
@@ -1133,7 +1133,7 @@ extern void nv50_instmem_takedown(struct drm_device *);
 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 *);
@@ -1147,7 +1147,7 @@ extern void nvc0_instmem_takedown(struct drm_device *);
 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 *);
index ce9958a30175389fcbafe3baee66f004a031c863..0b8183edfcd7af9cbc9476eb1b1d8753de913944 100644 (file)
@@ -112,7 +112,7 @@ nouveau_gpuobj_new(struct drm_device *dev, struct nouveau_channel *chan,
                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;
index 0b5ae297abdecb0d4403bedf8b4d84ad75940ef9..554e55d0ec48e6db5e608d2383ede8a98d547013 100644 (file)
@@ -99,7 +99,7 @@ nv04_instmem_takedown(struct drm_device *dev)
 
 int
 nv04_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
-                     uint32_t *sz)
+                     u32 *size, u32 align)
 {
        return 0;
 }
index 0651e7629235171b5b239f5b151be925986264d2..2c98eb176d645ce1af615007ee7654daef385dfc 100644 (file)
@@ -322,19 +322,19 @@ nv50_instmem_resume(struct drm_device *dev)
 
 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;
index 13a0f78a9088c3b57c25ab148819ef6e47b914cb..7b4e71f5c274e90e1152d263bd188ceede7b83c0 100644 (file)
@@ -28,7 +28,7 @@
 
 int
 nvc0_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
-                     uint32_t *size)
+                     u32 *size, u32 align)
 {
        int ret;
 
@@ -36,8 +36,8 @@ nvc0_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
        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;