Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
b03b4e4b
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
161
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看板
提交
b03b4e4b
编写于
2月 28, 2014
作者:
C
Christian König
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/radeon: fix VCE suspend/resume
Signed-off-by:
N
Christian König
<
christian.koenig@amd.com
>
上级
f1e3dc70
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
34 addition
and
30 deletion
+34
-30
drivers/gpu/drm/radeon/radeon.h
drivers/gpu/drm/radeon/radeon.h
+0
-1
drivers/gpu/drm/radeon/radeon_vce.c
drivers/gpu/drm/radeon/radeon_vce.c
+34
-29
未找到文件。
drivers/gpu/drm/radeon/radeon.h
浏览文件 @
b03b4e4b
...
...
@@ -1634,7 +1634,6 @@ int radeon_uvd_send_upll_ctlreq(struct radeon_device *rdev,
struct
radeon_vce
{
struct
radeon_bo
*
vcpu_bo
;
void
*
cpu_addr
;
uint64_t
gpu_addr
;
unsigned
fw_version
;
unsigned
fb_version
;
...
...
drivers/gpu/drm/radeon/radeon_vce.c
浏览文件 @
b03b4e4b
...
...
@@ -119,7 +119,7 @@ int radeon_vce_init(struct radeon_device *rdev)
if
(
rdev
->
vce
.
fw_version
!=
((
40
<<
24
)
|
(
2
<<
16
)
|
(
2
<<
8
)))
return
-
EINVAL
;
/*
load firmware into VRAM
*/
/*
allocate firmware, stack and heap BO
*/
size
=
RADEON_GPU_PAGE_ALIGN
(
rdev
->
vce_fw
->
size
)
+
RADEON_VCE_STACK_SIZE
+
RADEON_VCE_HEAP_SIZE
;
...
...
@@ -130,16 +130,21 @@ int radeon_vce_init(struct radeon_device *rdev)
return
r
;
}
r
=
radeon_vce_resume
(
rdev
);
if
(
r
)
r
=
radeon_bo_reserve
(
rdev
->
vce
.
vcpu_bo
,
false
);
if
(
r
)
{
radeon_bo_unref
(
&
rdev
->
vce
.
vcpu_bo
);
dev_err
(
rdev
->
dev
,
"(%d) failed to reserve VCE bo
\n
"
,
r
);
return
r
;
}
memset
(
rdev
->
vce
.
cpu_addr
,
0
,
size
);
memcpy
(
rdev
->
vce
.
cpu_addr
,
rdev
->
vce_fw
->
data
,
rdev
->
vce_fw
->
size
);
r
=
radeon_vce_suspend
(
rdev
);
if
(
r
)
r
=
radeon_bo_pin
(
rdev
->
vce
.
vcpu_bo
,
RADEON_GEM_DOMAIN_VRAM
,
&
rdev
->
vce
.
gpu_addr
);
radeon_bo_unreserve
(
rdev
->
vce
.
vcpu_bo
);
if
(
r
)
{
radeon_bo_unref
(
&
rdev
->
vce
.
vcpu_bo
);
dev_err
(
rdev
->
dev
,
"(%d) VCE bo pin failed
\n
"
,
r
);
return
r
;
}
for
(
i
=
0
;
i
<
RADEON_MAX_VCE_HANDLES
;
++
i
)
{
atomic_set
(
&
rdev
->
vce
.
handles
[
i
],
0
);
...
...
@@ -158,8 +163,12 @@ int radeon_vce_init(struct radeon_device *rdev)
*/
void
radeon_vce_fini
(
struct
radeon_device
*
rdev
)
{
radeon_vce_suspend
(
rdev
);
if
(
rdev
->
vce
.
vcpu_bo
==
NULL
)
return
;
radeon_bo_unref
(
&
rdev
->
vce
.
vcpu_bo
);
release_firmware
(
rdev
->
vce_fw
);
}
/**
...
...
@@ -167,22 +176,23 @@ void radeon_vce_fini(struct radeon_device *rdev)
*
* @rdev: radeon_device pointer
*
* TODO: Test VCE suspend/resume
*/
int
radeon_vce_suspend
(
struct
radeon_device
*
rdev
)
{
int
r
;
int
i
;
if
(
rdev
->
vce
.
vcpu_bo
==
NULL
)
return
0
;
r
=
radeon_bo_reserve
(
rdev
->
vce
.
vcpu_bo
,
false
);
if
(
!
r
)
{
radeon_bo_kunmap
(
rdev
->
vce
.
vcpu_bo
);
radeon_bo_unpin
(
rdev
->
vce
.
vcpu_bo
);
radeon_bo_unreserve
(
rdev
->
vce
.
vcpu_bo
);
}
return
r
;
for
(
i
=
0
;
i
<
RADEON_MAX_VCE_HANDLES
;
++
i
)
if
(
atomic_read
(
&
rdev
->
vce
.
handles
[
i
]))
break
;
if
(
i
==
RADEON_MAX_VCE_HANDLES
)
return
0
;
/* TODO: suspending running encoding sessions isn't supported */
return
-
EINVAL
;
}
/**
...
...
@@ -190,10 +200,10 @@ int radeon_vce_suspend(struct radeon_device *rdev)
*
* @rdev: radeon_device pointer
*
* TODO: Test VCE suspend/resume
*/
int
radeon_vce_resume
(
struct
radeon_device
*
rdev
)
{
void
*
cpu_addr
;
int
r
;
if
(
rdev
->
vce
.
vcpu_bo
==
NULL
)
...
...
@@ -201,26 +211,21 @@ int radeon_vce_resume(struct radeon_device *rdev)
r
=
radeon_bo_reserve
(
rdev
->
vce
.
vcpu_bo
,
false
);
if
(
r
)
{
radeon_bo_unref
(
&
rdev
->
vce
.
vcpu_bo
);
dev_err
(
rdev
->
dev
,
"(%d) failed to reserve VCE bo
\n
"
,
r
);
return
r
;
}
r
=
radeon_bo_pin
(
rdev
->
vce
.
vcpu_bo
,
RADEON_GEM_DOMAIN_VRAM
,
&
rdev
->
vce
.
gpu_addr
);
r
=
radeon_bo_kmap
(
rdev
->
vce
.
vcpu_bo
,
&
cpu_addr
);
if
(
r
)
{
radeon_bo_unreserve
(
rdev
->
vce
.
vcpu_bo
);
radeon_bo_unref
(
&
rdev
->
vce
.
vcpu_bo
);
dev_err
(
rdev
->
dev
,
"(%d) VCE bo pin failed
\n
"
,
r
);
return
r
;
}
r
=
radeon_bo_kmap
(
rdev
->
vce
.
vcpu_bo
,
&
rdev
->
vce
.
cpu_addr
);
if
(
r
)
{
dev_err
(
rdev
->
dev
,
"(%d) VCE map failed
\n
"
,
r
);
return
r
;
}
memcpy
(
cpu_addr
,
rdev
->
vce_fw
->
data
,
rdev
->
vce_fw
->
size
);
radeon_bo_kunmap
(
rdev
->
vce
.
vcpu_bo
);
radeon_bo_unreserve
(
rdev
->
vce
.
vcpu_bo
);
return
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录