Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
c44c049f
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
c44c049f
编写于
9年前
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/tmr: switch to device pri macros
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
5718ea32
无相关合并请求
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
33 addition
and
26 deletion
+33
-26
drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
+4
-2
drivers/gpu/drm/nouveau/nvkm/subdev/timer/gk20a.c
drivers/gpu/drm/nouveau/nvkm/subdev/timer/gk20a.c
+3
-2
drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv04.c
drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv04.c
+26
-22
未找到文件。
drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
浏览文件 @
c44c049f
...
...
@@ -27,12 +27,13 @@ bool
nvkm_timer_wait_eq
(
void
*
obj
,
u64
nsec
,
u32
addr
,
u32
mask
,
u32
data
)
{
struct
nvkm_timer
*
ptimer
=
nvkm_timer
(
obj
);
struct
nvkm_device
*
device
=
ptimer
->
subdev
.
device
;
u64
time0
;
time0
=
ptimer
->
read
(
ptimer
);
do
{
if
(
nv_iclass
(
obj
,
NV_SUBDEV_CLASS
))
{
if
((
nv
_rd32
(
obj
,
addr
)
&
mask
)
==
data
)
if
((
nv
km_rd32
(
device
,
addr
)
&
mask
)
==
data
)
return
true
;
}
else
{
if
((
nv_ro32
(
obj
,
addr
)
&
mask
)
==
data
)
...
...
@@ -47,12 +48,13 @@ bool
nvkm_timer_wait_ne
(
void
*
obj
,
u64
nsec
,
u32
addr
,
u32
mask
,
u32
data
)
{
struct
nvkm_timer
*
ptimer
=
nvkm_timer
(
obj
);
struct
nvkm_device
*
device
=
ptimer
->
subdev
.
device
;
u64
time0
;
time0
=
ptimer
->
read
(
ptimer
);
do
{
if
(
nv_iclass
(
obj
,
NV_SUBDEV_CLASS
))
{
if
((
nv
_rd32
(
obj
,
addr
)
&
mask
)
!=
data
)
if
((
nv
km_rd32
(
device
,
addr
)
&
mask
)
!=
data
)
return
true
;
}
else
{
if
((
nv_ro32
(
obj
,
addr
)
&
mask
)
!=
data
)
...
...
This diff is collapsed.
Click to expand it.
drivers/gpu/drm/nouveau/nvkm/subdev/timer/gk20a.c
浏览文件 @
c44c049f
...
...
@@ -27,6 +27,7 @@ static int
gk20a_timer_init
(
struct
nvkm_object
*
object
)
{
struct
nv04_timer
*
tmr
=
(
void
*
)
object
;
struct
nvkm_device
*
device
=
tmr
->
base
.
subdev
.
device
;
u32
hi
=
upper_32_bits
(
tmr
->
suspend_time
);
u32
lo
=
lower_32_bits
(
tmr
->
suspend_time
);
int
ret
;
...
...
@@ -39,8 +40,8 @@ gk20a_timer_init(struct nvkm_object *object)
nv_debug
(
tmr
,
"time high : 0x%08x
\n
"
,
hi
);
/* restore the time before suspend */
nv
_wr32
(
tmr
,
NV04_PTIMER_TIME_1
,
hi
);
nv
_wr32
(
tmr
,
NV04_PTIMER_TIME_0
,
lo
);
nv
km_wr32
(
device
,
NV04_PTIMER_TIME_1
,
hi
);
nv
km_wr32
(
device
,
NV04_PTIMER_TIME_0
,
lo
);
return
0
;
}
...
...
This diff is collapsed.
Click to expand it.
drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv04.c
浏览文件 @
c44c049f
...
...
@@ -26,12 +26,13 @@
static
u64
nv04_timer_read
(
struct
nvkm_timer
*
tmr
)
{
struct
nvkm_device
*
device
=
tmr
->
subdev
.
device
;
u32
hi
,
lo
;
do
{
hi
=
nv
_rd32
(
tmr
,
NV04_PTIMER_TIME_1
);
lo
=
nv
_rd32
(
tmr
,
NV04_PTIMER_TIME_0
);
}
while
(
hi
!=
nv
_rd32
(
tmr
,
NV04_PTIMER_TIME_1
));
hi
=
nv
km_rd32
(
device
,
NV04_PTIMER_TIME_1
);
lo
=
nv
km_rd32
(
device
,
NV04_PTIMER_TIME_0
);
}
while
(
hi
!=
nv
km_rd32
(
device
,
NV04_PTIMER_TIME_1
));
return
((
u64
)
hi
<<
32
|
lo
);
}
...
...
@@ -40,6 +41,7 @@ static void
nv04_timer_alarm_trigger
(
struct
nvkm_timer
*
obj
)
{
struct
nv04_timer
*
tmr
=
container_of
(
obj
,
typeof
(
*
tmr
),
base
);
struct
nvkm_device
*
device
=
tmr
->
base
.
subdev
.
device
;
struct
nvkm_alarm
*
alarm
,
*
atemp
;
unsigned
long
flags
;
LIST_HEAD
(
exec
);
...
...
@@ -54,10 +56,10 @@ nv04_timer_alarm_trigger(struct nvkm_timer *obj)
/* reschedule interrupt for next alarm time */
if
(
!
list_empty
(
&
tmr
->
alarms
))
{
alarm
=
list_first_entry
(
&
tmr
->
alarms
,
typeof
(
*
alarm
),
head
);
nv
_wr32
(
tmr
,
NV04_PTIMER_ALARM_0
,
alarm
->
timestamp
);
nv
_wr32
(
tmr
,
NV04_PTIMER_INTR_EN_0
,
0x00000001
);
nv
km_wr32
(
device
,
NV04_PTIMER_ALARM_0
,
alarm
->
timestamp
);
nv
km_wr32
(
device
,
NV04_PTIMER_INTR_EN_0
,
0x00000001
);
}
else
{
nv
_wr32
(
tmr
,
NV04_PTIMER_INTR_EN_0
,
0x00000000
);
nv
km_wr32
(
device
,
NV04_PTIMER_INTR_EN_0
,
0x00000000
);
}
spin_unlock_irqrestore
(
&
tmr
->
lock
,
flags
);
...
...
@@ -109,17 +111,18 @@ static void
nv04_timer_intr
(
struct
nvkm_subdev
*
subdev
)
{
struct
nv04_timer
*
tmr
=
(
void
*
)
subdev
;
u32
stat
=
nv_rd32
(
tmr
,
NV04_PTIMER_INTR_0
);
struct
nvkm_device
*
device
=
tmr
->
base
.
subdev
.
device
;
u32
stat
=
nvkm_rd32
(
device
,
NV04_PTIMER_INTR_0
);
if
(
stat
&
0x00000001
)
{
nv04_timer_alarm_trigger
(
&
tmr
->
base
);
nv
_wr32
(
tmr
,
NV04_PTIMER_INTR_0
,
0x00000001
);
nv
km_wr32
(
device
,
NV04_PTIMER_INTR_0
,
0x00000001
);
stat
&=
~
0x00000001
;
}
if
(
stat
)
{
nv_error
(
tmr
,
"unknown stat 0x%08x
\n
"
,
stat
);
nv
_wr32
(
tmr
,
NV04_PTIMER_INTR_0
,
stat
);
nv
km_wr32
(
device
,
NV04_PTIMER_INTR_0
,
stat
);
}
}
...
...
@@ -127,17 +130,18 @@ int
nv04_timer_fini
(
struct
nvkm_object
*
object
,
bool
suspend
)
{
struct
nv04_timer
*
tmr
=
(
void
*
)
object
;
struct
nvkm_device
*
device
=
tmr
->
base
.
subdev
.
device
;
if
(
suspend
)
tmr
->
suspend_time
=
nv04_timer_read
(
&
tmr
->
base
);
nv
_wr32
(
tmr
,
NV04_PTIMER_INTR_EN_0
,
0x00000000
);
nv
km_wr32
(
device
,
NV04_PTIMER_INTR_EN_0
,
0x00000000
);
return
nvkm_timer_fini
(
&
tmr
->
base
,
suspend
);
}
static
int
nv04_timer_init
(
struct
nvkm_object
*
object
)
{
struct
nvkm_device
*
device
=
nv_device
(
object
);
struct
nv04_timer
*
tmr
=
(
void
*
)
object
;
struct
nvkm_device
*
device
=
tmr
->
base
.
subdev
.
device
;
u32
m
=
1
,
f
,
n
,
d
,
lo
,
hi
;
int
ret
;
...
...
@@ -166,15 +170,15 @@ nv04_timer_init(struct nvkm_object *object)
m
++
;
}
nv
_wr32
(
tmr
,
0x009220
,
m
-
1
);
nv
km_wr32
(
device
,
0x009220
,
m
-
1
);
}
if
(
!
n
)
{
nv_warn
(
tmr
,
"unknown input clock freq
\n
"
);
if
(
!
nv
_rd32
(
tmr
,
NV04_PTIMER_NUMERATOR
)
||
!
nv
_rd32
(
tmr
,
NV04_PTIMER_DENOMINATOR
))
{
nv
_wr32
(
tmr
,
NV04_PTIMER_NUMERATOR
,
1
);
nv
_wr32
(
tmr
,
NV04_PTIMER_DENOMINATOR
,
1
);
if
(
!
nv
km_rd32
(
device
,
NV04_PTIMER_NUMERATOR
)
||
!
nv
km_rd32
(
device
,
NV04_PTIMER_DENOMINATOR
))
{
nv
km_wr32
(
device
,
NV04_PTIMER_NUMERATOR
,
1
);
nv
km_wr32
(
device
,
NV04_PTIMER_DENOMINATOR
,
1
);
}
return
0
;
}
...
...
@@ -207,12 +211,12 @@ nv04_timer_init(struct nvkm_object *object)
nv_debug
(
tmr
,
"time low : 0x%08x
\n
"
,
lo
);
nv_debug
(
tmr
,
"time high : 0x%08x
\n
"
,
hi
);
nv
_wr32
(
tmr
,
NV04_PTIMER_NUMERATOR
,
n
);
nv
_wr32
(
tmr
,
NV04_PTIMER_DENOMINATOR
,
d
);
nv
_wr32
(
tmr
,
NV04_PTIMER_INTR_0
,
0xffffffff
);
nv
_wr32
(
tmr
,
NV04_PTIMER_INTR_EN_0
,
0x00000000
);
nv
_wr32
(
tmr
,
NV04_PTIMER_TIME_1
,
hi
);
nv
_wr32
(
tmr
,
NV04_PTIMER_TIME_0
,
lo
);
nv
km_wr32
(
device
,
NV04_PTIMER_NUMERATOR
,
n
);
nv
km_wr32
(
device
,
NV04_PTIMER_DENOMINATOR
,
d
);
nv
km_wr32
(
device
,
NV04_PTIMER_INTR_0
,
0xffffffff
);
nv
km_wr32
(
device
,
NV04_PTIMER_INTR_EN_0
,
0x00000000
);
nv
km_wr32
(
device
,
NV04_PTIMER_TIME_1
,
hi
);
nv
km_wr32
(
device
,
NV04_PTIMER_TIME_0
,
lo
);
return
0
;
}
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
反馈
建议
客服
返回
顶部