Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
97e2000f
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
97e2000f
编写于
10月 20, 2010
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nv50: improve evo error handler when more than just channel 0 active
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
43ce028f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
39 addition
and
33 deletion
+39
-33
drivers/gpu/drm/nouveau/nouveau_reg.h
drivers/gpu/drm/nouveau/nouveau_reg.h
+11
-10
drivers/gpu/drm/nouveau/nv50_display.c
drivers/gpu/drm/nouveau/nv50_display.c
+23
-17
drivers/gpu/drm/nouveau/nv50_graph.c
drivers/gpu/drm/nouveau/nv50_graph.c
+5
-6
未找到文件。
drivers/gpu/drm/nouveau/nouveau_reg.h
浏览文件 @
97e2000f
...
...
@@ -715,20 +715,21 @@
#define NV50_PDISPLAY_INTR_1_CLK_UNK10 0x00000010
#define NV50_PDISPLAY_INTR_1_CLK_UNK20 0x00000020
#define NV50_PDISPLAY_INTR_1_CLK_UNK40 0x00000040
#define NV50_PDISPLAY_INTR_EN 0x0061002c
#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC 0x0000000c
#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_(n) (1 << ((n) + 2))
#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_0 0x00000004
#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_1 0x00000008
#define NV50_PDISPLAY_INTR_EN_CLK_UNK10 0x00000010
#define NV50_PDISPLAY_INTR_EN_CLK_UNK20 0x00000020
#define NV50_PDISPLAY_INTR_EN_CLK_UNK40 0x00000040
#define NV50_PDISPLAY_INTR_EN_0 0x00610028
#define NV50_PDISPLAY_INTR_EN_1 0x0061002c
#define NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC 0x0000000c
#define NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_(n) (1 << ((n) + 2))
#define NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_0 0x00000004
#define NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_1 0x00000008
#define NV50_PDISPLAY_INTR_EN_1_CLK_UNK10 0x00000010
#define NV50_PDISPLAY_INTR_EN_1_CLK_UNK20 0x00000020
#define NV50_PDISPLAY_INTR_EN_1_CLK_UNK40 0x00000040
#define NV50_PDISPLAY_UNK30_CTRL 0x00610030
#define NV50_PDISPLAY_UNK30_CTRL_UPDATE_VCLK0 0x00000200
#define NV50_PDISPLAY_UNK30_CTRL_UPDATE_VCLK1 0x00000400
#define NV50_PDISPLAY_UNK30_CTRL_PENDING 0x80000000
#define NV50_PDISPLAY_TRAPPED_ADDR
0x00610080
#define NV50_PDISPLAY_TRAPPED_DATA
0x00610084
#define NV50_PDISPLAY_TRAPPED_ADDR
(i) ((i) * 0x08 + 0x00610080)
#define NV50_PDISPLAY_TRAPPED_DATA
(i) ((i) * 0x08 + 0x00610084)
#define NV50_PDISPLAY_EVO_CTRL(i) ((i) * 0x10 + 0x00610200)
#define NV50_PDISPLAY_EVO_CTRL_DMA 0x00000010
#define NV50_PDISPLAY_EVO_CTRL_DMA_DISABLED 0x00000000
...
...
drivers/gpu/drm/nouveau/nv50_display.c
浏览文件 @
97e2000f
...
...
@@ -149,13 +149,13 @@ nv50_display_init(struct drm_device *dev)
}
nv_wr32
(
dev
,
NV50_PDISPLAY_PIO_CTRL
,
0x00000000
);
nv_wr32
(
dev
,
0x610028
,
0x00000000
);
nv_mask
(
dev
,
NV50_PDISPLAY_INTR_0
,
0x00000000
,
0x00000000
);
nv_wr32
(
dev
,
NV50_PDISPLAY_INTR_EN_0
,
0x00000000
);
nv_mask
(
dev
,
NV50_PDISPLAY_INTR_1
,
0x00000000
,
0x00000000
);
nv_wr32
(
dev
,
NV50_PDISPLAY_INTR_EN
,
NV50_PDISPLAY_INTR_EN_CLK_UNK10
|
NV50_PDISPLAY_INTR_EN_CLK_UNK20
|
NV50_PDISPLAY_INTR_EN_CLK_UNK40
);
nv_wr32
(
dev
,
NV50_PDISPLAY_INTR_EN
_1
,
NV50_PDISPLAY_INTR_EN_
1_
CLK_UNK10
|
NV50_PDISPLAY_INTR_EN_
1_
CLK_UNK20
|
NV50_PDISPLAY_INTR_EN_
1_
CLK_UNK40
);
/* enable hotplug interrupts */
list_for_each_entry
(
connector
,
&
dev
->
mode_config
.
connector_list
,
head
)
{
...
...
@@ -248,7 +248,7 @@ static int nv50_display_disable(struct drm_device *dev)
}
/* disable interrupts. */
nv_wr32
(
dev
,
NV50_PDISPLAY_INTR_EN
,
0x00000000
);
nv_wr32
(
dev
,
NV50_PDISPLAY_INTR_EN
_1
,
0x00000000
);
/* disable hotplug interrupts */
nv_wr32
(
dev
,
0xe054
,
0xffffffff
);
...
...
@@ -451,8 +451,7 @@ nv50_display_vblank_handler(struct drm_device *dev, uint32_t intr)
if
(
intr
&
NV50_PDISPLAY_INTR_1_VBLANK_CRTC_1
)
nv50_display_vblank_crtc_handler
(
dev
,
1
);
nv_wr32
(
dev
,
NV50_PDISPLAY_INTR_EN
,
nv_rd32
(
dev
,
NV50_PDISPLAY_INTR_EN
)
&
~
intr
);
nv_mask
(
dev
,
NV50_PDISPLAY_INTR_EN_1
,
intr
,
0x00000000
);
nv_wr32
(
dev
,
NV50_PDISPLAY_INTR_1
,
intr
);
}
...
...
@@ -779,16 +778,23 @@ nv50_display_irq_handler_bh(struct work_struct *work)
static
void
nv50_display_error_handler
(
struct
drm_device
*
dev
)
{
uint32_t
addr
,
data
;
u32
channels
=
(
nv_rd32
(
dev
,
NV50_PDISPLAY_INTR_0
)
&
0x001f0000
)
>>
16
;
u32
addr
,
data
;
int
chid
;
nv_wr32
(
dev
,
NV50_PDISPLAY_INTR_0
,
0x00010000
);
addr
=
nv_rd32
(
dev
,
NV50_PDISPLAY_TRAPPED_ADDR
);
data
=
nv_rd32
(
dev
,
NV50_PDISPLAY_TRAPPED_DATA
)
;
for
(
chid
=
0
;
chid
<
5
;
chid
++
)
{
if
(
!
(
channels
&
(
1
<<
chid
)))
continue
;
NV_ERROR
(
dev
,
"EvoCh %d Mthd 0x%04x Data 0x%08x (0x%04x 0x%02x)
\n
"
,
0
,
addr
&
0xffc
,
data
,
addr
>>
16
,
(
addr
>>
12
)
&
0xf
);
nv_wr32
(
dev
,
NV50_PDISPLAY_INTR_0
,
0x00010000
<<
chid
);
addr
=
nv_rd32
(
dev
,
NV50_PDISPLAY_TRAPPED_ADDR
(
chid
));
data
=
nv_rd32
(
dev
,
NV50_PDISPLAY_TRAPPED_DATA
(
chid
));
NV_ERROR
(
dev
,
"EvoCh %d Mthd 0x%04x Data 0x%08x "
"(0x%04x 0x%02x)
\n
"
,
chid
,
addr
&
0xffc
,
data
,
addr
>>
16
,
(
addr
>>
12
)
&
0xf
);
nv_wr32
(
dev
,
NV50_PDISPLAY_TRAPPED_ADDR
,
0x90000000
);
nv_wr32
(
dev
,
NV50_PDISPLAY_TRAPPED_ADDR
(
chid
),
0x90000000
);
}
}
void
...
...
@@ -891,9 +897,9 @@ nv50_display_irq_handler(struct drm_device *dev)
if
(
!
intr0
&&
!
(
intr1
&
~
delayed
))
break
;
if
(
intr0
&
0x00
01
0000
)
{
if
(
intr0
&
0x00
1f
0000
)
{
nv50_display_error_handler
(
dev
);
intr0
&=
~
0x00
01
0000
;
intr0
&=
~
0x00
1f
0000
;
}
if
(
intr1
&
NV50_PDISPLAY_INTR_1_VBLANK_CRTC
)
{
...
...
drivers/gpu/drm/nouveau/nv50_graph.c
浏览文件 @
97e2000f
...
...
@@ -384,13 +384,12 @@ nv50_graph_nvsw_vblsem_release(struct nouveau_channel *chan,
if
(
!
chan
->
nvsw
.
vblsem
||
chan
->
nvsw
.
vblsem_offset
==
~
0
||
data
>
1
)
return
-
EINVAL
;
if
(
!
(
nv_rd32
(
dev
,
NV50_PDISPLAY_INTR_EN
)
&
NV50_PDISPLAY_INTR_EN
_VBLANK_CRTC_
(
data
)))
{
if
(
!
(
nv_rd32
(
dev
,
NV50_PDISPLAY_INTR_EN
_1
)
&
NV50_PDISPLAY_INTR_EN_1
_VBLANK_CRTC_
(
data
)))
{
nv_wr32
(
dev
,
NV50_PDISPLAY_INTR_1
,
NV50_PDISPLAY_INTR_1_VBLANK_CRTC_
(
data
));
nv_wr32
(
dev
,
NV50_PDISPLAY_INTR_EN
,
nv_rd32
(
dev
,
NV50_PDISPLAY_INTR_EN
)
|
NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_
(
data
));
NV50_PDISPLAY_INTR_1_VBLANK_CRTC_
(
data
));
nv_mask
(
dev
,
NV50_PDISPLAY_INTR_EN_1
,
0
,
NV50_PDISPLAY_INTR_EN_1_VBLANK_CRTC_
(
data
));
}
list_add
(
&
chan
->
nvsw
.
vbl_wait
,
&
dev_priv
->
vbl_waiting
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录