Commit 9100468d authored by Ben Skeggs's avatar Ben Skeggs

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

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 0541324a
...@@ -265,7 +265,7 @@ struct nouveau_instmem_engine { ...@@ -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 *); ...@@ -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 *); ...@@ -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 *); ...@@ -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 *);
......
...@@ -112,7 +112,7 @@ nouveau_gpuobj_new(struct drm_device *dev, struct nouveau_channel *chan, ...@@ -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;
......
...@@ -99,7 +99,7 @@ nv04_instmem_takedown(struct drm_device *dev) ...@@ -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;
} }
......
...@@ -322,19 +322,19 @@ nv50_instmem_resume(struct drm_device *dev) ...@@ -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); *size = ALIGN(*size, 4096);
if (*sz == 0) if (*size == 0)
return -EINVAL; return -EINVAL;
ret = nouveau_bo_new(dev, NULL, *sz, 0, TTM_PL_FLAG_VRAM, 0, 0x0000, ret = nouveau_bo_new(dev, NULL, *size, align, TTM_PL_FLAG_VRAM,
true, false, &gpuobj->im_backing); 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;
......
...@@ -28,7 +28,7 @@ ...@@ -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, ...@@ -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, ret = nouveau_bo_new(dev, NULL, *size, align, TTM_PL_FLAG_VRAM,
true, false, &gpuobj->im_backing); 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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment