Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
bd8cd539
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看板
提交
bd8cd539
编写于
4月 12, 2013
作者:
A
Alex Deucher
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/radeon: add clearstate init for verde power gating
Signed-off-by:
N
Alex Deucher
<
alexander.deucher@amd.com
>
上级
6d8cf000
变更
2
展开全部
隐藏空白更改
内联
并排
Showing
2 changed file
with
1004 addition
and
5 deletion
+1004
-5
drivers/gpu/drm/radeon/clearstate_si.h
drivers/gpu/drm/radeon/clearstate_si.h
+941
-0
drivers/gpu/drm/radeon/si.c
drivers/gpu/drm/radeon/si.c
+63
-5
未找到文件。
drivers/gpu/drm/radeon/clearstate_si.h
0 → 100644
浏览文件 @
bd8cd539
此差异已折叠。
点击以展开。
drivers/gpu/drm/radeon/si.c
浏览文件 @
bd8cd539
...
...
@@ -32,6 +32,7 @@
#include "sid.h"
#include "atom.h"
#include "si_blit_shaders.h"
#include "clearstate_si.h"
#define SI_PFP_UCODE_SIZE 2144
#define SI_PM4_UCODE_SIZE 2144
...
...
@@ -4583,10 +4584,16 @@ void si_rlc_fini(struct radeon_device *rdev)
}
}
#define RLC_CLEAR_STATE_END_MARKER 0x00000001
int
si_rlc_init
(
struct
radeon_device
*
rdev
)
{
int
r
,
i
;
volatile
u32
*
dst_ptr
;
u32
dws
,
data
,
i
,
j
,
k
,
reg_num
;
u32
reg_list_num
,
reg_list_hdr_blk_index
,
reg_list_blk_index
;
u64
reg_list_mc_addr
;
const
struct
cs_section_def
*
cs_data
=
si_cs_data
;
int
r
;
/* save restore block */
if
(
rdev
->
rlc
.
save_restore_obj
==
NULL
)
{
...
...
@@ -4630,10 +4637,20 @@ int si_rlc_init(struct radeon_device *rdev)
radeon_bo_unreserve
(
rdev
->
rlc
.
save_restore_obj
);
/* clear state block */
reg_list_num
=
0
;
dws
=
0
;
for
(
i
=
0
;
cs_data
[
i
].
section
!=
NULL
;
i
++
)
{
for
(
j
=
0
;
cs_data
[
i
].
section
[
j
].
extent
!=
NULL
;
j
++
)
{
reg_list_num
++
;
dws
+=
cs_data
[
i
].
section
[
j
].
reg_count
;
}
}
reg_list_blk_index
=
(
3
*
reg_list_num
+
2
);
dws
+=
reg_list_blk_index
;
if
(
rdev
->
rlc
.
clear_state_obj
==
NULL
)
{
r
=
radeon_bo_create
(
rdev
,
RADEON_GPU_PAGE_SIZE
,
PAGE_SIZE
,
true
,
RADEON_GEM_DOMAIN_VRAM
,
NULL
,
&
rdev
->
rlc
.
clear_state_obj
);
r
=
radeon_bo_create
(
rdev
,
dws
*
4
,
PAGE_SIZE
,
true
,
RADEON_GEM_DOMAIN_VRAM
,
NULL
,
&
rdev
->
rlc
.
clear_state_obj
);
if
(
r
)
{
dev_warn
(
rdev
->
dev
,
"(%d) create RLC c bo failed
\n
"
,
r
);
si_rlc_fini
(
rdev
);
...
...
@@ -4647,12 +4664,53 @@ int si_rlc_init(struct radeon_device *rdev)
}
r
=
radeon_bo_pin
(
rdev
->
rlc
.
clear_state_obj
,
RADEON_GEM_DOMAIN_VRAM
,
&
rdev
->
rlc
.
clear_state_gpu_addr
);
radeon_bo_unreserve
(
rdev
->
rlc
.
clear_state_obj
);
if
(
r
)
{
radeon_bo_unreserve
(
rdev
->
rlc
.
clear_state_obj
);
dev_warn
(
rdev
->
dev
,
"(%d) pin RLC c bo failed
\n
"
,
r
);
si_rlc_fini
(
rdev
);
return
r
;
}
r
=
radeon_bo_kmap
(
rdev
->
rlc
.
clear_state_obj
,
(
void
**
)
&
rdev
->
rlc
.
cs_ptr
);
if
(
r
)
{
dev_warn
(
rdev
->
dev
,
"(%d) map RLC c bo failed
\n
"
,
r
);
si_rlc_fini
(
rdev
);
return
r
;
}
/* set up the cs buffer */
dst_ptr
=
rdev
->
rlc
.
cs_ptr
;
reg_list_hdr_blk_index
=
0
;
reg_list_mc_addr
=
rdev
->
rlc
.
clear_state_gpu_addr
+
(
reg_list_blk_index
*
4
);
data
=
upper_32_bits
(
reg_list_mc_addr
);
dst_ptr
[
reg_list_hdr_blk_index
]
=
data
;
reg_list_hdr_blk_index
++
;
for
(
i
=
0
;
cs_data
[
i
].
section
!=
NULL
;
i
++
)
{
for
(
j
=
0
;
cs_data
[
i
].
section
[
j
].
extent
!=
NULL
;
j
++
)
{
reg_num
=
cs_data
[
i
].
section
[
j
].
reg_count
;
data
=
reg_list_mc_addr
&
0xffffffff
;
dst_ptr
[
reg_list_hdr_blk_index
]
=
data
;
reg_list_hdr_blk_index
++
;
data
=
(
cs_data
[
i
].
section
[
j
].
reg_index
*
4
)
&
0xffffffff
;
dst_ptr
[
reg_list_hdr_blk_index
]
=
data
;
reg_list_hdr_blk_index
++
;
data
=
0x08000000
|
(
reg_num
*
4
);
dst_ptr
[
reg_list_hdr_blk_index
]
=
data
;
reg_list_hdr_blk_index
++
;
for
(
k
=
0
;
k
<
reg_num
;
k
++
)
{
data
=
cs_data
[
i
].
section
[
j
].
extent
[
k
];
dst_ptr
[
reg_list_blk_index
+
k
]
=
data
;
}
reg_list_mc_addr
+=
reg_num
*
4
;
reg_list_blk_index
+=
reg_num
;
}
}
dst_ptr
[
reg_list_hdr_blk_index
]
=
RLC_CLEAR_STATE_END_MARKER
;
radeon_bo_kunmap
(
rdev
->
rlc
.
clear_state_obj
);
radeon_bo_unreserve
(
rdev
->
rlc
.
clear_state_obj
);
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录