提交 6ba9a683 编写于 作者: B Ben Skeggs

drm/nouveau: pass domain rather than ttm flags to gem_new()

Signed-off-by: NBen Skeggs <bskeggs@redhat.com>
上级 a6704788
...@@ -1352,7 +1352,7 @@ static inline struct nouveau_fence *nouveau_fence_ref(struct nouveau_fence *obj) ...@@ -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, ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册