Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
a8dae9fe
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看板
提交
a8dae9fe
编写于
8月 20, 2015
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/vga: require nvkm_device pointer in accessor functions
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
95cf469c
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
98 addition
and
102 deletion
+98
-102
drivers/gpu/drm/nouveau/include/nvkm/subdev/vga.h
drivers/gpu/drm/nouveau/include/nvkm/subdev/vga.h
+13
-13
drivers/gpu/drm/nouveau/nvkm/engine/disp/vga.c
drivers/gpu/drm/nouveau/nvkm/engine/disp/vga.c
+49
-56
drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c
drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c
+8
-6
drivers/gpu/drm/nouveau/nvkm/subdev/bios/pll.c
drivers/gpu/drm/nouveau/nvkm/subdev/bios/pll.c
+1
-1
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c
+2
-2
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.c
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.c
+11
-10
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv05.c
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv05.c
+2
-2
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c
+2
-2
drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv04.c
drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv04.c
+10
-10
未找到文件。
drivers/gpu/drm/nouveau/include/nvkm/subdev/vga.h
浏览文件 @
a8dae9fe
...
...
@@ -3,26 +3,26 @@
#include <core/subdev.h>
/* access to various legacy io ports */
u8
nv
_rdport
(
void
*
obj
,
int
head
,
u16
port
);
void
nv
_wrport
(
void
*
obj
,
int
head
,
u16
port
,
u8
value
);
u8
nv
km_rdport
(
struct
nvkm_device
*
,
int
head
,
u16
port
);
void
nv
km_wrport
(
struct
nvkm_device
*
,
int
head
,
u16
port
,
u8
value
);
/* VGA Sequencer */
u8
nv
_rdvgas
(
void
*
obj
,
int
head
,
u8
index
);
void
nv
_wrvgas
(
void
*
obj
,
int
head
,
u8
index
,
u8
value
);
u8
nv
km_rdvgas
(
struct
nvkm_device
*
,
int
head
,
u8
index
);
void
nv
km_wrvgas
(
struct
nvkm_device
*
,
int
head
,
u8
index
,
u8
value
);
/* VGA Graphics */
u8
nv
_rdvgag
(
void
*
obj
,
int
head
,
u8
index
);
void
nv
_wrvgag
(
void
*
obj
,
int
head
,
u8
index
,
u8
value
);
u8
nv
km_rdvgag
(
struct
nvkm_device
*
,
int
head
,
u8
index
);
void
nv
km_wrvgag
(
struct
nvkm_device
*
,
int
head
,
u8
index
,
u8
value
);
/* VGA CRTC */
u8
nv
_rdvgac
(
void
*
obj
,
int
head
,
u8
index
);
void
nv
_wrvgac
(
void
*
obj
,
int
head
,
u8
index
,
u8
value
);
u8
nv
km_rdvgac
(
struct
nvkm_device
*
,
int
head
,
u8
index
);
void
nv
km_wrvgac
(
struct
nvkm_device
*
,
int
head
,
u8
index
,
u8
value
);
/* VGA indexed port access dispatcher */
u8
nv
_rdvgai
(
void
*
obj
,
int
head
,
u16
port
,
u8
index
);
void
nv
_wrvgai
(
void
*
obj
,
int
head
,
u16
port
,
u8
index
,
u8
value
);
u8
nv
km_rdvgai
(
struct
nvkm_device
*
,
int
head
,
u16
port
,
u8
index
);
void
nv
km_wrvgai
(
struct
nvkm_device
*
,
int
head
,
u16
port
,
u8
index
,
u8
value
);
bool
nv
_lockvgac
(
void
*
obj
,
bool
lock
);
u8
nv
_rdvgaowner
(
void
*
obj
);
void
nv
_wrvgaowner
(
void
*
obj
,
u8
);
bool
nv
km_lockvgac
(
struct
nvkm_device
*
,
bool
lock
);
u8
nv
km_rdvgaowner
(
struct
nvkm_device
*
);
void
nv
km_wrvgaowner
(
struct
nvkm_device
*
,
u8
);
#endif
drivers/gpu/drm/nouveau/nvkm/engine/disp/vga.c
浏览文件 @
a8dae9fe
...
...
@@ -24,10 +24,8 @@
#include <subdev/vga.h>
u8
nv
_rdport
(
void
*
obj
,
int
head
,
u16
port
)
nv
km_rdport
(
struct
nvkm_device
*
device
,
int
head
,
u16
port
)
{
struct
nvkm_device
*
device
=
nv_device
(
obj
);
if
(
device
->
card_type
>=
NV_50
)
return
nvkm_rd08
(
device
,
0x601000
+
port
);
...
...
@@ -48,10 +46,8 @@ nv_rdport(void *obj, int head, u16 port)
}
void
nv
_wrport
(
void
*
obj
,
int
head
,
u16
port
,
u8
data
)
nv
km_wrport
(
struct
nvkm_device
*
device
,
int
head
,
u16
port
,
u8
data
)
{
struct
nvkm_device
*
device
=
nv_device
(
obj
);
if
(
device
->
card_type
>=
NV_50
)
nvkm_wr08
(
device
,
0x601000
+
port
,
data
);
else
...
...
@@ -70,78 +66,76 @@ nv_wrport(void *obj, int head, u16 port, u8 data)
}
u8
nv
_rdvgas
(
void
*
obj
,
int
head
,
u8
index
)
nv
km_rdvgas
(
struct
nvkm_device
*
device
,
int
head
,
u8
index
)
{
nv
_wrport
(
obj
,
head
,
0x03c4
,
index
);
return
nv
_rdport
(
obj
,
head
,
0x03c5
);
nv
km_wrport
(
device
,
head
,
0x03c4
,
index
);
return
nv
km_rdport
(
device
,
head
,
0x03c5
);
}
void
nv
_wrvgas
(
void
*
obj
,
int
head
,
u8
index
,
u8
value
)
nv
km_wrvgas
(
struct
nvkm_device
*
device
,
int
head
,
u8
index
,
u8
value
)
{
nv
_wrport
(
obj
,
head
,
0x03c4
,
index
);
nv
_wrport
(
obj
,
head
,
0x03c5
,
value
);
nv
km_wrport
(
device
,
head
,
0x03c4
,
index
);
nv
km_wrport
(
device
,
head
,
0x03c5
,
value
);
}
u8
nv
_rdvgag
(
void
*
obj
,
int
head
,
u8
index
)
nv
km_rdvgag
(
struct
nvkm_device
*
device
,
int
head
,
u8
index
)
{
nv
_wrport
(
obj
,
head
,
0x03ce
,
index
);
return
nv
_rdport
(
obj
,
head
,
0x03cf
);
nv
km_wrport
(
device
,
head
,
0x03ce
,
index
);
return
nv
km_rdport
(
device
,
head
,
0x03cf
);
}
void
nv
_wrvgag
(
void
*
obj
,
int
head
,
u8
index
,
u8
value
)
nv
km_wrvgag
(
struct
nvkm_device
*
device
,
int
head
,
u8
index
,
u8
value
)
{
nv
_wrport
(
obj
,
head
,
0x03ce
,
index
);
nv
_wrport
(
obj
,
head
,
0x03cf
,
value
);
nv
km_wrport
(
device
,
head
,
0x03ce
,
index
);
nv
km_wrport
(
device
,
head
,
0x03cf
,
value
);
}
u8
nv
_rdvgac
(
void
*
obj
,
int
head
,
u8
index
)
nv
km_rdvgac
(
struct
nvkm_device
*
device
,
int
head
,
u8
index
)
{
nv
_wrport
(
obj
,
head
,
0x03d4
,
index
);
return
nv
_rdport
(
obj
,
head
,
0x03d5
);
nv
km_wrport
(
device
,
head
,
0x03d4
,
index
);
return
nv
km_rdport
(
device
,
head
,
0x03d5
);
}
void
nv
_wrvgac
(
void
*
obj
,
int
head
,
u8
index
,
u8
value
)
nv
km_wrvgac
(
struct
nvkm_device
*
device
,
int
head
,
u8
index
,
u8
value
)
{
nv
_wrport
(
obj
,
head
,
0x03d4
,
index
);
nv
_wrport
(
obj
,
head
,
0x03d5
,
value
);
nv
km_wrport
(
device
,
head
,
0x03d4
,
index
);
nv
km_wrport
(
device
,
head
,
0x03d5
,
value
);
}
u8
nv
_rdvgai
(
void
*
obj
,
int
head
,
u16
port
,
u8
index
)
nv
km_rdvgai
(
struct
nvkm_device
*
device
,
int
head
,
u16
port
,
u8
index
)
{
if
(
port
==
0x03c4
)
return
nv
_rdvgas
(
obj
,
head
,
index
);
if
(
port
==
0x03ce
)
return
nv
_rdvgag
(
obj
,
head
,
index
);
if
(
port
==
0x03d4
)
return
nv
_rdvgac
(
obj
,
head
,
index
);
if
(
port
==
0x03c4
)
return
nv
km_rdvgas
(
device
,
head
,
index
);
if
(
port
==
0x03ce
)
return
nv
km_rdvgag
(
device
,
head
,
index
);
if
(
port
==
0x03d4
)
return
nv
km_rdvgac
(
device
,
head
,
index
);
return
0x00
;
}
void
nv
_wrvgai
(
void
*
obj
,
int
head
,
u16
port
,
u8
index
,
u8
value
)
nv
km_wrvgai
(
struct
nvkm_device
*
device
,
int
head
,
u16
port
,
u8
index
,
u8
value
)
{
if
(
port
==
0x03c4
)
nv
_wrvgas
(
obj
,
head
,
index
,
value
);
else
if
(
port
==
0x03ce
)
nv
_wrvgag
(
obj
,
head
,
index
,
value
);
else
if
(
port
==
0x03d4
)
nv
_wrvgac
(
obj
,
head
,
index
,
value
);
if
(
port
==
0x03c4
)
nv
km_wrvgas
(
device
,
head
,
index
,
value
);
else
if
(
port
==
0x03ce
)
nv
km_wrvgag
(
device
,
head
,
index
,
value
);
else
if
(
port
==
0x03d4
)
nv
km_wrvgac
(
device
,
head
,
index
,
value
);
}
bool
nv
_lockvgac
(
void
*
obj
,
bool
lock
)
nv
km_lockvgac
(
struct
nvkm_device
*
device
,
bool
lock
)
{
struct
nvkm_device
*
device
=
nv_device
(
obj
);
bool
locked
=
!
nv_rdvgac
(
obj
,
0
,
0x1f
);
bool
locked
=
!
nvkm_rdvgac
(
device
,
0
,
0x1f
);
u8
data
=
lock
?
0x99
:
0x57
;
if
(
device
->
card_type
<
NV_50
)
nv
_wrvgac
(
obj
,
0
,
0x1f
,
data
);
nv
km_wrvgac
(
device
,
0
,
0x1f
,
data
);
else
nv
_wrvgac
(
obj
,
0
,
0x3f
,
data
);
nv
km_wrvgac
(
device
,
0
,
0x3f
,
data
);
if
(
device
->
chipset
==
0x11
)
{
if
(
!
(
nvkm_rd32
(
device
,
0x001084
)
&
0x10000000
))
nv
_wrvgac
(
obj
,
1
,
0x1f
,
data
);
nv
km_wrvgac
(
device
,
1
,
0x1f
,
data
);
}
return
locked
;
}
...
...
@@ -165,17 +159,16 @@ nv_lockvgac(void *obj, bool lock)
* other values are treated as literal values to set
*/
u8
nv
_rdvgaowner
(
void
*
obj
)
nv
km_rdvgaowner
(
struct
nvkm_device
*
device
)
{
struct
nvkm_device
*
device
=
nv_device
(
obj
);
if
(
device
->
card_type
<
NV_50
)
{
if
(
nv_device
(
obj
)
->
chipset
==
0x11
)
{
if
(
device
->
chipset
==
0x11
)
{
u32
tied
=
nvkm_rd32
(
device
,
0x001084
)
&
0x10000000
;
if
(
tied
==
0
)
{
u8
slA
=
nv
_rdvgac
(
obj
,
0
,
0x28
)
&
0x80
;
u8
tvA
=
nv
_rdvgac
(
obj
,
0
,
0x33
)
&
0x01
;
u8
slB
=
nv
_rdvgac
(
obj
,
1
,
0x28
)
&
0x80
;
u8
tvB
=
nv
_rdvgac
(
obj
,
1
,
0x33
)
&
0x01
;
u8
slA
=
nv
km_rdvgac
(
device
,
0
,
0x28
)
&
0x80
;
u8
tvA
=
nv
km_rdvgac
(
device
,
0
,
0x33
)
&
0x01
;
u8
slB
=
nv
km_rdvgac
(
device
,
1
,
0x28
)
&
0x80
;
u8
tvB
=
nv
km_rdvgac
(
device
,
1
,
0x33
)
&
0x01
;
if
(
slA
&&
!
tvA
)
return
0x00
;
if
(
slB
&&
!
tvB
)
return
0x03
;
if
(
slA
)
return
0x00
;
...
...
@@ -185,28 +178,28 @@ nv_rdvgaowner(void *obj)
return
0x04
;
}
return
nv
_rdvgac
(
obj
,
0
,
0x44
);
return
nv
km_rdvgac
(
device
,
0
,
0x44
);
}
return
0x00
;
}
void
nv
_wrvgaowner
(
void
*
obj
,
u8
select
)
nv
km_wrvgaowner
(
struct
nvkm_device
*
device
,
u8
select
)
{
if
(
nv_device
(
obj
)
->
card_type
<
NV_50
)
{
if
(
device
->
card_type
<
NV_50
)
{
u8
owner
=
(
select
==
1
)
?
3
:
select
;
if
(
nv_device
(
obj
)
->
chipset
==
0x11
)
{
if
(
device
->
chipset
==
0x11
)
{
/* workaround hw lockup bug */
nv
_rdvgac
(
obj
,
0
,
0x1f
);
nv
_rdvgac
(
obj
,
1
,
0x1f
);
nv
km_rdvgac
(
device
,
0
,
0x1f
);
nv
km_rdvgac
(
device
,
1
,
0x1f
);
}
nv
_wrvgac
(
obj
,
0
,
0x44
,
owner
);
nv
km_wrvgac
(
device
,
0
,
0x44
,
owner
);
if
(
nv_device
(
obj
)
->
chipset
==
0x11
)
{
nv
_wrvgac
(
obj
,
0
,
0x2e
,
owner
);
nv
_wrvgac
(
obj
,
0
,
0x2e
,
owner
);
if
(
device
->
chipset
==
0x11
)
{
nv
km_wrvgac
(
device
,
0
,
0x2e
,
owner
);
nv
km_wrvgac
(
device
,
0
,
0x2e
,
owner
);
}
}
}
drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.c
浏览文件 @
a8dae9fe
...
...
@@ -214,7 +214,7 @@ static u8
init_rdport
(
struct
nvbios_init
*
init
,
u16
port
)
{
if
(
init_exec
(
init
))
return
nv
_rdport
(
init
->
subdev
,
init
->
crtc
,
port
);
return
nv
km_rdport
(
init
->
subdev
->
device
,
init
->
crtc
,
port
);
return
0x00
;
}
...
...
@@ -222,7 +222,7 @@ static void
init_wrport
(
struct
nvbios_init
*
init
,
u16
port
,
u8
value
)
{
if
(
init_exec
(
init
))
nv
_wrport
(
init
->
subdev
,
init
->
crtc
,
port
,
value
);
nv
km_wrport
(
init
->
subdev
->
device
,
init
->
crtc
,
port
,
value
);
}
static
u8
...
...
@@ -231,7 +231,7 @@ init_rdvgai(struct nvbios_init *init, u16 port, u8 index)
struct
nvkm_subdev
*
subdev
=
init
->
subdev
;
if
(
init_exec
(
init
))
{
int
head
=
init
->
crtc
<
0
?
0
:
init
->
crtc
;
return
nv
_rdvgai
(
subdev
,
head
,
port
,
index
);
return
nv
km_rdvgai
(
subdev
->
device
,
head
,
port
,
index
);
}
return
0x00
;
}
...
...
@@ -239,19 +239,21 @@ init_rdvgai(struct nvbios_init *init, u16 port, u8 index)
static
void
init_wrvgai
(
struct
nvbios_init
*
init
,
u16
port
,
u8
index
,
u8
value
)
{
struct
nvkm_device
*
device
=
init
->
subdev
->
device
;
/* force head 0 for updates to cr44, it only exists on first head */
if
(
nv_device
(
init
->
subdev
)
->
card_type
<
NV_50
)
{
if
(
device
->
card_type
<
NV_50
)
{
if
(
port
==
0x03d4
&&
index
==
0x44
)
init
->
crtc
=
0
;
}
if
(
init_exec
(
init
))
{
int
head
=
init
->
crtc
<
0
?
0
:
init
->
crtc
;
nv
_wrvgai
(
init
->
subdev
,
head
,
port
,
index
,
value
);
nv
km_wrvgai
(
device
,
head
,
port
,
index
,
value
);
}
/* select head 1 if cr44 write selected it */
if
(
nv_device
(
init
->
subdev
)
->
card_type
<
NV_50
)
{
if
(
device
->
card_type
<
NV_50
)
{
if
(
port
==
0x03d4
&&
index
==
0x44
&&
value
==
3
)
init
->
crtc
=
1
;
}
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/bios/pll.c
浏览文件 @
a8dae9fe
...
...
@@ -367,7 +367,7 @@ nvbios_pll_parse(struct nvkm_bios *bios, u32 type, struct nvbios_pll *info)
u32
sel_clk
=
nvkm_rd32
(
device
,
0x680524
);
if
((
info
->
reg
==
0x680508
&&
sel_clk
&
0x20
)
||
(
info
->
reg
==
0x680520
&&
sel_clk
&
0x80
))
{
if
(
nv
_rdvgac
(
bios
,
0
,
0x27
)
<
0xa3
)
if
(
nv
km_rdvgac
(
device
,
0
,
0x27
)
<
0xa3
)
info
->
refclk
=
200000
;
else
info
->
refclk
=
25000
;
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c
浏览文件 @
a8dae9fe
...
...
@@ -36,7 +36,7 @@ _nvkm_devinit_fini(struct nvkm_object *object, bool suspend)
init
->
post
=
true
;
/* unlock the extended vga crtc regs */
nv
_lockvgac
(
init
,
false
);
nv
km_lockvgac
(
init
->
subdev
.
device
,
false
);
return
nvkm_subdev_fini
(
&
init
->
subdev
,
suspend
);
}
...
...
@@ -67,7 +67,7 @@ _nvkm_devinit_dtor(struct nvkm_object *object)
struct
nvkm_devinit
*
init
=
(
void
*
)
object
;
/* lock crtc regs */
nv
_lockvgac
(
init
,
true
);
nv
km_lockvgac
(
init
->
subdev
.
device
,
true
);
nvkm_subdev_destroy
(
&
init
->
subdev
);
}
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.c
浏览文件 @
a8dae9fe
...
...
@@ -49,7 +49,7 @@ nv04_devinit_meminit(struct nvkm_devinit *init)
}
/* Sequencer and refresh off */
nv
_wrvgas
(
init
,
0
,
1
,
nv_rdvgas
(
init
,
0
,
1
)
|
0x20
);
nv
km_wrvgas
(
device
,
0
,
1
,
nvkm_rdvgas
(
device
,
0
,
1
)
|
0x20
);
nvkm_mask
(
device
,
NV04_PFB_DEBUG_0
,
0
,
NV04_PFB_DEBUG_0_REFRESH_OFF
);
nvkm_mask
(
device
,
NV04_PFB_BOOT_0
,
~
0
,
...
...
@@ -105,7 +105,7 @@ nv04_devinit_meminit(struct nvkm_devinit *init)
/* Refresh on, sequencer on */
nvkm_mask
(
device
,
NV04_PFB_DEBUG_0
,
NV04_PFB_DEBUG_0_REFRESH_OFF
,
0
);
nv
_wrvgas
(
init
,
0
,
1
,
nv_rdvgas
(
init
,
0
,
1
)
&
~
0x20
);
nv
km_wrvgas
(
device
,
0
,
1
,
nvkm_rdvgas
(
device
,
0
,
1
)
&
~
0x20
);
fbmem_fini
(
fb
);
}
...
...
@@ -406,8 +406,8 @@ nv04_devinit_fini(struct nvkm_object *object, bool suspend)
/* unslave crtcs */
if
(
init
->
owner
<
0
)
init
->
owner
=
nv
_rdvgaowner
(
init
);
nv
_wrvgaowner
(
init
,
0
);
init
->
owner
=
nv
km_rdvgaowner
(
device
);
nv
km_wrvgaowner
(
device
,
0
);
return
0
;
}
...
...
@@ -416,13 +416,14 @@ nv04_devinit_init(struct nvkm_object *object)
{
struct
nv04_devinit
*
init
=
(
void
*
)
object
;
struct
nvkm_subdev
*
subdev
=
&
init
->
base
.
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
if
(
!
init
->
base
.
post
)
{
u32
htotal
=
nv
_rdvgac
(
init
,
0
,
0x06
);
htotal
|=
(
nv
_rdvgac
(
init
,
0
,
0x07
)
&
0x01
)
<<
8
;
htotal
|=
(
nv
_rdvgac
(
init
,
0
,
0x07
)
&
0x20
)
<<
4
;
htotal
|=
(
nv
_rdvgac
(
init
,
0
,
0x25
)
&
0x01
)
<<
10
;
htotal
|=
(
nv
_rdvgac
(
init
,
0
,
0x41
)
&
0x01
)
<<
11
;
u32
htotal
=
nv
km_rdvgac
(
device
,
0
,
0x06
);
htotal
|=
(
nv
km_rdvgac
(
device
,
0
,
0x07
)
&
0x01
)
<<
8
;
htotal
|=
(
nv
km_rdvgac
(
device
,
0
,
0x07
)
&
0x20
)
<<
4
;
htotal
|=
(
nv
km_rdvgac
(
device
,
0
,
0x25
)
&
0x01
)
<<
10
;
htotal
|=
(
nv
km_rdvgac
(
device
,
0
,
0x41
)
&
0x01
)
<<
11
;
if
(
!
htotal
)
{
nvkm_debug
(
subdev
,
"adaptor not initialised
\n
"
);
init
->
base
.
post
=
true
;
...
...
@@ -438,7 +439,7 @@ nv04_devinit_dtor(struct nvkm_object *object)
struct
nv04_devinit
*
init
=
(
void
*
)
object
;
/* restore vga owner saved at first init */
nv
_wrvgaowner
(
init
,
init
->
owner
);
nv
km_wrvgaowner
(
init
->
base
.
subdev
.
device
,
init
->
owner
);
nvkm_devinit_destroy
(
&
init
->
base
);
}
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv05.c
浏览文件 @
a8dae9fe
...
...
@@ -70,7 +70,7 @@ nv05_devinit_meminit(struct nvkm_devinit *init)
}
/* Sequencer off */
nv
_wrvgas
(
init
,
0
,
1
,
nv_rdvgas
(
init
,
0
,
1
)
|
0x20
);
nv
km_wrvgas
(
device
,
0
,
1
,
nvkm_rdvgas
(
device
,
0
,
1
)
|
0x20
);
if
(
nvkm_rd32
(
device
,
NV04_PFB_BOOT_0
)
&
NV04_PFB_BOOT_0_UMA_ENABLE
)
goto
out
;
...
...
@@ -122,7 +122,7 @@ nv05_devinit_meminit(struct nvkm_devinit *init)
out:
/* Sequencer on */
nv
_wrvgas
(
init
,
0
,
1
,
nv_rdvgas
(
init
,
0
,
1
)
&
~
0x20
);
nv
km_wrvgas
(
device
,
0
,
1
,
nvkm_rdvgas
(
device
,
0
,
1
)
&
~
0x20
);
fbmem_fini
(
fb
);
}
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c
浏览文件 @
a8dae9fe
...
...
@@ -105,8 +105,8 @@ nv50_devinit_init(struct nvkm_object *object)
int
ret
,
i
=
0
;
if
(
!
init
->
base
.
post
)
{
if
(
!
nv
_rdvgac
(
init
,
0
,
0x00
)
&&
!
nv
_rdvgac
(
init
,
0
,
0x1a
))
{
if
(
!
nv
km_rdvgac
(
device
,
0
,
0x00
)
&&
!
nv
km_rdvgac
(
device
,
0
,
0x1a
))
{
nvkm_debug
(
subdev
,
"adaptor not initialised
\n
"
);
init
->
base
.
post
=
true
;
}
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv04.c
浏览文件 @
a8dae9fe
...
...
@@ -34,39 +34,39 @@ struct nv04_i2c_port {
static
void
nv04_i2c_drive_scl
(
struct
nvkm_i2c_port
*
base
,
int
state
)
{
struct
nvkm_
i2c
*
i2c
=
(
void
*
)
nvkm_i2c
(
base
)
;
struct
nvkm_
device
*
device
=
nvkm_i2c
(
base
)
->
subdev
.
device
;
struct
nv04_i2c_port
*
port
=
(
void
*
)
base
;
u8
val
=
nv
_rdvgac
(
i2c
,
0
,
port
->
drive
);
u8
val
=
nv
km_rdvgac
(
device
,
0
,
port
->
drive
);
if
(
state
)
val
|=
0x20
;
else
val
&=
0xdf
;
nv
_wrvgac
(
i2c
,
0
,
port
->
drive
,
val
|
0x01
);
nv
km_wrvgac
(
device
,
0
,
port
->
drive
,
val
|
0x01
);
}
static
void
nv04_i2c_drive_sda
(
struct
nvkm_i2c_port
*
base
,
int
state
)
{
struct
nvkm_
i2c
*
i2c
=
(
void
*
)
nvkm_i2c
(
base
)
;
struct
nvkm_
device
*
device
=
nvkm_i2c
(
base
)
->
subdev
.
device
;
struct
nv04_i2c_port
*
port
=
(
void
*
)
base
;
u8
val
=
nv
_rdvgac
(
i2c
,
0
,
port
->
drive
);
u8
val
=
nv
km_rdvgac
(
device
,
0
,
port
->
drive
);
if
(
state
)
val
|=
0x10
;
else
val
&=
0xef
;
nv
_wrvgac
(
i2c
,
0
,
port
->
drive
,
val
|
0x01
);
nv
km_wrvgac
(
device
,
0
,
port
->
drive
,
val
|
0x01
);
}
static
int
nv04_i2c_sense_scl
(
struct
nvkm_i2c_port
*
base
)
{
struct
nvkm_
i2c
*
i2c
=
(
void
*
)
nvkm_i2c
(
base
)
;
struct
nvkm_
device
*
device
=
nvkm_i2c
(
base
)
->
subdev
.
device
;
struct
nv04_i2c_port
*
port
=
(
void
*
)
base
;
return
!!
(
nv
_rdvgac
(
i2c
,
0
,
port
->
sense
)
&
0x04
);
return
!!
(
nv
km_rdvgac
(
device
,
0
,
port
->
sense
)
&
0x04
);
}
static
int
nv04_i2c_sense_sda
(
struct
nvkm_i2c_port
*
base
)
{
struct
nvkm_
i2c
*
i2c
=
(
void
*
)
nvkm_i2c
(
base
)
;
struct
nvkm_
device
*
device
=
nvkm_i2c
(
base
)
->
subdev
.
device
;
struct
nv04_i2c_port
*
port
=
(
void
*
)
base
;
return
!!
(
nv
_rdvgac
(
i2c
,
0
,
port
->
sense
)
&
0x08
);
return
!!
(
nv
km_rdvgac
(
device
,
0
,
port
->
sense
)
&
0x08
);
}
static
const
struct
nvkm_i2c_func
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录