Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
1ae5a62b
C
clone-Linux
项目概览
gsplhtlxg
/
clone-Linux
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
clone-Linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1ae5a62b
编写于
6月 11, 2014
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/disp/dp: fix tmds passthrough on dp connector
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
8777c5c1
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
54 addition
and
10 deletion
+54
-10
drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
+33
-5
drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c
drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c
+21
-5
未找到文件。
drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
浏览文件 @
1ae5a62b
...
...
@@ -1171,7 +1171,7 @@ exec_lookup(struct nv50_disp_priv *priv, int head, int or, u32 ctrl,
return
NULL
;
}
static
bool
static
struct
nvkm_output
*
exec_script
(
struct
nv50_disp_priv
*
priv
,
int
head
,
int
id
)
{
struct
nouveau_bios
*
bios
=
nouveau_bios
(
priv
);
...
...
@@ -1208,7 +1208,7 @@ exec_script(struct nv50_disp_priv *priv, int head, int id)
}
if
(
!
(
ctrl
&
(
1
<<
head
)))
return
false
;
return
NULL
;
i
--
;
outp
=
exec_lookup
(
priv
,
head
,
i
,
ctrl
,
&
data
,
&
ver
,
&
hdr
,
&
cnt
,
&
len
,
&
info
);
...
...
@@ -1222,10 +1222,10 @@ exec_script(struct nv50_disp_priv *priv, int head, int id)
.
execute
=
1
,
};
return
nvbios_exec
(
&
init
)
==
0
;
nvbios_exec
(
&
init
)
;
}
return
false
;
return
outp
;
}
static
struct
nvkm_output
*
...
...
@@ -1325,7 +1325,35 @@ nv50_disp_intr_unk10_0(struct nv50_disp_priv *priv, int head)
static
void
nv50_disp_intr_unk20_0
(
struct
nv50_disp_priv
*
priv
,
int
head
)
{
exec_script
(
priv
,
head
,
2
);
struct
nvkm_output
*
outp
=
exec_script
(
priv
,
head
,
2
);
/* the binary driver does this outside of the supervisor handling
* (after the third supervisor from a detach). we (currently?)
* allow both detach/attach to happen in the same set of
* supervisor interrupts, so it would make sense to execute this
* (full power down?) script after all the detach phases of the
* supervisor handling. like with training if needed from the
* second supervisor, nvidia doesn't do this, so who knows if it's
* entirely safe, but it does appear to work..
*
* without this script being run, on some configurations i've
* seen, switching from DP to TMDS on a DP connector may result
* in a blank screen (SOR_PWR off/on can restore it)
*/
if
(
outp
&&
outp
->
info
.
type
==
DCB_OUTPUT_DP
)
{
struct
nvkm_output_dp
*
outpdp
=
(
void
*
)
outp
;
struct
nvbios_init
init
=
{
.
subdev
=
nv_subdev
(
priv
),
.
bios
=
nouveau_bios
(
priv
),
.
outp
=
&
outp
->
info
,
.
crtc
=
head
,
.
offset
=
outpdp
->
info
.
script
[
4
],
.
execute
=
1
,
};
nvbios_exec
(
&
init
);
atomic_set
(
&
outpdp
->
lt
.
done
,
0
);
}
}
static
void
...
...
drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c
浏览文件 @
1ae5a62b
...
...
@@ -962,7 +962,7 @@ exec_lookup(struct nv50_disp_priv *priv, int head, int or, u32 ctrl,
return
NULL
;
}
static
bool
static
struct
nvkm_output
*
exec_script
(
struct
nv50_disp_priv
*
priv
,
int
head
,
int
id
)
{
struct
nouveau_bios
*
bios
=
nouveau_bios
(
priv
);
...
...
@@ -979,7 +979,7 @@ exec_script(struct nv50_disp_priv *priv, int head, int id)
}
if
(
or
==
8
)
return
false
;
return
NULL
;
outp
=
exec_lookup
(
priv
,
head
,
or
,
ctrl
,
&
data
,
&
ver
,
&
hdr
,
&
cnt
,
&
len
,
&
info
);
if
(
outp
)
{
...
...
@@ -992,10 +992,10 @@ exec_script(struct nv50_disp_priv *priv, int head, int id)
.
execute
=
1
,
};
return
nvbios_exec
(
&
init
)
==
0
;
nvbios_exec
(
&
init
)
;
}
return
false
;
return
outp
;
}
static
struct
nvkm_output
*
...
...
@@ -1069,7 +1069,23 @@ nvd0_disp_intr_unk1_0(struct nv50_disp_priv *priv, int head)
static
void
nvd0_disp_intr_unk2_0
(
struct
nv50_disp_priv
*
priv
,
int
head
)
{
exec_script
(
priv
,
head
,
2
);
struct
nvkm_output
*
outp
=
exec_script
(
priv
,
head
,
2
);
/* see note in nv50_disp_intr_unk20_0() */
if
(
outp
&&
outp
->
info
.
type
==
DCB_OUTPUT_DP
)
{
struct
nvkm_output_dp
*
outpdp
=
(
void
*
)
outp
;
struct
nvbios_init
init
=
{
.
subdev
=
nv_subdev
(
priv
),
.
bios
=
nouveau_bios
(
priv
),
.
outp
=
&
outp
->
info
,
.
crtc
=
head
,
.
offset
=
outpdp
->
info
.
script
[
4
],
.
execute
=
1
,
};
nvbios_exec
(
&
init
);
atomic_set
(
&
outpdp
->
lt
.
done
,
0
);
}
}
static
void
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录