drm/nouveau: pass domain rather than ttm flags to gem_new()
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
@@ -1352,7 +1352,7 @@ static inline struct nouveau_fence *nouveau_fence_ref(struct nouveau_fence *obj)
|
|||||||
|
|
||||||
/* nouveau_gem.c */
|
/* nouveau_gem.c */
|
||||||
extern int nouveau_gem_new(struct drm_device *, struct nouveau_channel *,
|
extern int nouveau_gem_new(struct drm_device *, struct nouveau_channel *,
|
||||||
int size, int align, uint32_t flags,
|
int size, int align, uint32_t domain,
|
||||||
uint32_t tile_mode, uint32_t tile_flags,
|
uint32_t tile_mode, uint32_t tile_flags,
|
||||||
struct nouveau_bo **);
|
struct nouveau_bo **);
|
||||||
extern int nouveau_gem_object_new(struct drm_gem_object *);
|
extern int nouveau_gem_object_new(struct drm_gem_object *);
|
||||||
|
@@ -296,8 +296,8 @@ nouveau_fbcon_create(struct nouveau_fbdev *nfbdev,
|
|||||||
size = mode_cmd.pitch * mode_cmd.height;
|
size = mode_cmd.pitch * mode_cmd.height;
|
||||||
size = roundup(size, PAGE_SIZE);
|
size = roundup(size, PAGE_SIZE);
|
||||||
|
|
||||||
ret = nouveau_gem_new(dev, dev_priv->channel, size, 0, TTM_PL_FLAG_VRAM,
|
ret = nouveau_gem_new(dev, dev_priv->channel, size, 0,
|
||||||
0, 0x0000, &nvbo);
|
NOUVEAU_GEM_DOMAIN_VRAM, 0, 0x0000, &nvbo);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
NV_ERROR(dev, "failed to allocate framebuffer\n");
|
NV_ERROR(dev, "failed to allocate framebuffer\n");
|
||||||
goto out;
|
goto out;
|
||||||
|
@@ -61,12 +61,20 @@ nouveau_gem_object_del(struct drm_gem_object *gem)
|
|||||||
|
|
||||||
int
|
int
|
||||||
nouveau_gem_new(struct drm_device *dev, struct nouveau_channel *chan,
|
nouveau_gem_new(struct drm_device *dev, struct nouveau_channel *chan,
|
||||||
int size, int align, uint32_t flags, uint32_t tile_mode,
|
int size, int align, uint32_t domain, uint32_t tile_mode,
|
||||||
uint32_t tile_flags, struct nouveau_bo **pnvbo)
|
uint32_t tile_flags, struct nouveau_bo **pnvbo)
|
||||||
{
|
{
|
||||||
struct nouveau_bo *nvbo;
|
struct nouveau_bo *nvbo;
|
||||||
|
u32 flags = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (domain & NOUVEAU_GEM_DOMAIN_VRAM)
|
||||||
|
flags |= TTM_PL_FLAG_VRAM;
|
||||||
|
if (domain & NOUVEAU_GEM_DOMAIN_GART)
|
||||||
|
flags |= TTM_PL_FLAG_TT;
|
||||||
|
if (!flags || domain & NOUVEAU_GEM_DOMAIN_CPU)
|
||||||
|
flags |= TTM_PL_FLAG_SYSTEM;
|
||||||
|
|
||||||
ret = nouveau_bo_new(dev, chan, size, align, flags, tile_mode,
|
ret = nouveau_bo_new(dev, chan, size, align, flags, tile_mode,
|
||||||
tile_flags, pnvbo);
|
tile_flags, pnvbo);
|
||||||
if (ret)
|
if (ret)
|
||||||
@@ -110,19 +118,11 @@ nouveau_gem_ioctl_new(struct drm_device *dev, void *data,
|
|||||||
struct drm_nouveau_gem_new *req = data;
|
struct drm_nouveau_gem_new *req = data;
|
||||||
struct nouveau_bo *nvbo = NULL;
|
struct nouveau_bo *nvbo = NULL;
|
||||||
struct nouveau_channel *chan = NULL;
|
struct nouveau_channel *chan = NULL;
|
||||||
uint32_t flags = 0;
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (unlikely(dev_priv->ttm.bdev.dev_mapping == NULL))
|
if (unlikely(dev_priv->ttm.bdev.dev_mapping == NULL))
|
||||||
dev_priv->ttm.bdev.dev_mapping = dev_priv->dev->dev_mapping;
|
dev_priv->ttm.bdev.dev_mapping = dev_priv->dev->dev_mapping;
|
||||||
|
|
||||||
if (req->info.domain & NOUVEAU_GEM_DOMAIN_VRAM)
|
|
||||||
flags |= TTM_PL_FLAG_VRAM;
|
|
||||||
if (req->info.domain & NOUVEAU_GEM_DOMAIN_GART)
|
|
||||||
flags |= TTM_PL_FLAG_TT;
|
|
||||||
if (!flags || req->info.domain & NOUVEAU_GEM_DOMAIN_CPU)
|
|
||||||
flags |= TTM_PL_FLAG_SYSTEM;
|
|
||||||
|
|
||||||
if (!dev_priv->engine.vram.flags_valid(dev, req->info.tile_flags)) {
|
if (!dev_priv->engine.vram.flags_valid(dev, req->info.tile_flags)) {
|
||||||
NV_ERROR(dev, "bad page flags: 0x%08x\n", req->info.tile_flags);
|
NV_ERROR(dev, "bad page flags: 0x%08x\n", req->info.tile_flags);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@@ -134,8 +134,9 @@ nouveau_gem_ioctl_new(struct drm_device *dev, void *data,
|
|||||||
return PTR_ERR(chan);
|
return PTR_ERR(chan);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = nouveau_gem_new(dev, chan, req->info.size, req->align, flags,
|
ret = nouveau_gem_new(dev, chan, req->info.size, req->align,
|
||||||
req->info.tile_mode, req->info.tile_flags, &nvbo);
|
req->info.domain, req->info.tile_mode,
|
||||||
|
req->info.tile_flags, &nvbo);
|
||||||
if (chan)
|
if (chan)
|
||||||
nouveau_channel_put(&chan);
|
nouveau_channel_put(&chan);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@@ -39,9 +39,9 @@ nouveau_notifier_init_channel(struct nouveau_channel *chan)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (nouveau_vram_notify)
|
if (nouveau_vram_notify)
|
||||||
flags = TTM_PL_FLAG_VRAM;
|
flags = NOUVEAU_GEM_DOMAIN_VRAM;
|
||||||
else
|
else
|
||||||
flags = TTM_PL_FLAG_TT;
|
flags = NOUVEAU_GEM_DOMAIN_GART;
|
||||||
|
|
||||||
ret = nouveau_gem_new(dev, NULL, PAGE_SIZE, 0, flags, 0, 0, &ntfy);
|
ret = nouveau_gem_new(dev, NULL, PAGE_SIZE, 0, flags, 0, 0, &ntfy);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
Reference in New Issue
Block a user