Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
1a46098e
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1a46098e
编写于
5月 04, 2012
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nvc0/ttm: use copy engines for async buffer moves
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
fdf53241
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
51 addition
and
9 deletion
+51
-9
drivers/gpu/drm/nouveau/nouveau_bo.c
drivers/gpu/drm/nouveau/nouveau_bo.c
+51
-9
未找到文件。
drivers/gpu/drm/nouveau/nouveau_bo.c
浏览文件 @
1a46098e
...
...
@@ -522,6 +522,44 @@ nvc0_bo_move_init(struct nouveau_channel *chan, u32 handle)
return
ret
;
}
static
int
nvc0_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_NVC0
(
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_NVC0
(
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
nvc0_bo_move_m2mf
(
struct
nouveau_channel
*
chan
,
struct
ttm_buffer_object
*
bo
,
struct
ttm_mem_reg
*
old_mem
,
struct
ttm_mem_reg
*
new_mem
)
...
...
@@ -887,28 +925,32 @@ nouveau_bo_move_init(struct nouveau_channel *chan)
struct
drm_nouveau_private
*
dev_priv
=
chan
->
dev
->
dev_private
;
static
const
struct
{
const
char
*
name
;
int
engine
;
u32
oclass
;
int
(
*
exec
)(
struct
nouveau_channel
*
,
struct
ttm_buffer_object
*
,
struct
ttm_mem_reg
*
,
struct
ttm_mem_reg
*
);
int
(
*
init
)(
struct
nouveau_channel
*
,
u32
handle
);
}
_methods
[]
=
{
{
"COPY"
,
0xa0b5
,
nve0_bo_move_copy
,
nvc0_bo_move_init
},
{
"COPY"
,
0x85b5
,
nva3_bo_move_copy
,
nv50_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
},
{
"COPY"
,
0
,
0xa0b5
,
nve0_bo_move_copy
,
nvc0_bo_move_init
},
{
"COPY1"
,
5
,
0x90b8
,
nvc0_bo_move_copy
,
nvc0_bo_move_init
},
{
"COPY0"
,
4
,
0x90b5
,
nvc0_bo_move_copy
,
nvc0_bo_move_init
},
{
"COPY"
,
0
,
0x85b5
,
nva3_bo_move_copy
,
nv50_bo_move_init
},
{
"CRYPT"
,
0
,
0x74c1
,
nv84_bo_move_exec
,
nv50_bo_move_init
},
{
"M2MF"
,
0
,
0x9039
,
nvc0_bo_move_m2mf
,
nvc0_bo_move_init
},
{
"M2MF"
,
0
,
0x5039
,
nv50_bo_move_m2mf
,
nv50_bo_move_init
},
{
"M2MF"
,
0
,
0x0039
,
nv04_bo_move_m2mf
,
nv04_bo_move_init
},
{},
{
"CRYPT"
,
0x88b4
,
nv98_bo_move_exec
,
nv50_bo_move_init
},
{
"CRYPT"
,
0
,
0
x88b4
,
nv98_bo_move_exec
,
nv50_bo_move_init
},
},
*
mthd
=
_methods
;
const
char
*
name
=
"CPU"
;
int
ret
;
do
{
ret
=
nouveau_gpuobj_gr_new
(
chan
,
mthd
->
oclass
,
mthd
->
oclass
);
u32
handle
=
(
mthd
->
engine
<<
16
)
|
mthd
->
oclass
;
ret
=
nouveau_gpuobj_gr_new
(
chan
,
handle
,
mthd
->
oclass
);
if
(
ret
==
0
)
{
ret
=
mthd
->
init
(
chan
,
mthd
->
oclass
);
ret
=
mthd
->
init
(
chan
,
handle
);
if
(
ret
==
0
)
{
dev_priv
->
ttm
.
move
=
mthd
->
exec
;
name
=
mthd
->
name
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录