Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
a4154bbf
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
a4154bbf
编写于
2月 10, 2011
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nv50-nvc0: move vm bind/unbind to move_notify hook
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
db5c8e29
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
37 addition
and
22 deletion
+37
-22
drivers/gpu/drm/nouveau/nouveau_bo.c
drivers/gpu/drm/nouveau/nouveau_bo.c
+37
-22
未找到文件。
drivers/gpu/drm/nouveau/nouveau_bo.c
浏览文件 @
a4154bbf
...
...
@@ -805,6 +805,25 @@ nouveau_bo_move_flips(struct ttm_buffer_object *bo, bool evict, bool intr,
return
ret
;
}
static
void
nouveau_bo_move_ntfy
(
struct
ttm_buffer_object
*
bo
,
struct
ttm_mem_reg
*
new_mem
)
{
struct
drm_nouveau_private
*
dev_priv
=
nouveau_bdev
(
bo
->
bdev
);
struct
nouveau_bo
*
nvbo
=
nouveau_bo
(
bo
);
if
(
dev_priv
->
card_type
<
NV_50
||
nvbo
->
no_vm
)
return
;
switch
(
new_mem
->
mem_type
)
{
case
TTM_PL_VRAM
:
nouveau_vm_map
(
&
nvbo
->
vma
,
new_mem
->
mm_node
);
break
;
case
TTM_PL_TT
:
default:
break
;
}
}
static
int
nouveau_bo_vm_bind
(
struct
ttm_buffer_object
*
bo
,
struct
ttm_mem_reg
*
new_mem
,
struct
nouveau_tile_reg
**
new_tile
)
...
...
@@ -812,19 +831,13 @@ nouveau_bo_vm_bind(struct ttm_buffer_object *bo, struct ttm_mem_reg *new_mem,
struct
drm_nouveau_private
*
dev_priv
=
nouveau_bdev
(
bo
->
bdev
);
struct
drm_device
*
dev
=
dev_priv
->
dev
;
struct
nouveau_bo
*
nvbo
=
nouveau_bo
(
bo
);
u
int64_t
offset
;
u
64
offset
=
new_mem
->
start
<<
PAGE_SHIFT
;
if
(
new_mem
->
mem_type
!=
TTM_PL_VRAM
)
{
/* Nothing to do. */
*
new_tile
=
NULL
;
*
new_tile
=
NULL
;
if
(
new_mem
->
mem_type
!=
TTM_PL_VRAM
)
return
0
;
}
offset
=
new_mem
->
start
<<
PAGE_SHIFT
;
if
(
dev_priv
->
chan_vm
)
{
nouveau_vm_map
(
&
nvbo
->
vma
,
new_mem
->
mm_node
);
}
else
if
(
dev_priv
->
card_type
>=
NV_10
)
{
if
(
dev_priv
->
card_type
>=
NV_10
)
{
*
new_tile
=
nv10_mem_set_tiling
(
dev
,
offset
,
new_mem
->
size
,
nvbo
->
tile_mode
,
nvbo
->
tile_flags
);
...
...
@@ -841,11 +854,8 @@ nouveau_bo_vm_cleanup(struct ttm_buffer_object *bo,
struct
drm_nouveau_private
*
dev_priv
=
nouveau_bdev
(
bo
->
bdev
);
struct
drm_device
*
dev
=
dev_priv
->
dev
;
if
(
dev_priv
->
card_type
>=
NV_10
&&
dev_priv
->
card_type
<
NV_50
)
{
nv10_mem_put_tile_region
(
dev
,
*
old_tile
,
bo
->
sync_obj
);
*
old_tile
=
new_tile
;
}
nv10_mem_put_tile_region
(
dev
,
*
old_tile
,
bo
->
sync_obj
);
*
old_tile
=
new_tile
;
}
static
int
...
...
@@ -859,9 +869,11 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict, bool intr,
struct
nouveau_tile_reg
*
new_tile
=
NULL
;
int
ret
=
0
;
ret
=
nouveau_bo_vm_bind
(
bo
,
new_mem
,
&
new_tile
);
if
(
ret
)
return
ret
;
if
(
dev_priv
->
card_type
<
NV_50
)
{
ret
=
nouveau_bo_vm_bind
(
bo
,
new_mem
,
&
new_tile
);
if
(
ret
)
return
ret
;
}
/* Fake bo copy. */
if
(
old_mem
->
mem_type
==
TTM_PL_SYSTEM
&&
!
bo
->
ttm
)
{
...
...
@@ -892,10 +904,12 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict, bool intr,
ret
=
ttm_bo_move_memcpy
(
bo
,
evict
,
no_wait_reserve
,
no_wait_gpu
,
new_mem
);
out:
if
(
ret
)
nouveau_bo_vm_cleanup
(
bo
,
NULL
,
&
new_tile
);
else
nouveau_bo_vm_cleanup
(
bo
,
new_tile
,
&
nvbo
->
tile
);
if
(
dev_priv
->
card_type
<
NV_50
)
{
if
(
ret
)
nouveau_bo_vm_cleanup
(
bo
,
NULL
,
&
new_tile
);
else
nouveau_bo_vm_cleanup
(
bo
,
new_tile
,
&
nvbo
->
tile
);
}
return
ret
;
}
...
...
@@ -1039,6 +1053,7 @@ struct ttm_bo_driver nouveau_bo_driver = {
.
invalidate_caches
=
nouveau_bo_invalidate_caches
,
.
init_mem_type
=
nouveau_bo_init_mem_type
,
.
evict_flags
=
nouveau_bo_evict_flags
,
.
move_notify
=
nouveau_bo_move_ntfy
,
.
move
=
nouveau_bo_move
,
.
verify_access
=
nouveau_bo_verify_access
,
.
sync_obj_signaled
=
__nouveau_fence_signalled
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录