Browse Source

drm/nouveau: pass gpuobj alignment request down into backing allocator

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Ben Skeggs 14 years ago
parent
commit
9100468d1b

+ 4 - 4
drivers/gpu/drm/nouveau/nouveau_drv.h

@@ -265,7 +265,7 @@ struct nouveau_instmem_engine {
 	void	(*resume)(struct drm_device *dev);
 	void	(*resume)(struct drm_device *dev);
 
 
 	int	(*populate)(struct drm_device *, struct nouveau_gpuobj *,
 	int	(*populate)(struct drm_device *, struct nouveau_gpuobj *,
-			    uint32_t *size);
+			    u32 *size, u32 align);
 	void	(*clear)(struct drm_device *, struct nouveau_gpuobj *);
 	void	(*clear)(struct drm_device *, struct nouveau_gpuobj *);
 	int	(*bind)(struct drm_device *, struct nouveau_gpuobj *);
 	int	(*bind)(struct drm_device *, struct nouveau_gpuobj *);
 	int	(*unbind)(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 int  nv04_instmem_suspend(struct drm_device *);
 extern void nv04_instmem_resume(struct drm_device *);
 extern void nv04_instmem_resume(struct drm_device *);
 extern int  nv04_instmem_populate(struct drm_device *, struct nouveau_gpuobj *,
 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 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_bind(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nv04_instmem_unbind(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 int  nv50_instmem_suspend(struct drm_device *);
 extern void nv50_instmem_resume(struct drm_device *);
 extern void nv50_instmem_resume(struct drm_device *);
 extern int  nv50_instmem_populate(struct drm_device *, struct nouveau_gpuobj *,
 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 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_bind(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nv50_instmem_unbind(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 int  nvc0_instmem_suspend(struct drm_device *);
 extern void nvc0_instmem_resume(struct drm_device *);
 extern void nvc0_instmem_resume(struct drm_device *);
 extern int  nvc0_instmem_populate(struct drm_device *, struct nouveau_gpuobj *,
 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 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_bind(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nvc0_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *);
 extern int  nvc0_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *);

+ 1 - 1
drivers/gpu/drm/nouveau/nouveau_object.c

@@ -112,7 +112,7 @@ nouveau_gpuobj_new(struct drm_device *dev, struct nouveau_channel *chan,
 		NV_DEBUG(dev, "global heap\n");
 		NV_DEBUG(dev, "global heap\n");
 
 
 		/* allocate backing pages, sets vinst */
 		/* allocate backing pages, sets vinst */
-		ret = engine->instmem.populate(dev, gpuobj, &size);
+		ret = engine->instmem.populate(dev, gpuobj, &size, align);
 		if (ret) {
 		if (ret) {
 			nouveau_gpuobj_ref(NULL, &gpuobj);
 			nouveau_gpuobj_ref(NULL, &gpuobj);
 			return ret;
 			return ret;

+ 1 - 1
drivers/gpu/drm/nouveau/nv04_instmem.c

@@ -99,7 +99,7 @@ nv04_instmem_takedown(struct drm_device *dev)
 
 
 int
 int
 nv04_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
 nv04_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
-		      uint32_t *sz)
+		      u32 *size, u32 align)
 {
 {
 	return 0;
 	return 0;
 }
 }

+ 5 - 5
drivers/gpu/drm/nouveau/nv50_instmem.c

@@ -322,19 +322,19 @@ nv50_instmem_resume(struct drm_device *dev)
 
 
 int
 int
 nv50_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
 nv50_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
-		      uint32_t *sz)
+		      u32 *size, u32 align)
 {
 {
 	int ret;
 	int ret;
 
 
 	if (gpuobj->im_backing)
 	if (gpuobj->im_backing)
 		return -EINVAL;
 		return -EINVAL;
 
 
-	*sz = ALIGN(*sz, 4096);
-	if (*sz == 0)
+	*size = ALIGN(*size, 4096);
+	if (*size == 0)
 		return -EINVAL;
 		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) {
 	if (ret) {
 		NV_ERROR(dev, "error getting PRAMIN backing pages: %d\n", ret);
 		NV_ERROR(dev, "error getting PRAMIN backing pages: %d\n", ret);
 		return ret;
 		return ret;

+ 3 - 3
drivers/gpu/drm/nouveau/nvc0_instmem.c

@@ -28,7 +28,7 @@
 
 
 int
 int
 nvc0_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
 nvc0_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
-		      uint32_t *size)
+		      u32 *size, u32 align)
 {
 {
 	int ret;
 	int ret;
 
 
@@ -36,8 +36,8 @@ nvc0_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
 	if (*size == 0)
 	if (*size == 0)
 		return -EINVAL;
 		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) {
 	if (ret) {
 		NV_ERROR(dev, "error getting PRAMIN backing pages: %d\n", ret);
 		NV_ERROR(dev, "error getting PRAMIN backing pages: %d\n", ret);
 		return ret;
 		return ret;