Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
d55a43a3
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看板
提交
d55a43a3
编写于
5月 11, 2015
作者:
A
Alex Deucher
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/radeon: add support for vce 1.0 clock gating
Signed-off-by:
N
Alex Deucher
<
alexander.deucher@amd.com
>
上级
a918efab
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
60 addition
and
0 deletion
+60
-0
drivers/gpu/drm/radeon/radeon_asic.c
drivers/gpu/drm/radeon/radeon_asic.c
+2
-0
drivers/gpu/drm/radeon/sid.h
drivers/gpu/drm/radeon/sid.h
+1
-0
drivers/gpu/drm/radeon/vce_v1_0.c
drivers/gpu/drm/radeon/vce_v1_0.c
+57
-0
未找到文件。
drivers/gpu/drm/radeon/radeon_asic.c
浏览文件 @
d55a43a3
...
...
@@ -2455,6 +2455,8 @@ int radeon_asic_init(struct radeon_device *rdev)
/* set num crtcs */
rdev
->
num_crtc
=
4
;
rdev
->
has_uvd
=
true
;
rdev
->
cg_flags
=
RADEON_CG_SUPPORT_VCE_MGCG
;
break
;
case
CHIP_TAHITI
:
case
CHIP_PITCAIRN
:
...
...
drivers/gpu/drm/radeon/sid.h
浏览文件 @
d55a43a3
...
...
@@ -1894,6 +1894,7 @@
#define VCE_RB_RPTR 0x2018c
#define VCE_RB_WPTR 0x20190
#define VCE_CLOCK_GATING_A 0x202f8
# define CGC_DYN_CLOCK_MODE (1 << 16)
#define VCE_CLOCK_GATING_B 0x202fc
#define VCE_UENC_CLOCK_GATING 0x205bc
#define VCE_UENC_REG_CLOCK_GATING 0x205c0
...
...
drivers/gpu/drm/radeon/vce_v1_0.c
浏览文件 @
d55a43a3
...
...
@@ -99,6 +99,61 @@ void vce_v1_0_set_wptr(struct radeon_device *rdev,
WREG32
(
VCE_RB_WPTR2
,
ring
->
wptr
);
}
void
vce_v1_0_enable_mgcg
(
struct
radeon_device
*
rdev
,
bool
enable
)
{
u32
tmp
;
if
(
enable
&&
(
rdev
->
cg_flags
&
RADEON_CG_SUPPORT_VCE_MGCG
))
{
tmp
=
RREG32
(
VCE_CLOCK_GATING_A
);
tmp
|=
CGC_DYN_CLOCK_MODE
;
WREG32
(
VCE_CLOCK_GATING_A
,
tmp
);
tmp
=
RREG32
(
VCE_UENC_CLOCK_GATING
);
tmp
&=
~
0x1ff000
;
tmp
|=
0xff800000
;
WREG32
(
VCE_UENC_CLOCK_GATING
,
tmp
);
tmp
=
RREG32
(
VCE_UENC_REG_CLOCK_GATING
);
tmp
&=
~
0x3ff
;
WREG32
(
VCE_UENC_REG_CLOCK_GATING
,
tmp
);
}
else
{
tmp
=
RREG32
(
VCE_CLOCK_GATING_A
);
tmp
&=
~
CGC_DYN_CLOCK_MODE
;
WREG32
(
VCE_CLOCK_GATING_A
,
tmp
);
tmp
=
RREG32
(
VCE_UENC_CLOCK_GATING
);
tmp
|=
0x1ff000
;
tmp
&=
~
0xff800000
;
WREG32
(
VCE_UENC_CLOCK_GATING
,
tmp
);
tmp
=
RREG32
(
VCE_UENC_REG_CLOCK_GATING
);
tmp
|=
0x3ff
;
WREG32
(
VCE_UENC_REG_CLOCK_GATING
,
tmp
);
}
}
static
void
vce_v1_0_init_cg
(
struct
radeon_device
*
rdev
)
{
u32
tmp
;
tmp
=
RREG32
(
VCE_CLOCK_GATING_A
);
tmp
|=
CGC_DYN_CLOCK_MODE
;
WREG32
(
VCE_CLOCK_GATING_A
,
tmp
);
tmp
=
RREG32
(
VCE_CLOCK_GATING_B
);
tmp
|=
0x1e
;
tmp
&=
~
0xe100e1
;
WREG32
(
VCE_CLOCK_GATING_B
,
tmp
);
tmp
=
RREG32
(
VCE_UENC_CLOCK_GATING
);
tmp
&=
~
0xff9ff000
;
WREG32
(
VCE_UENC_CLOCK_GATING
,
tmp
);
tmp
=
RREG32
(
VCE_UENC_REG_CLOCK_GATING
);
tmp
&=
~
0x3ff
;
WREG32
(
VCE_UENC_REG_CLOCK_GATING
,
tmp
);
}
int
vce_v1_0_load_fw
(
struct
radeon_device
*
rdev
,
uint32_t
*
data
)
{
struct
vce_v1_0_fw_signature
*
sign
=
(
void
*
)
rdev
->
vce_fw
->
data
;
...
...
@@ -219,6 +274,8 @@ int vce_v1_0_resume(struct radeon_device *rdev)
if
(
i
==
10
)
return
-
ETIMEDOUT
;
vce_v1_0_init_cg
(
rdev
);
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录