Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
26f6d88b
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看板
提交
26f6d88b
编写于
7月 04, 2011
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nvd0/disp: very initial evo setup
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
02e4f587
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
179 addition
and
3 deletion
+179
-3
drivers/gpu/drm/nouveau/Makefile
drivers/gpu/drm/nouveau/Makefile
+1
-0
drivers/gpu/drm/nouveau/nouveau_drv.h
drivers/gpu/drm/nouveau/nouveau_drv.h
+5
-0
drivers/gpu/drm/nouveau/nouveau_state.c
drivers/gpu/drm/nouveau/nouveau_state.c
+3
-3
drivers/gpu/drm/nouveau/nvd0_display.c
drivers/gpu/drm/nouveau/nvd0_display.c
+170
-0
未找到文件。
drivers/gpu/drm/nouveau/Makefile
浏览文件 @
26f6d88b
...
...
@@ -28,6 +28,7 @@ nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \
nv04_dac.o nv04_dfp.o nv04_tv.o nv17_tv.o nv17_tv_modes.o
\
nv04_crtc.o nv04_display.o nv04_cursor.o
\
nv04_fbcon.o nv50_fbcon.o nvc0_fbcon.o
\
nvd0_display.o
\
nv10_gpio.o nv50_gpio.o
\
nv50_calc.o
\
nv04_pm.o nv50_pm.o nva3_pm.o nvc0_pm.o
\
...
...
drivers/gpu/drm/nouveau/nouveau_drv.h
浏览文件 @
26f6d88b
...
...
@@ -1281,6 +1281,11 @@ extern int nv04_display_create(struct drm_device *);
extern
int
nv04_display_init
(
struct
drm_device
*
);
extern
void
nv04_display_destroy
(
struct
drm_device
*
);
/* nvd0_display.c */
extern
int
nvd0_display_create
(
struct
drm_device
*
);
extern
int
nvd0_display_init
(
struct
drm_device
*
);
extern
void
nvd0_display_destroy
(
struct
drm_device
*
);
/* nv04_crtc.c */
extern
int
nv04_crtc_create
(
struct
drm_device
*
,
int
index
);
...
...
drivers/gpu/drm/nouveau/nouveau_state.c
浏览文件 @
26f6d88b
...
...
@@ -456,9 +456,9 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)
engine
->
fifo
.
unload_context
=
nvc0_fifo_unload_context
;
engine
->
display
.
early_init
=
nouveau_stub_init
;
engine
->
display
.
late_takedown
=
nouveau_stub_takedown
;
engine
->
display
.
create
=
n
ouveau_stub_init
;
engine
->
display
.
init
=
n
ouveau_stub
_init
;
engine
->
display
.
destroy
=
n
ouveau_stub_takedown
;
engine
->
display
.
create
=
n
vd0_display_create
;
engine
->
display
.
init
=
n
vd0_display
_init
;
engine
->
display
.
destroy
=
n
vd0_display_destroy
;
engine
->
gpio
.
init
=
nv50_gpio_init
;
engine
->
gpio
.
takedown
=
nouveau_stub_takedown
;
engine
->
gpio
.
get
=
nvd0_gpio_get
;
...
...
drivers/gpu/drm/nouveau/nvd0_display.c
0 → 100644
浏览文件 @
26f6d88b
/*
* Copyright 2011 Red Hat Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Authors: Ben Skeggs
*/
#include "drmP.h"
#include "nouveau_drv.h"
#include "nouveau_connector.h"
#include "nouveau_encoder.h"
#include "nouveau_crtc.h"
struct
nvd0_display
{
struct
nouveau_gpuobj
*
mem
;
};
static
struct
nvd0_display
*
nvd0_display
(
struct
drm_device
*
dev
)
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
return
dev_priv
->
engine
.
display
.
priv
;
}
/******************************************************************************
* DAC
*****************************************************************************/
/******************************************************************************
* SOR
*****************************************************************************/
/******************************************************************************
* IRQ
*****************************************************************************/
/******************************************************************************
* Init
*****************************************************************************/
static
void
nvd0_display_fini
(
struct
drm_device
*
dev
)
{
int
i
;
/* fini cursors */
for
(
i
=
14
;
i
>=
13
;
i
--
)
{
if
(
!
(
nv_rd32
(
dev
,
0x610490
+
(
i
*
0x10
))
&
0x00000001
))
continue
;
nv_mask
(
dev
,
0x610490
+
(
i
*
0x10
),
0x00000001
,
0x00000000
);
nv_wait
(
dev
,
0x610490
+
(
i
*
0x10
),
0x00010000
,
0x00000000
);
nv_mask
(
dev
,
0x610090
,
1
<<
i
,
0x00000000
);
nv_mask
(
dev
,
0x6100a0
,
1
<<
i
,
0x00000000
);
}
/* fini master */
if
(
nv_rd32
(
dev
,
0x610490
)
&
0x00000010
)
{
nv_mask
(
dev
,
0x610490
,
0x00000010
,
0x00000000
);
nv_mask
(
dev
,
0x610490
,
0x00000003
,
0x00000000
);
nv_wait
(
dev
,
0x610490
,
0x80000000
,
0x00000000
);
nv_mask
(
dev
,
0x610090
,
0x00000001
,
0x00000000
);
nv_mask
(
dev
,
0x6100a0
,
0x00000001
,
0x00000000
);
}
}
int
nvd0_display_init
(
struct
drm_device
*
dev
)
{
struct
nvd0_display
*
disp
=
nvd0_display
(
dev
);
int
i
;
if
(
nv_rd32
(
dev
,
0x6100ac
)
&
0x00000100
)
{
nv_wr32
(
dev
,
0x6100ac
,
0x00000100
);
nv_mask
(
dev
,
0x6194e8
,
0x00000001
,
0x00000000
);
if
(
!
nv_wait
(
dev
,
0x6194e8
,
0x00000002
,
0x00000000
))
{
NV_ERROR
(
dev
,
"PDISP: 0x6194e8 0x%08x
\n
"
,
nv_rd32
(
dev
,
0x6194e8
));
return
-
EBUSY
;
}
}
nv_wr32
(
dev
,
0x610010
,
(
disp
->
mem
->
vinst
>>
8
)
|
9
);
/* init master */
nv_wr32
(
dev
,
0x610494
,
((
disp
->
mem
->
vinst
+
0x1000
)
>>
8
)
|
1
);
nv_wr32
(
dev
,
0x610498
,
0x00010000
);
nv_wr32
(
dev
,
0x61049c
,
0x00000000
);
nv_mask
(
dev
,
0x610490
,
0x00000010
,
0x00000010
);
nv_wr32
(
dev
,
0x640000
,
0x00000000
);
nv_wr32
(
dev
,
0x610490
,
0x01000013
);
if
(
!
nv_wait
(
dev
,
0x610490
,
0x80000000
,
0x00000000
))
{
NV_ERROR
(
dev
,
"PDISP: master 0x%08x
\n
"
,
nv_rd32
(
dev
,
0x610490
));
return
-
EBUSY
;
}
nv_mask
(
dev
,
0x610090
,
0x00000001
,
0x00000001
);
nv_mask
(
dev
,
0x6100a0
,
0x00000001
,
0x00000001
);
/* init cursors */
for
(
i
=
13
;
i
<=
14
;
i
++
)
{
nv_wr32
(
dev
,
0x610490
+
(
i
*
0x10
),
0x00000001
);
if
(
!
nv_wait
(
dev
,
0x610490
+
(
i
*
0x10
),
0x00010000
,
0x00010000
))
{
NV_ERROR
(
dev
,
"PDISP: curs%d 0x%08x
\n
"
,
i
,
nv_rd32
(
dev
,
0x610490
+
(
i
*
0x10
)));
return
-
EBUSY
;
}
nv_mask
(
dev
,
0x610090
,
1
<<
i
,
1
<<
i
);
nv_mask
(
dev
,
0x6100a0
,
1
<<
i
,
1
<<
i
);
}
return
0
;
}
void
nvd0_display_destroy
(
struct
drm_device
*
dev
)
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nvd0_display
*
disp
=
nvd0_display
(
dev
);
nvd0_display_fini
(
dev
);
dev_priv
->
engine
.
display
.
priv
=
NULL
;
nouveau_gpuobj_ref
(
NULL
,
&
disp
->
mem
);
kfree
(
disp
);
}
int
nvd0_display_create
(
struct
drm_device
*
dev
)
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nvd0_display
*
disp
;
int
ret
;
disp
=
kzalloc
(
sizeof
(
*
disp
),
GFP_KERNEL
);
if
(
!
disp
)
return
-
ENOMEM
;
dev_priv
->
engine
.
display
.
priv
=
disp
;
ret
=
nouveau_gpuobj_new
(
dev
,
NULL
,
8
*
1024
,
0x1000
,
0
,
&
disp
->
mem
);
if
(
ret
)
goto
out
;
ret
=
nvd0_display_init
(
dev
);
if
(
ret
)
goto
out
;
out:
if
(
ret
)
nvd0_display_destroy
(
dev
);
return
ret
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录