Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
afa3b4c3
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
afa3b4c3
编写于
4月 23, 2010
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nv50: fix suspend/resume with DP outputs
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
17b96cc3
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
46 addition
and
5 deletion
+46
-5
drivers/gpu/drm/nouveau/nouveau_encoder.h
drivers/gpu/drm/nouveau/nouveau_encoder.h
+2
-0
drivers/gpu/drm/nouveau/nouveau_reg.h
drivers/gpu/drm/nouveau/nouveau_reg.h
+1
-0
drivers/gpu/drm/nouveau/nv50_display.c
drivers/gpu/drm/nouveau/nv50_display.c
+33
-0
drivers/gpu/drm/nouveau/nv50_sor.c
drivers/gpu/drm/nouveau/nv50_sor.c
+10
-5
未找到文件。
drivers/gpu/drm/nouveau/nouveau_encoder.h
浏览文件 @
afa3b4c3
...
...
@@ -48,6 +48,8 @@ struct nouveau_encoder {
union
{
struct
{
int
mc_unknown
;
uint32_t
unk0
;
uint32_t
unk1
;
int
dpcd_version
;
int
link_nr
;
int
link_bw
;
...
...
drivers/gpu/drm/nouveau/nouveau_reg.h
浏览文件 @
afa3b4c3
...
...
@@ -826,6 +826,7 @@
#define NV50_SOR_DP_CTRL_TRAINING_PATTERN_2 0x02000000
#define NV50_SOR_DP_UNK118(i,l) (0x0061c118 + (i) * 0x800 + (l) * 0x80)
#define NV50_SOR_DP_UNK120(i,l) (0x0061c120 + (i) * 0x800 + (l) * 0x80)
#define NV50_SOR_DP_UNK128(i,l) (0x0061c128 + (i) * 0x800 + (l) * 0x80)
#define NV50_SOR_DP_UNK130(i,l) (0x0061c130 + (i) * 0x800 + (l) * 0x80)
#define NV50_PDISPLAY_USER(i) ((i) * 0x1000 + 0x00640000)
...
...
drivers/gpu/drm/nouveau/nv50_display.c
浏览文件 @
afa3b4c3
...
...
@@ -783,6 +783,37 @@ nv50_display_unk10_handler(struct drm_device *dev)
nv_wr32
(
dev
,
0x610030
,
0x80000000
);
}
static
void
nv50_display_unk20_dp_hack
(
struct
drm_device
*
dev
,
struct
dcb_entry
*
dcb
)
{
int
or
=
ffs
(
dcb
->
or
)
-
1
,
link
=
!
(
dcb
->
dpconf
.
sor
.
link
&
1
);
struct
drm_encoder
*
encoder
;
uint32_t
tmp
,
unk0
=
0
,
unk1
=
0
;
if
(
dcb
->
type
!=
OUTPUT_DP
)
return
;
list_for_each_entry
(
encoder
,
&
dev
->
mode_config
.
encoder_list
,
head
)
{
struct
nouveau_encoder
*
nv_encoder
=
nouveau_encoder
(
encoder
);
if
(
nv_encoder
->
dcb
==
dcb
)
{
unk0
=
nv_encoder
->
dp
.
unk0
;
unk1
=
nv_encoder
->
dp
.
unk1
;
break
;
}
}
if
(
unk0
||
unk1
)
{
tmp
=
nv_rd32
(
dev
,
NV50_SOR_DP_CTRL
(
or
,
link
));
tmp
&=
0xfffffe03
;
nv_wr32
(
dev
,
NV50_SOR_DP_CTRL
(
or
,
link
),
tmp
|
unk0
);
tmp
=
nv_rd32
(
dev
,
NV50_SOR_DP_UNK128
(
or
,
link
));
tmp
&=
0xfef080c0
;
nv_wr32
(
dev
,
NV50_SOR_DP_UNK128
(
or
,
link
),
tmp
|
unk1
);
}
}
static
void
nv50_display_unk20_handler
(
struct
drm_device
*
dev
)
{
...
...
@@ -806,6 +837,8 @@ nv50_display_unk20_handler(struct drm_device *dev)
nouveau_bios_run_display_table
(
dev
,
dcbent
,
script
,
pclk
);
nv50_display_unk20_dp_hack
(
dev
,
dcbent
);
tmp
=
nv_rd32
(
dev
,
NV50_PDISPLAY_CRTC_CLK_CTRL2
(
head
));
tmp
&=
~
0x000000f
;
nv_wr32
(
dev
,
NV50_PDISPLAY_CRTC_CLK_CTRL2
(
head
),
tmp
);
...
...
drivers/gpu/drm/nouveau/nv50_sor.c
浏览文件 @
afa3b4c3
...
...
@@ -321,18 +321,23 @@ nv50_sor_create(struct drm_device *dev, struct dcb_entry *entry)
encoder
->
possible_clones
=
0
;
if
(
nv_encoder
->
dcb
->
type
==
OUTPUT_DP
)
{
uint32_t
mc
,
or
=
nv_encoder
->
or
;
int
or
=
nv_encoder
->
or
,
link
=
!
(
entry
->
dpconf
.
sor
.
link
&
1
);
uint32_t
tmp
;
if
(
dev_priv
->
chipset
<
0x90
||
dev_priv
->
chipset
==
0x92
||
dev_priv
->
chipset
==
0xa0
)
mc
=
nv_rd32
(
dev
,
NV50_PDISPLAY_SOR_MODE_CTRL_C
(
or
));
tmp
=
nv_rd32
(
dev
,
NV50_PDISPLAY_SOR_MODE_CTRL_C
(
or
));
else
mc
=
nv_rd32
(
dev
,
NV90_PDISPLAY_SOR_MODE_CTRL_C
(
or
));
tmp
=
nv_rd32
(
dev
,
NV90_PDISPLAY_SOR_MODE_CTRL_C
(
or
));
switch
((
mc
&
0x00000f00
)
>>
8
)
{
switch
((
tmp
&
0x00000f00
)
>>
8
)
{
case
8
:
case
9
:
nv_encoder
->
dp
.
mc_unknown
=
(
mc
&
0x000f0000
)
>>
16
;
nv_encoder
->
dp
.
mc_unknown
=
(
tmp
&
0x000f0000
)
>>
16
;
tmp
=
nv_rd32
(
dev
,
NV50_SOR_DP_CTRL
(
or
,
link
));
nv_encoder
->
dp
.
unk0
=
tmp
&
0x000001fc
;
tmp
=
nv_rd32
(
dev
,
NV50_SOR_DP_UNK128
(
or
,
link
));
nv_encoder
->
dp
.
unk1
=
tmp
&
0x010f7f3f
;
break
;
default:
break
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录