Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
fdf53241
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
fdf53241
编写于
5月 04, 2012
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nva3/ttm: use copy engine for async buffer moves
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
5490e5df
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
40 addition
and
1 deletion
+40
-1
drivers/gpu/drm/nouveau/nouveau_bo.c
drivers/gpu/drm/nouveau/nouveau_bo.c
+40
-1
未找到文件。
drivers/gpu/drm/nouveau/nouveau_bo.c
浏览文件 @
fdf53241
...
...
@@ -561,6 +561,44 @@ nvc0_bo_move_m2mf(struct nouveau_channel *chan, struct ttm_buffer_object *bo,
return
0
;
}
static
int
nva3_bo_move_copy
(
struct
nouveau_channel
*
chan
,
struct
ttm_buffer_object
*
bo
,
struct
ttm_mem_reg
*
old_mem
,
struct
ttm_mem_reg
*
new_mem
)
{
struct
nouveau_mem
*
node
=
old_mem
->
mm_node
;
u64
src_offset
=
node
->
vma
[
0
].
offset
;
u64
dst_offset
=
node
->
vma
[
1
].
offset
;
u32
page_count
=
new_mem
->
num_pages
;
int
ret
;
page_count
=
new_mem
->
num_pages
;
while
(
page_count
)
{
int
line_count
=
(
page_count
>
8191
)
?
8191
:
page_count
;
ret
=
RING_SPACE
(
chan
,
11
);
if
(
ret
)
return
ret
;
BEGIN_NV04
(
chan
,
NvSubCopy
,
0x030c
,
8
);
OUT_RING
(
chan
,
upper_32_bits
(
src_offset
));
OUT_RING
(
chan
,
lower_32_bits
(
src_offset
));
OUT_RING
(
chan
,
upper_32_bits
(
dst_offset
));
OUT_RING
(
chan
,
lower_32_bits
(
dst_offset
));
OUT_RING
(
chan
,
PAGE_SIZE
);
OUT_RING
(
chan
,
PAGE_SIZE
);
OUT_RING
(
chan
,
PAGE_SIZE
);
OUT_RING
(
chan
,
line_count
);
BEGIN_NV04
(
chan
,
NvSubCopy
,
0x0300
,
1
);
OUT_RING
(
chan
,
0x00000110
);
page_count
-=
line_count
;
src_offset
+=
(
PAGE_SIZE
*
line_count
);
dst_offset
+=
(
PAGE_SIZE
*
line_count
);
}
return
0
;
}
static
int
nv98_bo_move_exec
(
struct
nouveau_channel
*
chan
,
struct
ttm_buffer_object
*
bo
,
struct
ttm_mem_reg
*
old_mem
,
struct
ttm_mem_reg
*
new_mem
)
...
...
@@ -856,8 +894,9 @@ nouveau_bo_move_init(struct nouveau_channel *chan)
int
(
*
init
)(
struct
nouveau_channel
*
,
u32
handle
);
}
_methods
[]
=
{
{
"COPY"
,
0xa0b5
,
nve0_bo_move_copy
,
nvc0_bo_move_init
},
{
"
M2MF"
,
0x9039
,
nvc0_bo_move_m2mf
,
nvc
0_bo_move_init
},
{
"
COPY"
,
0x85b5
,
nva3_bo_move_copy
,
nv5
0_bo_move_init
},
{
"CRYPT"
,
0x74c1
,
nv84_bo_move_exec
,
nv50_bo_move_init
},
{
"M2MF"
,
0x9039
,
nvc0_bo_move_m2mf
,
nvc0_bo_move_init
},
{
"M2MF"
,
0x5039
,
nv50_bo_move_m2mf
,
nv50_bo_move_init
},
{
"M2MF"
,
0x0039
,
nv04_bo_move_m2mf
,
nv04_bo_move_init
},
{},
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录