drm/nouveau: pass gpuobj alignment request down into backing allocator
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
0541324abc
commit
9100468d1b
|
@ -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 *);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
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 @@
|
||||||
|
|
||||||
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,
|
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;
|
||||||
|
|
Loading…
Reference in New Issue