Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
7c74cbd0
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看板
提交
7c74cbd0
编写于
9月 23, 2010
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau: tidy fifo swmthd handler a little
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
f7eb0c55
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
31 addition
and
25 deletion
+31
-25
drivers/gpu/drm/nouveau/nouveau_irq.c
drivers/gpu/drm/nouveau/nouveau_irq.c
+31
-25
未找到文件。
drivers/gpu/drm/nouveau/nouveau_irq.c
浏览文件 @
7c74cbd0
...
...
@@ -108,36 +108,45 @@ nouveau_call_method(struct nouveau_channel *chan, int class, int mthd, int data)
}
static
bool
nouveau_fifo_swmthd
(
struct
nouveau_channel
*
chan
,
uint32_t
addr
,
uint32_t
data
)
nouveau_fifo_swmthd
(
struct
drm_device
*
dev
,
u32
chid
,
u32
addr
,
u32
data
)
{
struct
drm_device
*
dev
=
chan
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nouveau_channel
*
chan
=
NULL
;
struct
nouveau_gpuobj
*
obj
;
const
int
subc
=
(
addr
>>
13
)
&
0x7
;
const
int
mthd
=
addr
&
0x1ffc
;
bool
handled
=
false
;
u32
engine
;
if
(
mthd
==
0x0000
)
{
struct
nouveau_gpuobj
*
gpuobj
;
gpuobj
=
nouveau_ramht_find
(
chan
,
data
);
if
(
!
gpuobj
)
return
false
;
if
(
likely
(
chid
>=
0
&&
chid
<
dev_priv
->
engine
.
fifo
.
channels
))
chan
=
dev_priv
->
fifos
[
chid
];
if
(
unlikely
(
!
chan
))
return
false
;
if
(
gpuobj
->
engine
!=
NVOBJ_ENGINE_SW
)
return
false
;
switch
(
mthd
)
{
case
0x0000
:
/* bind object to subchannel */
obj
=
nouveau_ramht_find
(
chan
,
data
);
if
(
unlikely
(
!
obj
||
obj
->
engine
!=
NVOBJ_ENGINE_SW
))
break
;
chan
->
sw_subchannel
[
subc
]
=
gpuobj
->
class
;
nv_wr32
(
dev
,
NV04_PFIFO_CACHE1_ENGINE
,
nv_rd32
(
dev
,
NV04_PFIFO_CACHE1_ENGINE
)
&
~
(
0xf
<<
subc
*
4
));
return
true
;
}
chan
->
sw_subchannel
[
subc
]
=
obj
->
class
;
engine
=
0x0000000f
<<
(
subc
*
4
);
/* hw object */
if
(
nv_rd32
(
dev
,
NV04_PFIFO_CACHE1_ENGINE
)
&
(
1
<<
(
subc
*
4
)))
return
false
;
nv_mask
(
dev
,
NV04_PFIFO_CACHE1_ENGINE
,
engine
,
0x00000000
);
handled
=
true
;
break
;
default:
engine
=
nv_rd32
(
dev
,
NV04_PFIFO_CACHE1_ENGINE
);
if
(
unlikely
(((
engine
>>
(
subc
*
4
))
&
0xf
)
!=
0
))
break
;
if
(
nouveau_call_method
(
chan
,
chan
->
sw_subchannel
[
subc
],
mthd
,
data
))
return
false
;
if
(
!
nouveau_call_method
(
chan
,
chan
->
sw_subchannel
[
subc
],
mthd
,
data
))
handled
=
true
;
break
;
}
return
true
;
return
handled
;
}
static
void
...
...
@@ -150,14 +159,11 @@ nouveau_fifo_irq_handler(struct drm_device *dev)
reassign
=
nv_rd32
(
dev
,
NV03_PFIFO_CACHES
)
&
1
;
while
((
status
=
nv_rd32
(
dev
,
NV03_PFIFO_INTR_0
))
&&
(
cnt
++
<
100
))
{
struct
nouveau_channel
*
chan
=
NULL
;
uint32_t
chid
,
get
;
nv_wr32
(
dev
,
NV03_PFIFO_CACHES
,
0
);
chid
=
engine
->
fifo
.
channel_id
(
dev
);
if
(
chid
>=
0
&&
chid
<
engine
->
fifo
.
channels
)
chan
=
dev_priv
->
fifos
[
chid
];
get
=
nv_rd32
(
dev
,
NV03_PFIFO_CACHE1_GET
);
if
(
status
&
NV_PFIFO_INTR_CACHE_ERROR
)
{
...
...
@@ -184,7 +190,7 @@ nouveau_fifo_irq_handler(struct drm_device *dev)
NV40_PFIFO_CACHE1_DATA
(
ptr
));
}
if
(
!
chan
||
!
nouveau_fifo_swmthd
(
chan
,
mthd
,
data
))
{
if
(
!
nouveau_fifo_swmthd
(
dev
,
chid
,
mthd
,
data
))
{
NV_INFO
(
dev
,
"PFIFO_CACHE_ERROR - Ch %d/%d "
"Mthd 0x%04x Data 0x%08x
\n
"
,
chid
,
(
mthd
>>
13
)
&
7
,
mthd
&
0x1ffc
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录