Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
20014cbe
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看板
提交
20014cbe
编写于
5月 14, 2014
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/bios: extend connector table parsing
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
377b1f16
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
79 addition
and
16 deletion
+79
-16
drivers/gpu/drm/nouveau/core/include/subdev/bios/conn.h
drivers/gpu/drm/nouveau/core/include/subdev/bios/conn.h
+20
-2
drivers/gpu/drm/nouveau/core/subdev/bios/conn.c
drivers/gpu/drm/nouveau/core/subdev/bios/conn.c
+53
-9
drivers/gpu/drm/nouveau/core/subdev/bios/init.c
drivers/gpu/drm/nouveau/core/subdev/bios/init.c
+5
-4
drivers/gpu/drm/nouveau/core/subdev/mxm/nv50.c
drivers/gpu/drm/nouveau/core/subdev/mxm/nv50.c
+1
-1
未找到文件。
drivers/gpu/drm/nouveau/core/include/subdev/bios/conn.h
浏览文件 @
20014cbe
...
...
@@ -22,7 +22,25 @@ enum dcb_connector_type {
DCB_CONNECTOR_NONE
=
0xff
};
u16
dcb_conntab
(
struct
nouveau_bios
*
bios
,
u8
*
ver
,
u8
*
hdr
,
u8
*
cnt
,
u8
*
len
);
u16
dcb_conn
(
struct
nouveau_bios
*
bios
,
u8
idx
,
u8
*
ver
,
u8
*
len
);
struct
nvbios_connT
{
};
u32
nvbios_connTe
(
struct
nouveau_bios
*
bios
,
u8
*
ver
,
u8
*
hdr
,
u8
*
cnt
,
u8
*
len
);
u32
nvbios_connTp
(
struct
nouveau_bios
*
bios
,
u8
*
ver
,
u8
*
hdr
,
u8
*
cnt
,
u8
*
len
,
struct
nvbios_connT
*
info
);
struct
nvbios_connE
{
u8
type
;
u8
location
;
u8
hpd
;
u8
dp
;
u8
di
;
u8
sr
;
u8
lcdid
;
};
u32
nvbios_connEe
(
struct
nouveau_bios
*
bios
,
u8
idx
,
u8
*
ver
,
u8
*
hdr
);
u32
nvbios_connEp
(
struct
nouveau_bios
*
bios
,
u8
idx
,
u8
*
ver
,
u8
*
hdr
,
struct
nvbios_connE
*
info
);
#endif
drivers/gpu/drm/nouveau/core/subdev/bios/conn.c
浏览文件 @
20014cbe
...
...
@@ -28,12 +28,12 @@
#include <subdev/bios/dcb.h>
#include <subdev/bios/conn.h>
u
16
dcb_conntab
(
struct
nouveau_bios
*
bios
,
u8
*
ver
,
u8
*
hdr
,
u8
*
cnt
,
u8
*
len
)
u
32
nvbios_connTe
(
struct
nouveau_bios
*
bios
,
u8
*
ver
,
u8
*
hdr
,
u8
*
cnt
,
u8
*
len
)
{
u
16
dcb
=
dcb_table
(
bios
,
ver
,
hdr
,
cnt
,
len
);
u
32
dcb
=
dcb_table
(
bios
,
ver
,
hdr
,
cnt
,
len
);
if
(
dcb
&&
*
ver
>=
0x30
&&
*
hdr
>=
0x16
)
{
u
16
data
=
nv_ro16
(
bios
,
dcb
+
0x14
);
u
32
data
=
nv_ro16
(
bios
,
dcb
+
0x14
);
if
(
data
)
{
*
ver
=
nv_ro08
(
bios
,
data
+
0
);
*
hdr
=
nv_ro08
(
bios
,
data
+
1
);
...
...
@@ -42,15 +42,59 @@ dcb_conntab(struct nouveau_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len)
return
data
;
}
}
return
0x0000
;
return
0x0000
0000
;
}
u16
dcb_conn
(
struct
nouveau_bios
*
bios
,
u8
idx
,
u8
*
ver
,
u8
*
len
)
u32
nvbios_connTp
(
struct
nouveau_bios
*
bios
,
u8
*
ver
,
u8
*
hdr
,
u8
*
cnt
,
u8
*
len
,
struct
nvbios_connT
*
info
)
{
u32
data
=
nvbios_connTe
(
bios
,
ver
,
hdr
,
cnt
,
len
);
memset
(
info
,
0x00
,
sizeof
(
*
info
));
switch
(
!!
data
*
*
ver
)
{
case
0x30
:
case
0x40
:
return
data
;
default:
break
;
}
return
0x00000000
;
}
u32
nvbios_connEe
(
struct
nouveau_bios
*
bios
,
u8
idx
,
u8
*
ver
,
u8
*
len
)
{
u8
hdr
,
cnt
;
u
16
data
=
dcb_conntab
(
bios
,
ver
,
&
hdr
,
&
cnt
,
len
);
u
32
data
=
nvbios_connTe
(
bios
,
ver
,
&
hdr
,
&
cnt
,
len
);
if
(
data
&&
idx
<
cnt
)
return
data
+
hdr
+
(
idx
*
*
len
);
return
0x0000
;
return
0x00000000
;
}
u32
nvbios_connEp
(
struct
nouveau_bios
*
bios
,
u8
idx
,
u8
*
ver
,
u8
*
len
,
struct
nvbios_connE
*
info
)
{
u32
data
=
nvbios_connEe
(
bios
,
idx
,
ver
,
len
);
memset
(
info
,
0x00
,
sizeof
(
*
info
));
switch
(
!!
data
*
*
ver
)
{
case
0x30
:
case
0x40
:
info
->
type
=
nv_ro08
(
bios
,
data
+
0x00
);
info
->
location
=
nv_ro08
(
bios
,
data
+
0x01
)
&
0x0f
;
info
->
hpd
=
(
nv_ro08
(
bios
,
data
+
0x01
)
&
0x30
)
>>
4
;
info
->
dp
=
(
nv_ro08
(
bios
,
data
+
0x01
)
&
0xc0
)
>>
6
;
if
(
*
len
<
4
)
return
data
;
info
->
hpd
|=
(
nv_ro08
(
bios
,
data
+
0x02
)
&
0x03
)
<<
2
;
info
->
dp
|=
nv_ro08
(
bios
,
data
+
0x02
)
&
0x0c
;
info
->
di
=
(
nv_ro08
(
bios
,
data
+
0x02
)
&
0xf0
)
>>
4
;
info
->
hpd
|=
(
nv_ro08
(
bios
,
data
+
0x03
)
&
0x07
)
<<
4
;
info
->
sr
=
(
nv_ro08
(
bios
,
data
+
0x03
)
&
0x08
)
>>
3
;
info
->
lcdid
=
(
nv_ro08
(
bios
,
data
+
0x03
)
&
0x70
)
>>
4
;
return
data
;
default:
break
;
}
return
0x00000000
;
}
drivers/gpu/drm/nouveau/core/subdev/bios/init.c
浏览文件 @
20014cbe
...
...
@@ -98,15 +98,16 @@ static u8
init_conn
(
struct
nvbios_init
*
init
)
{
struct
nouveau_bios
*
bios
=
init
->
bios
;
u8
ver
,
len
;
u16
conn
;
struct
nvbios_connE
connE
;
u8
ver
,
hdr
;
u32
conn
;
if
(
init_exec
(
init
))
{
if
(
init
->
outp
)
{
conn
=
init
->
outp
->
connector
;
conn
=
dcb_conn
(
bios
,
conn
,
&
ver
,
&
len
);
conn
=
nvbios_connEp
(
bios
,
conn
,
&
ver
,
&
hdr
,
&
connE
);
if
(
conn
)
return
nv_ro08
(
bios
,
conn
)
;
return
connE
.
type
;
}
error
(
"script needs connector type
\n
"
);
...
...
drivers/gpu/drm/nouveau/core/subdev/mxm/nv50.c
浏览文件 @
20014cbe
...
...
@@ -150,7 +150,7 @@ mxm_dcb_sanitise_entry(struct nouveau_bios *bios, void *data, int idx, u16 pdcb)
* common example is DP->eDP.
*/
conn
=
bios
->
data
;
conn
+=
dcb_conn
(
bios
,
(
ctx
.
outp
[
0
]
&
0x0000f000
)
>>
12
,
&
ver
,
&
len
);
conn
+=
nvbios_connEe
(
bios
,
(
ctx
.
outp
[
0
]
&
0x0000f000
)
>>
12
,
&
ver
,
&
len
);
type
=
conn
[
0
];
switch
(
ctx
.
desc
.
conn_type
)
{
case
0x01
:
/* LVDS */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录