Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
017e6e29
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
017e6e29
编写于
7月 18, 2012
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nv04/disp: kick all private state out to own header
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
3863c9bc
变更
14
显示空白变更内容
内联
并排
Showing
14 changed file
with
182 addition
and
171 deletion
+182
-171
drivers/gpu/drm/nouveau/nouveau_drv.h
drivers/gpu/drm/nouveau/nouveau_drv.h
+0
-109
drivers/gpu/drm/nouveau/nouveau_encoder.h
drivers/gpu/drm/nouveau/nouveau_encoder.h
+1
-0
drivers/gpu/drm/nouveau/nouveau_hw.c
drivers/gpu/drm/nouveau/nouveau_hw.c
+2
-3
drivers/gpu/drm/nouveau/nouveau_hw.h
drivers/gpu/drm/nouveau/nouveau_hw.h
+2
-1
drivers/gpu/drm/nouveau/nouveau_state.c
drivers/gpu/drm/nouveau/nouveau_state.c
+1
-0
drivers/gpu/drm/nouveau/nv04_crtc.c
drivers/gpu/drm/nouveau/nv04_crtc.c
+20
-23
drivers/gpu/drm/nouveau/nv04_cursor.c
drivers/gpu/drm/nouveau/nv04_cursor.c
+1
-1
drivers/gpu/drm/nouveau/nv04_dac.c
drivers/gpu/drm/nouveau/nv04_dac.c
+3
-4
drivers/gpu/drm/nouveau/nv04_dfp.c
drivers/gpu/drm/nouveau/nv04_dfp.c
+14
-20
drivers/gpu/drm/nouveau/nv04_display.c
drivers/gpu/drm/nouveau/nv04_display.c
+11
-0
drivers/gpu/drm/nouveau/nv04_display.h
drivers/gpu/drm/nouveau/nv04_display.h
+121
-0
drivers/gpu/drm/nouveau/nv04_tv.c
drivers/gpu/drm/nouveau/nv04_tv.c
+3
-6
drivers/gpu/drm/nouveau/nv17_tv.c
drivers/gpu/drm/nouveau/nv17_tv.c
+2
-2
drivers/gpu/drm/nouveau/nv17_tv_modes.c
drivers/gpu/drm/nouveau/nv17_tv_modes.c
+1
-2
未找到文件。
drivers/gpu/drm/nouveau/nouveau_drv.h
浏览文件 @
017e6e29
...
@@ -468,76 +468,6 @@ struct nouveau_engine {
...
@@ -468,76 +468,6 @@ struct nouveau_engine {
struct
nouveau_pm_engine
pm
;
struct
nouveau_pm_engine
pm
;
};
};
enum
nv04_fp_display_regs
{
FP_DISPLAY_END
,
FP_TOTAL
,
FP_CRTC
,
FP_SYNC_START
,
FP_SYNC_END
,
FP_VALID_START
,
FP_VALID_END
};
struct
nv04_crtc_reg
{
unsigned
char
MiscOutReg
;
uint8_t
CRTC
[
0xa0
];
uint8_t
CR58
[
0x10
];
uint8_t
Sequencer
[
5
];
uint8_t
Graphics
[
9
];
uint8_t
Attribute
[
21
];
unsigned
char
DAC
[
768
];
/* PCRTC regs */
uint32_t
fb_start
;
uint32_t
crtc_cfg
;
uint32_t
cursor_cfg
;
uint32_t
gpio_ext
;
uint32_t
crtc_830
;
uint32_t
crtc_834
;
uint32_t
crtc_850
;
uint32_t
crtc_eng_ctrl
;
/* PRAMDAC regs */
uint32_t
nv10_cursync
;
struct
nouveau_pll_vals
pllvals
;
uint32_t
ramdac_gen_ctrl
;
uint32_t
ramdac_630
;
uint32_t
ramdac_634
;
uint32_t
tv_setup
;
uint32_t
tv_vtotal
;
uint32_t
tv_vskew
;
uint32_t
tv_vsync_delay
;
uint32_t
tv_htotal
;
uint32_t
tv_hskew
;
uint32_t
tv_hsync_delay
;
uint32_t
tv_hsync_delay2
;
uint32_t
fp_horiz_regs
[
7
];
uint32_t
fp_vert_regs
[
7
];
uint32_t
dither
;
uint32_t
fp_control
;
uint32_t
dither_regs
[
6
];
uint32_t
fp_debug_0
;
uint32_t
fp_debug_1
;
uint32_t
fp_debug_2
;
uint32_t
fp_margin_color
;
uint32_t
ramdac_8c0
;
uint32_t
ramdac_a20
;
uint32_t
ramdac_a24
;
uint32_t
ramdac_a34
;
uint32_t
ctv_regs
[
38
];
};
struct
nv04_output_reg
{
uint32_t
output
;
int
head
;
};
struct
nv04_mode_state
{
struct
nv04_crtc_reg
crtc_reg
[
2
];
uint32_t
pllsel
;
uint32_t
sel_clk
;
};
enum
nouveau_card_type
{
enum
nouveau_card_type
{
NV_04
=
0x04
,
NV_04
=
0x04
,
NV_10
=
0x10
,
NV_10
=
0x10
,
...
@@ -639,12 +569,6 @@ struct drm_nouveau_private {
...
@@ -639,12 +569,6 @@ struct drm_nouveau_private {
u8
*
mxms
;
u8
*
mxms
;
struct
list_head
i2c_ports
;
struct
list_head
i2c_ports
;
struct
nv04_mode_state
mode_reg
;
struct
nv04_mode_state
saved_reg
;
uint32_t
saved_vga_font
[
4
][
16384
];
uint32_t
crtc_owner
;
uint32_t
dac_users
[
4
];
struct
backlight_device
*
backlight
;
struct
backlight_device
*
backlight
;
struct
{
struct
{
...
@@ -997,36 +921,6 @@ extern int nv98_ppp_create(struct drm_device *dev);
...
@@ -997,36 +921,6 @@ extern int nv98_ppp_create(struct drm_device *dev);
extern
long
nouveau_compat_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
extern
long
nouveau_compat_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
);
unsigned
long
arg
);
/* nv04_dac.c */
extern
int
nv04_dac_create
(
struct
drm_connector
*
,
struct
dcb_output
*
);
extern
uint32_t
nv17_dac_sample_load
(
struct
drm_encoder
*
encoder
);
extern
int
nv04_dac_output_offset
(
struct
drm_encoder
*
encoder
);
extern
void
nv04_dac_update_dacclk
(
struct
drm_encoder
*
encoder
,
bool
enable
);
extern
bool
nv04_dac_in_use
(
struct
drm_encoder
*
encoder
);
/* nv04_dfp.c */
extern
int
nv04_dfp_create
(
struct
drm_connector
*
,
struct
dcb_output
*
);
extern
int
nv04_dfp_get_bound_head
(
struct
drm_device
*
dev
,
struct
dcb_output
*
dcbent
);
extern
void
nv04_dfp_bind_head
(
struct
drm_device
*
dev
,
struct
dcb_output
*
dcbent
,
int
head
,
bool
dl
);
extern
void
nv04_dfp_disable
(
struct
drm_device
*
dev
,
int
head
);
extern
void
nv04_dfp_update_fp_control
(
struct
drm_encoder
*
encoder
,
int
mode
);
/* nv04_tv.c */
extern
int
nv04_tv_identify
(
struct
drm_device
*
dev
,
int
i2c_index
);
extern
int
nv04_tv_create
(
struct
drm_connector
*
,
struct
dcb_output
*
);
/* nv17_tv.c */
extern
int
nv17_tv_create
(
struct
drm_connector
*
,
struct
dcb_output
*
);
/* nv04_display.c */
extern
int
nv04_display_early_init
(
struct
drm_device
*
);
extern
void
nv04_display_late_takedown
(
struct
drm_device
*
);
extern
int
nv04_display_create
(
struct
drm_device
*
);
extern
void
nv04_display_destroy
(
struct
drm_device
*
);
extern
int
nv04_display_init
(
struct
drm_device
*
);
extern
void
nv04_display_fini
(
struct
drm_device
*
);
/* nvd0_display.c */
/* nvd0_display.c */
extern
int
nvd0_display_create
(
struct
drm_device
*
);
extern
int
nvd0_display_create
(
struct
drm_device
*
);
extern
void
nvd0_display_destroy
(
struct
drm_device
*
);
extern
void
nvd0_display_destroy
(
struct
drm_device
*
);
...
@@ -1037,9 +931,6 @@ void nvd0_display_flip_stop(struct drm_crtc *);
...
@@ -1037,9 +931,6 @@ void nvd0_display_flip_stop(struct drm_crtc *);
int
nvd0_display_flip_next
(
struct
drm_crtc
*
,
struct
drm_framebuffer
*
,
int
nvd0_display_flip_next
(
struct
drm_crtc
*
,
struct
drm_framebuffer
*
,
struct
nouveau_channel
*
,
u32
swap_interval
);
struct
nouveau_channel
*
,
u32
swap_interval
);
/* nv04_crtc.c */
extern
int
nv04_crtc_create
(
struct
drm_device
*
,
int
index
);
/* nouveau_bo.c */
/* nouveau_bo.c */
extern
struct
ttm_bo_driver
nouveau_bo_driver
;
extern
struct
ttm_bo_driver
nouveau_bo_driver
;
extern
void
nouveau_bo_move_init
(
struct
nouveau_channel
*
);
extern
void
nouveau_bo_move_init
(
struct
nouveau_channel
*
);
...
...
drivers/gpu/drm/nouveau/nouveau_encoder.h
浏览文件 @
017e6e29
...
@@ -29,6 +29,7 @@
...
@@ -29,6 +29,7 @@
#include "drm_encoder_slave.h"
#include "drm_encoder_slave.h"
#include "nouveau_drv.h"
#include "nouveau_drv.h"
#include "nv04_display.h"
#define NV_DPMS_CLEARED 0x80
#define NV_DPMS_CLEARED 0x80
...
...
drivers/gpu/drm/nouveau/nouveau_hw.c
浏览文件 @
017e6e29
...
@@ -285,17 +285,16 @@ static void nouveau_vga_font_io(struct drm_device *dev,
...
@@ -285,17 +285,16 @@ static void nouveau_vga_font_io(struct drm_device *dev,
void
__iomem
*
iovram
,
void
__iomem
*
iovram
,
bool
save
,
unsigned
plane
)
bool
save
,
unsigned
plane
)
{
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
unsigned
i
;
unsigned
i
;
NVWriteVgaSeq
(
dev
,
0
,
NV_VIO_SR_PLANE_MASK_INDEX
,
1
<<
plane
);
NVWriteVgaSeq
(
dev
,
0
,
NV_VIO_SR_PLANE_MASK_INDEX
,
1
<<
plane
);
NVWriteVgaGr
(
dev
,
0
,
NV_VIO_GX_READ_MAP_INDEX
,
plane
);
NVWriteVgaGr
(
dev
,
0
,
NV_VIO_GX_READ_MAP_INDEX
,
plane
);
for
(
i
=
0
;
i
<
16384
;
i
++
)
{
for
(
i
=
0
;
i
<
16384
;
i
++
)
{
if
(
save
)
{
if
(
save
)
{
dev_priv
->
saved_vga_font
[
plane
][
i
]
=
nv04_display
(
dev
)
->
saved_vga_font
[
plane
][
i
]
=
ioread32_native
(
iovram
+
i
*
4
);
ioread32_native
(
iovram
+
i
*
4
);
}
else
{
}
else
{
iowrite32_native
(
dev_priv
->
saved_vga_font
[
plane
][
i
],
iowrite32_native
(
nv04_display
(
dev
)
->
saved_vga_font
[
plane
][
i
],
iovram
+
i
*
4
);
iovram
+
i
*
4
);
}
}
}
}
...
...
drivers/gpu/drm/nouveau/nouveau_hw.h
浏览文件 @
017e6e29
...
@@ -25,6 +25,7 @@
...
@@ -25,6 +25,7 @@
#include "drmP.h"
#include "drmP.h"
#include "nouveau_drv.h"
#include "nouveau_drv.h"
#include "nv04_display.h"
#include <subdev/bios/pll.h>
#include <subdev/bios/pll.h>
...
@@ -437,7 +438,7 @@ nv_show_cursor(struct drm_device *dev, int head, bool show)
...
@@ -437,7 +438,7 @@ nv_show_cursor(struct drm_device *dev, int head, bool show)
{
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
uint8_t
*
curctl1
=
uint8_t
*
curctl1
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
head
].
CRTC
[
NV_CIO_CRE_HCUR_ADDR1_INDEX
];
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
head
].
CRTC
[
NV_CIO_CRE_HCUR_ADDR1_INDEX
];
if
(
show
)
if
(
show
)
*
curctl1
|=
MASK
(
NV_CIO_CRE_HCUR_ADDR1_ENABLE
);
*
curctl1
|=
MASK
(
NV_CIO_CRE_HCUR_ADDR1_ENABLE
);
...
...
drivers/gpu/drm/nouveau/nouveau_state.c
浏览文件 @
017e6e29
...
@@ -37,6 +37,7 @@
...
@@ -37,6 +37,7 @@
#include "nouveau_fbcon.h"
#include "nouveau_fbcon.h"
#include <core/ramht.h>
#include <core/ramht.h>
#include "nouveau_pm.h"
#include "nouveau_pm.h"
#include "nv04_display.h"
#include "nv50_display.h"
#include "nv50_display.h"
#include <engine/fifo.h>
#include <engine/fifo.h>
#include "nouveau_fence.h"
#include "nouveau_fence.h"
...
...
drivers/gpu/drm/nouveau/nv04_crtc.c
浏览文件 @
017e6e29
...
@@ -49,8 +49,8 @@ crtc_wr_cio_state(struct drm_crtc *crtc, struct nv04_crtc_reg *crtcstate, int in
...
@@ -49,8 +49,8 @@ crtc_wr_cio_state(struct drm_crtc *crtc, struct nv04_crtc_reg *crtcstate, int in
static
void
nv_crtc_set_digital_vibrance
(
struct
drm_crtc
*
crtc
,
int
level
)
static
void
nv_crtc_set_digital_vibrance
(
struct
drm_crtc
*
crtc
,
int
level
)
{
{
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
drm_
nouveau_private
*
dev_priv
=
crtc
->
dev
->
dev_private
;
struct
drm_
device
*
dev
=
crtc
->
dev
;
struct
nv04_crtc_reg
*
regp
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
regp
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
regp
->
CRTC
[
NV_CIO_CRE_CSB
]
=
nv_crtc
->
saturation
=
level
;
regp
->
CRTC
[
NV_CIO_CRE_CSB
]
=
nv_crtc
->
saturation
=
level
;
if
(
nv_crtc
->
saturation
&&
nv_gf4_disp_arch
(
crtc
->
dev
))
{
if
(
nv_crtc
->
saturation
&&
nv_gf4_disp_arch
(
crtc
->
dev
))
{
...
@@ -64,8 +64,8 @@ static void nv_crtc_set_digital_vibrance(struct drm_crtc *crtc, int level)
...
@@ -64,8 +64,8 @@ static void nv_crtc_set_digital_vibrance(struct drm_crtc *crtc, int level)
static
void
nv_crtc_set_image_sharpening
(
struct
drm_crtc
*
crtc
,
int
level
)
static
void
nv_crtc_set_image_sharpening
(
struct
drm_crtc
*
crtc
,
int
level
)
{
{
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
drm_
nouveau_private
*
dev_priv
=
crtc
->
dev
->
dev_private
;
struct
drm_
device
*
dev
=
crtc
->
dev
;
struct
nv04_crtc_reg
*
regp
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
regp
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
nv_crtc
->
sharpness
=
level
;
nv_crtc
->
sharpness
=
level
;
if
(
level
<
0
)
/* blur is in hw range 0x3f -> 0x20 */
if
(
level
<
0
)
/* blur is in hw range 0x3f -> 0x20 */
...
@@ -105,7 +105,7 @@ static void nv_crtc_calc_state_ext(struct drm_crtc *crtc, struct drm_display_mod
...
@@ -105,7 +105,7 @@ static void nv_crtc_calc_state_ext(struct drm_crtc *crtc, struct drm_display_mod
struct
drm_device
*
dev
=
crtc
->
dev
;
struct
drm_device
*
dev
=
crtc
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nv04_mode_state
*
state
=
&
dev_priv
->
mode_reg
;
struct
nv04_mode_state
*
state
=
&
nv04_display
(
dev
)
->
mode_reg
;
struct
nv04_crtc_reg
*
regp
=
&
state
->
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
regp
=
&
state
->
crtc_reg
[
nv_crtc
->
index
];
struct
nouveau_pll_vals
*
pv
=
&
regp
->
pllvals
;
struct
nouveau_pll_vals
*
pv
=
&
regp
->
pllvals
;
struct
nvbios_pll
pll_lim
;
struct
nvbios_pll
pll_lim
;
...
@@ -225,9 +225,8 @@ static void
...
@@ -225,9 +225,8 @@ static void
nv_crtc_mode_set_vga
(
struct
drm_crtc
*
crtc
,
struct
drm_display_mode
*
mode
)
nv_crtc_mode_set_vga
(
struct
drm_crtc
*
crtc
,
struct
drm_display_mode
*
mode
)
{
{
struct
drm_device
*
dev
=
crtc
->
dev
;
struct
drm_device
*
dev
=
crtc
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nv04_crtc_reg
*
regp
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
regp
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
drm_framebuffer
*
fb
=
crtc
->
fb
;
struct
drm_framebuffer
*
fb
=
crtc
->
fb
;
/* Calculate our timings */
/* Calculate our timings */
...
@@ -454,8 +453,8 @@ nv_crtc_mode_set_regs(struct drm_crtc *crtc, struct drm_display_mode * mode)
...
@@ -454,8 +453,8 @@ nv_crtc_mode_set_regs(struct drm_crtc *crtc, struct drm_display_mode * mode)
struct
drm_device
*
dev
=
crtc
->
dev
;
struct
drm_device
*
dev
=
crtc
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nv04_crtc_reg
*
regp
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
regp
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
savep
=
&
dev_priv
->
saved_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
savep
=
&
nv04_display
(
dev
)
->
saved_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
drm_encoder
*
encoder
;
struct
drm_encoder
*
encoder
;
bool
lvds_output
=
false
,
tmds_output
=
false
,
tv_output
=
false
,
bool
lvds_output
=
false
,
tmds_output
=
false
,
tv_output
=
false
,
off_chip_digital
=
false
;
off_chip_digital
=
false
;
...
@@ -533,7 +532,7 @@ nv_crtc_mode_set_regs(struct drm_crtc *crtc, struct drm_display_mode * mode)
...
@@ -533,7 +532,7 @@ nv_crtc_mode_set_regs(struct drm_crtc *crtc, struct drm_display_mode * mode)
/* The blob seems to take the current value from crtc 0, add 4 to that
/* The blob seems to take the current value from crtc 0, add 4 to that
* and reuse the old value for crtc 1 */
* and reuse the old value for crtc 1 */
regp
->
CRTC
[
NV_CIO_CRE_TVOUT_LATENCY
]
=
dev_priv
->
saved_reg
.
crtc_reg
[
0
].
CRTC
[
NV_CIO_CRE_TVOUT_LATENCY
];
regp
->
CRTC
[
NV_CIO_CRE_TVOUT_LATENCY
]
=
nv04_display
(
dev
)
->
saved_reg
.
crtc_reg
[
0
].
CRTC
[
NV_CIO_CRE_TVOUT_LATENCY
];
if
(
!
nv_crtc
->
index
)
if
(
!
nv_crtc
->
index
)
regp
->
CRTC
[
NV_CIO_CRE_TVOUT_LATENCY
]
+=
4
;
regp
->
CRTC
[
NV_CIO_CRE_TVOUT_LATENCY
]
+=
4
;
...
@@ -622,7 +621,7 @@ nv_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode,
...
@@ -622,7 +621,7 @@ nv_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode,
nv_crtc_mode_set_vga
(
crtc
,
adjusted_mode
);
nv_crtc_mode_set_vga
(
crtc
,
adjusted_mode
);
/* calculated in nv04_dfp_prepare, nv40 needs it written before calculating PLLs */
/* calculated in nv04_dfp_prepare, nv40 needs it written before calculating PLLs */
if
(
dev_priv
->
card_type
==
NV_40
)
if
(
dev_priv
->
card_type
==
NV_40
)
NVWriteRAMDAC
(
dev
,
0
,
NV_PRAMDAC_SEL_CLK
,
dev_priv
->
mode_reg
.
sel_clk
);
NVWriteRAMDAC
(
dev
,
0
,
NV_PRAMDAC_SEL_CLK
,
nv04_display
(
dev
)
->
mode_reg
.
sel_clk
);
nv_crtc_mode_set_regs
(
crtc
,
adjusted_mode
);
nv_crtc_mode_set_regs
(
crtc
,
adjusted_mode
);
nv_crtc_calc_state_ext
(
crtc
,
mode
,
adjusted_mode
->
clock
);
nv_crtc_calc_state_ext
(
crtc
,
mode
,
adjusted_mode
->
clock
);
return
0
;
return
0
;
...
@@ -631,10 +630,10 @@ nv_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode,
...
@@ -631,10 +630,10 @@ nv_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode,
static
void
nv_crtc_save
(
struct
drm_crtc
*
crtc
)
static
void
nv_crtc_save
(
struct
drm_crtc
*
crtc
)
{
{
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
drm_
nouveau_private
*
dev_priv
=
crtc
->
dev
->
dev_private
;
struct
drm_
device
*
dev
=
crtc
->
dev
;
struct
nv04_mode_state
*
state
=
&
dev_priv
->
mode_reg
;
struct
nv04_mode_state
*
state
=
&
nv04_display
(
dev
)
->
mode_reg
;
struct
nv04_crtc_reg
*
crtc_state
=
&
state
->
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
crtc_state
=
&
state
->
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_mode_state
*
saved
=
&
dev_priv
->
saved_reg
;
struct
nv04_mode_state
*
saved
=
&
nv04_display
(
dev
)
->
saved_reg
;
struct
nv04_crtc_reg
*
crtc_saved
=
&
saved
->
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
crtc_saved
=
&
saved
->
crtc_reg
[
nv_crtc
->
index
];
if
(
nv_two_heads
(
crtc
->
dev
))
if
(
nv_two_heads
(
crtc
->
dev
))
...
@@ -652,14 +651,14 @@ static void nv_crtc_save(struct drm_crtc *crtc)
...
@@ -652,14 +651,14 @@ static void nv_crtc_save(struct drm_crtc *crtc)
static
void
nv_crtc_restore
(
struct
drm_crtc
*
crtc
)
static
void
nv_crtc_restore
(
struct
drm_crtc
*
crtc
)
{
{
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
drm_
nouveau_private
*
dev_priv
=
crtc
->
dev
->
dev_private
;
struct
drm_
device
*
dev
=
crtc
->
dev
;
int
head
=
nv_crtc
->
index
;
int
head
=
nv_crtc
->
index
;
uint8_t
saved_cr21
=
dev_priv
->
saved_reg
.
crtc_reg
[
head
].
CRTC
[
NV_CIO_CRE_21
];
uint8_t
saved_cr21
=
nv04_display
(
dev
)
->
saved_reg
.
crtc_reg
[
head
].
CRTC
[
NV_CIO_CRE_21
];
if
(
nv_two_heads
(
crtc
->
dev
))
if
(
nv_two_heads
(
crtc
->
dev
))
NVSetOwner
(
crtc
->
dev
,
head
);
NVSetOwner
(
crtc
->
dev
,
head
);
nouveau_hw_load_state
(
crtc
->
dev
,
head
,
&
dev_priv
->
saved_reg
);
nouveau_hw_load_state
(
crtc
->
dev
,
head
,
&
nv04_display
(
dev
)
->
saved_reg
);
nv_lock_vga_crtc_shadow
(
crtc
->
dev
,
head
,
saved_cr21
);
nv_lock_vga_crtc_shadow
(
crtc
->
dev
,
head
,
saved_cr21
);
nv_crtc
->
last_dpms
=
NV_DPMS_CLEARED
;
nv_crtc
->
last_dpms
=
NV_DPMS_CLEARED
;
...
@@ -692,10 +691,9 @@ static void nv_crtc_commit(struct drm_crtc *crtc)
...
@@ -692,10 +691,9 @@ static void nv_crtc_commit(struct drm_crtc *crtc)
{
{
struct
drm_device
*
dev
=
crtc
->
dev
;
struct
drm_device
*
dev
=
crtc
->
dev
;
struct
drm_crtc_helper_funcs
*
funcs
=
crtc
->
helper_private
;
struct
drm_crtc_helper_funcs
*
funcs
=
crtc
->
helper_private
;
struct
drm_nouveau_private
*
dev_priv
=
crtc
->
dev
->
dev_private
;
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
nouveau_hw_load_state
(
dev
,
nv_crtc
->
index
,
&
dev_priv
->
mode_reg
);
nouveau_hw_load_state
(
dev
,
nv_crtc
->
index
,
&
nv04_display
(
dev
)
->
mode_reg
);
nv04_crtc_mode_set_base
(
crtc
,
crtc
->
x
,
crtc
->
y
,
NULL
);
nv04_crtc_mode_set_base
(
crtc
,
crtc
->
x
,
crtc
->
y
,
NULL
);
#ifdef __BIG_ENDIAN
#ifdef __BIG_ENDIAN
...
@@ -732,18 +730,17 @@ nv_crtc_gamma_load(struct drm_crtc *crtc)
...
@@ -732,18 +730,17 @@ nv_crtc_gamma_load(struct drm_crtc *crtc)
{
{
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
drm_device
*
dev
=
nv_crtc
->
base
.
dev
;
struct
drm_device
*
dev
=
nv_crtc
->
base
.
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
rgb
{
uint8_t
r
,
g
,
b
;
}
__attribute__
((
packed
))
*
rgbs
;
struct
rgb
{
uint8_t
r
,
g
,
b
;
}
__attribute__
((
packed
))
*
rgbs
;
int
i
;
int
i
;
rgbs
=
(
struct
rgb
*
)
dev_priv
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
].
DAC
;
rgbs
=
(
struct
rgb
*
)
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
].
DAC
;
for
(
i
=
0
;
i
<
256
;
i
++
)
{
for
(
i
=
0
;
i
<
256
;
i
++
)
{
rgbs
[
i
].
r
=
nv_crtc
->
lut
.
r
[
i
]
>>
8
;
rgbs
[
i
].
r
=
nv_crtc
->
lut
.
r
[
i
]
>>
8
;
rgbs
[
i
].
g
=
nv_crtc
->
lut
.
g
[
i
]
>>
8
;
rgbs
[
i
].
g
=
nv_crtc
->
lut
.
g
[
i
]
>>
8
;
rgbs
[
i
].
b
=
nv_crtc
->
lut
.
b
[
i
]
>>
8
;
rgbs
[
i
].
b
=
nv_crtc
->
lut
.
b
[
i
]
>>
8
;
}
}
nouveau_hw_load_state_palette
(
dev
,
nv_crtc
->
index
,
&
dev_priv
->
mode_reg
);
nouveau_hw_load_state_palette
(
dev
,
nv_crtc
->
index
,
&
nv04_display
(
dev
)
->
mode_reg
);
}
}
static
void
static
void
...
@@ -780,7 +777,7 @@ nv04_crtc_do_mode_set_base(struct drm_crtc *crtc,
...
@@ -780,7 +777,7 @@ nv04_crtc_do_mode_set_base(struct drm_crtc *crtc,
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
crtc
);
struct
drm_device
*
dev
=
crtc
->
dev
;
struct
drm_device
*
dev
=
crtc
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nv04_crtc_reg
*
regp
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
regp
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
drm_framebuffer
*
drm_fb
;
struct
drm_framebuffer
*
drm_fb
;
struct
nouveau_framebuffer
*
fb
;
struct
nouveau_framebuffer
*
fb
;
int
arb_burst
,
arb_lwm
;
int
arb_burst
,
arb_lwm
;
...
...
drivers/gpu/drm/nouveau/nv04_cursor.c
浏览文件 @
017e6e29
...
@@ -39,7 +39,7 @@ nv04_cursor_set_offset(struct nouveau_crtc *nv_crtc, uint32_t offset)
...
@@ -39,7 +39,7 @@ nv04_cursor_set_offset(struct nouveau_crtc *nv_crtc, uint32_t offset)
{
{
struct
drm_device
*
dev
=
nv_crtc
->
base
.
dev
;
struct
drm_device
*
dev
=
nv_crtc
->
base
.
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nv04_crtc_reg
*
regp
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
regp
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
drm_crtc
*
crtc
=
&
nv_crtc
->
base
;
struct
drm_crtc
*
crtc
=
&
nv_crtc
->
base
;
regp
->
CRTC
[
NV_CIO_CRE_HCUR_ADDR0_INDEX
]
=
regp
->
CRTC
[
NV_CIO_CRE_HCUR_ADDR0_INDEX
]
=
...
...
drivers/gpu/drm/nouveau/nv04_dac.c
浏览文件 @
017e6e29
...
@@ -407,11 +407,10 @@ static void nv04_dac_commit(struct drm_encoder *encoder)
...
@@ -407,11 +407,10 @@ static void nv04_dac_commit(struct drm_encoder *encoder)
void
nv04_dac_update_dacclk
(
struct
drm_encoder
*
encoder
,
bool
enable
)
void
nv04_dac_update_dacclk
(
struct
drm_encoder
*
encoder
,
bool
enable
)
{
{
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
dcb_output
*
dcb
=
nouveau_encoder
(
encoder
)
->
dcb
;
struct
dcb_output
*
dcb
=
nouveau_encoder
(
encoder
)
->
dcb
;
if
(
nv_gf4_disp_arch
(
dev
))
{
if
(
nv_gf4_disp_arch
(
dev
))
{
uint32_t
*
dac_users
=
&
dev_priv
->
dac_users
[
ffs
(
dcb
->
or
)
-
1
];
uint32_t
*
dac_users
=
&
nv04_display
(
dev
)
->
dac_users
[
ffs
(
dcb
->
or
)
-
1
];
int
dacclk_off
=
NV_PRAMDAC_DACCLK
+
nv04_dac_output_offset
(
encoder
);
int
dacclk_off
=
NV_PRAMDAC_DACCLK
+
nv04_dac_output_offset
(
encoder
);
uint32_t
dacclk
=
NVReadRAMDAC
(
dev
,
0
,
dacclk_off
);
uint32_t
dacclk
=
NVReadRAMDAC
(
dev
,
0
,
dacclk_off
);
...
@@ -432,11 +431,11 @@ void nv04_dac_update_dacclk(struct drm_encoder *encoder, bool enable)
...
@@ -432,11 +431,11 @@ void nv04_dac_update_dacclk(struct drm_encoder *encoder, bool enable)
* someone else. */
* someone else. */
bool
nv04_dac_in_use
(
struct
drm_encoder
*
encoder
)
bool
nv04_dac_in_use
(
struct
drm_encoder
*
encoder
)
{
{
struct
drm_
nouveau_private
*
dev_priv
=
encoder
->
dev
->
dev_private
;
struct
drm_
device
*
dev
=
encoder
->
dev
;
struct
dcb_output
*
dcb
=
nouveau_encoder
(
encoder
)
->
dcb
;
struct
dcb_output
*
dcb
=
nouveau_encoder
(
encoder
)
->
dcb
;
return
nv_gf4_disp_arch
(
encoder
->
dev
)
&&
return
nv_gf4_disp_arch
(
encoder
->
dev
)
&&
(
dev_priv
->
dac_users
[
ffs
(
dcb
->
or
)
-
1
]
&
~
(
1
<<
dcb
->
index
));
(
nv04_display
(
dev
)
->
dac_users
[
ffs
(
dcb
->
or
)
-
1
]
&
~
(
1
<<
dcb
->
index
));
}
}
static
void
nv04_dac_dpms
(
struct
drm_encoder
*
encoder
,
int
mode
)
static
void
nv04_dac_dpms
(
struct
drm_encoder
*
encoder
,
int
mode
)
...
...
drivers/gpu/drm/nouveau/nv04_dfp.c
浏览文件 @
017e6e29
...
@@ -89,8 +89,7 @@ void nv04_dfp_bind_head(struct drm_device *dev, struct dcb_output *dcbent,
...
@@ -89,8 +89,7 @@ void nv04_dfp_bind_head(struct drm_device *dev, struct dcb_output *dcbent,
void
nv04_dfp_disable
(
struct
drm_device
*
dev
,
int
head
)
void
nv04_dfp_disable
(
struct
drm_device
*
dev
,
int
head
)
{
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nv04_crtc_reg
*
crtcstate
=
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
;
struct
nv04_crtc_reg
*
crtcstate
=
dev_priv
->
mode_reg
.
crtc_reg
;
if
(
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_FP_TG_CONTROL
)
&
if
(
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_FP_TG_CONTROL
)
&
FP_TG_CONTROL_ON
)
{
FP_TG_CONTROL_ON
)
{
...
@@ -111,14 +110,13 @@ void nv04_dfp_disable(struct drm_device *dev, int head)
...
@@ -111,14 +110,13 @@ void nv04_dfp_disable(struct drm_device *dev, int head)
void
nv04_dfp_update_fp_control
(
struct
drm_encoder
*
encoder
,
int
mode
)
void
nv04_dfp_update_fp_control
(
struct
drm_encoder
*
encoder
,
int
mode
)
{
{
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
drm_crtc
*
crtc
;
struct
drm_crtc
*
crtc
;
struct
nouveau_crtc
*
nv_crtc
;
struct
nouveau_crtc
*
nv_crtc
;
uint32_t
*
fpc
;
uint32_t
*
fpc
;
if
(
mode
==
DRM_MODE_DPMS_ON
)
{
if
(
mode
==
DRM_MODE_DPMS_ON
)
{
nv_crtc
=
nouveau_crtc
(
encoder
->
crtc
);
nv_crtc
=
nouveau_crtc
(
encoder
->
crtc
);
fpc
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
].
fp_control
;
fpc
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
].
fp_control
;
if
(
is_fpc_off
(
*
fpc
))
{
if
(
is_fpc_off
(
*
fpc
))
{
/* using saved value is ok, as (is_digital && dpms_on &&
/* using saved value is ok, as (is_digital && dpms_on &&
...
@@ -133,7 +131,7 @@ void nv04_dfp_update_fp_control(struct drm_encoder *encoder, int mode)
...
@@ -133,7 +131,7 @@ void nv04_dfp_update_fp_control(struct drm_encoder *encoder, int mode)
}
else
{
}
else
{
list_for_each_entry
(
crtc
,
&
dev
->
mode_config
.
crtc_list
,
head
)
{
list_for_each_entry
(
crtc
,
&
dev
->
mode_config
.
crtc_list
,
head
)
{
nv_crtc
=
nouveau_crtc
(
crtc
);
nv_crtc
=
nouveau_crtc
(
crtc
);
fpc
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
].
fp_control
;
fpc
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
].
fp_control
;
nv_crtc
->
fp_users
&=
~
(
1
<<
nouveau_encoder
(
encoder
)
->
dcb
->
index
);
nv_crtc
->
fp_users
&=
~
(
1
<<
nouveau_encoder
(
encoder
)
->
dcb
->
index
);
if
(
!
is_fpc_off
(
*
fpc
)
&&
!
nv_crtc
->
fp_users
)
{
if
(
!
is_fpc_off
(
*
fpc
)
&&
!
nv_crtc
->
fp_users
)
{
...
@@ -202,8 +200,7 @@ static bool nv04_dfp_mode_fixup(struct drm_encoder *encoder,
...
@@ -202,8 +200,7 @@ static bool nv04_dfp_mode_fixup(struct drm_encoder *encoder,
static
void
nv04_dfp_prepare_sel_clk
(
struct
drm_device
*
dev
,
static
void
nv04_dfp_prepare_sel_clk
(
struct
drm_device
*
dev
,
struct
nouveau_encoder
*
nv_encoder
,
int
head
)
struct
nouveau_encoder
*
nv_encoder
,
int
head
)
{
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nv04_mode_state
*
state
=
&
nv04_display
(
dev
)
->
mode_reg
;
struct
nv04_mode_state
*
state
=
&
dev_priv
->
mode_reg
;
uint32_t
bits1618
=
nv_encoder
->
dcb
->
or
&
DCB_OUTPUT_A
?
0x10000
:
0x40000
;
uint32_t
bits1618
=
nv_encoder
->
dcb
->
or
&
DCB_OUTPUT_A
?
0x10000
:
0x40000
;
if
(
nv_encoder
->
dcb
->
location
!=
DCB_LOC_ON_CHIP
)
if
(
nv_encoder
->
dcb
->
location
!=
DCB_LOC_ON_CHIP
)
...
@@ -233,8 +230,8 @@ static void nv04_dfp_prepare_sel_clk(struct drm_device *dev,
...
@@ -233,8 +230,8 @@ static void nv04_dfp_prepare_sel_clk(struct drm_device *dev,
* and which bit-pair to use, is unclear on nv40 (for earlier cards, the fp table
* and which bit-pair to use, is unclear on nv40 (for earlier cards, the fp table
* entry has the necessary info)
* entry has the necessary info)
*/
*/
if
(
nv_encoder
->
dcb
->
type
==
DCB_OUTPUT_LVDS
&&
dev_priv
->
saved_reg
.
sel_clk
&
0xf0
)
{
if
(
nv_encoder
->
dcb
->
type
==
DCB_OUTPUT_LVDS
&&
nv04_display
(
dev
)
->
saved_reg
.
sel_clk
&
0xf0
)
{
int
shift
=
(
dev_priv
->
saved_reg
.
sel_clk
&
0x50
)
?
0
:
1
;
int
shift
=
(
nv04_display
(
dev
)
->
saved_reg
.
sel_clk
&
0x50
)
?
0
:
1
;
state
->
sel_clk
&=
~
0xf0
;
state
->
sel_clk
&=
~
0xf0
;
state
->
sel_clk
|=
(
head
?
0x40
:
0x10
)
<<
shift
;
state
->
sel_clk
|=
(
head
?
0x40
:
0x10
)
<<
shift
;
...
@@ -246,9 +243,8 @@ static void nv04_dfp_prepare(struct drm_encoder *encoder)
...
@@ -246,9 +243,8 @@ static void nv04_dfp_prepare(struct drm_encoder *encoder)
struct
nouveau_encoder
*
nv_encoder
=
nouveau_encoder
(
encoder
);
struct
nouveau_encoder
*
nv_encoder
=
nouveau_encoder
(
encoder
);
struct
drm_encoder_helper_funcs
*
helper
=
encoder
->
helper_private
;
struct
drm_encoder_helper_funcs
*
helper
=
encoder
->
helper_private
;
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
int
head
=
nouveau_crtc
(
encoder
->
crtc
)
->
index
;
int
head
=
nouveau_crtc
(
encoder
->
crtc
)
->
index
;
struct
nv04_crtc_reg
*
crtcstate
=
dev_priv
->
mode_reg
.
crtc_reg
;
struct
nv04_crtc_reg
*
crtcstate
=
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
;
uint8_t
*
cr_lcd
=
&
crtcstate
[
head
].
CRTC
[
NV_CIO_CRE_LCD__INDEX
];
uint8_t
*
cr_lcd
=
&
crtcstate
[
head
].
CRTC
[
NV_CIO_CRE_LCD__INDEX
];
uint8_t
*
cr_lcd_oth
=
&
crtcstate
[
head
^
1
].
CRTC
[
NV_CIO_CRE_LCD__INDEX
];
uint8_t
*
cr_lcd_oth
=
&
crtcstate
[
head
^
1
].
CRTC
[
NV_CIO_CRE_LCD__INDEX
];
...
@@ -284,8 +280,8 @@ static void nv04_dfp_mode_set(struct drm_encoder *encoder,
...
@@ -284,8 +280,8 @@ static void nv04_dfp_mode_set(struct drm_encoder *encoder,
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
encoder
->
crtc
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
encoder
->
crtc
);
struct
nv04_crtc_reg
*
regp
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
regp
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
savep
=
&
dev_priv
->
saved_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
savep
=
&
nv04_display
(
dev
)
->
saved_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nouveau_connector
*
nv_connector
=
nouveau_crtc_connector_get
(
nv_crtc
);
struct
nouveau_connector
*
nv_connector
=
nouveau_crtc_connector_get
(
nv_crtc
);
struct
nouveau_encoder
*
nv_encoder
=
nouveau_encoder
(
encoder
);
struct
nouveau_encoder
*
nv_encoder
=
nouveau_encoder
(
encoder
);
struct
drm_display_mode
*
output_mode
=
&
nv_encoder
->
mode
;
struct
drm_display_mode
*
output_mode
=
&
nv_encoder
->
mode
;
...
@@ -459,7 +455,7 @@ static void nv04_dfp_commit(struct drm_encoder *encoder)
...
@@ -459,7 +455,7 @@ static void nv04_dfp_commit(struct drm_encoder *encoder)
/* update fp_control state for any changes made by scripts,
/* update fp_control state for any changes made by scripts,
* so correct value is written at DPMS on */
* so correct value is written at DPMS on */
dev_priv
->
mode_reg
.
crtc_reg
[
head
].
fp_control
=
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
head
].
fp_control
=
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_FP_TG_CONTROL
);
NVReadRAMDAC
(
dev
,
head
,
NV_PRAMDAC_FP_TG_CONTROL
);
/* This could use refinement for flatpanels, but it should work this way */
/* This could use refinement for flatpanels, but it should work this way */
...
@@ -511,7 +507,6 @@ static void nv04_lvds_dpms(struct drm_encoder *encoder, int mode)
...
@@ -511,7 +507,6 @@ static void nv04_lvds_dpms(struct drm_encoder *encoder, int mode)
{
{
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_crtc
*
crtc
=
encoder
->
crtc
;
struct
drm_crtc
*
crtc
=
encoder
->
crtc
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nouveau_encoder
*
nv_encoder
=
nouveau_encoder
(
encoder
);
struct
nouveau_encoder
*
nv_encoder
=
nouveau_encoder
(
encoder
);
bool
was_powersaving
=
is_powersaving_dpms
(
nv_encoder
->
last_dpms
);
bool
was_powersaving
=
is_powersaving_dpms
(
nv_encoder
->
last_dpms
);
...
@@ -549,10 +544,10 @@ static void nv04_lvds_dpms(struct drm_encoder *encoder, int mode)
...
@@ -549,10 +544,10 @@ static void nv04_lvds_dpms(struct drm_encoder *encoder, int mode)
if
(
mode
==
DRM_MODE_DPMS_ON
)
if
(
mode
==
DRM_MODE_DPMS_ON
)
nv04_dfp_prepare_sel_clk
(
dev
,
nv_encoder
,
nouveau_crtc
(
crtc
)
->
index
);
nv04_dfp_prepare_sel_clk
(
dev
,
nv_encoder
,
nouveau_crtc
(
crtc
)
->
index
);
else
{
else
{
dev_priv
->
mode_reg
.
sel_clk
=
NVReadRAMDAC
(
dev
,
0
,
NV_PRAMDAC_SEL_CLK
);
nv04_display
(
dev
)
->
mode_reg
.
sel_clk
=
NVReadRAMDAC
(
dev
,
0
,
NV_PRAMDAC_SEL_CLK
);
dev_priv
->
mode_reg
.
sel_clk
&=
~
0xf0
;
nv04_display
(
dev
)
->
mode_reg
.
sel_clk
&=
~
0xf0
;
}
}
NVWriteRAMDAC
(
dev
,
0
,
NV_PRAMDAC_SEL_CLK
,
dev_priv
->
mode_reg
.
sel_clk
);
NVWriteRAMDAC
(
dev
,
0
,
NV_PRAMDAC_SEL_CLK
,
nv04_display
(
dev
)
->
mode_reg
.
sel_clk
);
}
}
static
void
nv04_tmds_dpms
(
struct
drm_encoder
*
encoder
,
int
mode
)
static
void
nv04_tmds_dpms
(
struct
drm_encoder
*
encoder
,
int
mode
)
...
@@ -585,7 +580,6 @@ static void nv04_dfp_restore(struct drm_encoder *encoder)
...
@@ -585,7 +580,6 @@ static void nv04_dfp_restore(struct drm_encoder *encoder)
{
{
struct
nouveau_encoder
*
nv_encoder
=
nouveau_encoder
(
encoder
);
struct
nouveau_encoder
*
nv_encoder
=
nouveau_encoder
(
encoder
);
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
int
head
=
nv_encoder
->
restore
.
head
;
int
head
=
nv_encoder
->
restore
.
head
;
if
(
nv_encoder
->
dcb
->
type
==
DCB_OUTPUT_LVDS
)
{
if
(
nv_encoder
->
dcb
->
type
==
DCB_OUTPUT_LVDS
)
{
...
@@ -599,7 +593,7 @@ static void nv04_dfp_restore(struct drm_encoder *encoder)
...
@@ -599,7 +593,7 @@ static void nv04_dfp_restore(struct drm_encoder *encoder)
}
else
if
(
nv_encoder
->
dcb
->
type
==
DCB_OUTPUT_TMDS
)
{
}
else
if
(
nv_encoder
->
dcb
->
type
==
DCB_OUTPUT_TMDS
)
{
int
clock
=
nouveau_hw_pllvals_to_clk
int
clock
=
nouveau_hw_pllvals_to_clk
(
&
dev_priv
->
saved_reg
.
crtc_reg
[
head
].
pllvals
);
(
&
nv04_display
(
dev
)
->
saved_reg
.
crtc_reg
[
head
].
pllvals
);
run_tmds_table
(
dev
,
nv_encoder
->
dcb
,
head
,
clock
);
run_tmds_table
(
dev
,
nv_encoder
->
dcb
,
head
,
clock
);
}
}
...
...
drivers/gpu/drm/nouveau/nv04_display.c
浏览文件 @
017e6e29
...
@@ -61,10 +61,16 @@ nv04_display_create(struct drm_device *dev)
...
@@ -61,10 +61,16 @@ nv04_display_create(struct drm_device *dev)
struct
drm_connector
*
connector
,
*
ct
;
struct
drm_connector
*
connector
,
*
ct
;
struct
drm_encoder
*
encoder
;
struct
drm_encoder
*
encoder
;
struct
drm_crtc
*
crtc
;
struct
drm_crtc
*
crtc
;
struct
nv04_display
*
disp
;
int
i
,
ret
;
int
i
,
ret
;
NV_DEBUG_KMS
(
dev
,
"
\n
"
);
NV_DEBUG_KMS
(
dev
,
"
\n
"
);
disp
=
kzalloc
(
sizeof
(
*
disp
),
GFP_KERNEL
);
dev_priv
->
engine
.
display
.
priv
=
disp
;
if
(
!
disp
)
return
-
ENOMEM
;
nouveau_hw_save_vga_fonts
(
dev
,
1
);
nouveau_hw_save_vga_fonts
(
dev
,
1
);
nv04_crtc_create
(
dev
,
0
);
nv04_crtc_create
(
dev
,
0
);
...
@@ -128,6 +134,8 @@ nv04_display_create(struct drm_device *dev)
...
@@ -128,6 +134,8 @@ nv04_display_create(struct drm_device *dev)
void
void
nv04_display_destroy
(
struct
drm_device
*
dev
)
nv04_display_destroy
(
struct
drm_device
*
dev
)
{
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nv04_display
*
disp
=
nv04_display
(
dev
);
struct
drm_encoder
*
encoder
;
struct
drm_encoder
*
encoder
;
struct
drm_crtc
*
crtc
;
struct
drm_crtc
*
crtc
;
...
@@ -156,6 +164,9 @@ nv04_display_destroy(struct drm_device *dev)
...
@@ -156,6 +164,9 @@ nv04_display_destroy(struct drm_device *dev)
crtc
->
funcs
->
restore
(
crtc
);
crtc
->
funcs
->
restore
(
crtc
);
nouveau_hw_save_vga_fonts
(
dev
,
0
);
nouveau_hw_save_vga_fonts
(
dev
,
0
);
dev_priv
->
engine
.
display
.
priv
=
NULL
;
kfree
(
disp
);
}
}
int
int
...
...
drivers/gpu/drm/nouveau/nv04_display.h
0 → 100644
浏览文件 @
017e6e29
#ifndef __NV04_DISPLAY_H__
#define __NV04_DISPLAY_H__
enum
nv04_fp_display_regs
{
FP_DISPLAY_END
,
FP_TOTAL
,
FP_CRTC
,
FP_SYNC_START
,
FP_SYNC_END
,
FP_VALID_START
,
FP_VALID_END
};
struct
nv04_crtc_reg
{
unsigned
char
MiscOutReg
;
uint8_t
CRTC
[
0xa0
];
uint8_t
CR58
[
0x10
];
uint8_t
Sequencer
[
5
];
uint8_t
Graphics
[
9
];
uint8_t
Attribute
[
21
];
unsigned
char
DAC
[
768
];
/* PCRTC regs */
uint32_t
fb_start
;
uint32_t
crtc_cfg
;
uint32_t
cursor_cfg
;
uint32_t
gpio_ext
;
uint32_t
crtc_830
;
uint32_t
crtc_834
;
uint32_t
crtc_850
;
uint32_t
crtc_eng_ctrl
;
/* PRAMDAC regs */
uint32_t
nv10_cursync
;
struct
nouveau_pll_vals
pllvals
;
uint32_t
ramdac_gen_ctrl
;
uint32_t
ramdac_630
;
uint32_t
ramdac_634
;
uint32_t
tv_setup
;
uint32_t
tv_vtotal
;
uint32_t
tv_vskew
;
uint32_t
tv_vsync_delay
;
uint32_t
tv_htotal
;
uint32_t
tv_hskew
;
uint32_t
tv_hsync_delay
;
uint32_t
tv_hsync_delay2
;
uint32_t
fp_horiz_regs
[
7
];
uint32_t
fp_vert_regs
[
7
];
uint32_t
dither
;
uint32_t
fp_control
;
uint32_t
dither_regs
[
6
];
uint32_t
fp_debug_0
;
uint32_t
fp_debug_1
;
uint32_t
fp_debug_2
;
uint32_t
fp_margin_color
;
uint32_t
ramdac_8c0
;
uint32_t
ramdac_a20
;
uint32_t
ramdac_a24
;
uint32_t
ramdac_a34
;
uint32_t
ctv_regs
[
38
];
};
struct
nv04_output_reg
{
uint32_t
output
;
int
head
;
};
struct
nv04_mode_state
{
struct
nv04_crtc_reg
crtc_reg
[
2
];
uint32_t
pllsel
;
uint32_t
sel_clk
;
};
struct
nv04_display
{
struct
nv04_mode_state
mode_reg
;
struct
nv04_mode_state
saved_reg
;
uint32_t
saved_vga_font
[
4
][
16384
];
uint32_t
dac_users
[
4
];
};
static
inline
struct
nv04_display
*
nv04_display
(
struct
drm_device
*
dev
)
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
return
dev_priv
->
engine
.
display
.
priv
;
}
/* nv04_display.c */
int
nv04_display_early_init
(
struct
drm_device
*
);
void
nv04_display_late_takedown
(
struct
drm_device
*
);
int
nv04_display_create
(
struct
drm_device
*
);
void
nv04_display_destroy
(
struct
drm_device
*
);
int
nv04_display_init
(
struct
drm_device
*
);
void
nv04_display_fini
(
struct
drm_device
*
);
/* nv04_crtc.c */
int
nv04_crtc_create
(
struct
drm_device
*
,
int
index
);
/* nv04_dac.c */
int
nv04_dac_create
(
struct
drm_connector
*
,
struct
dcb_output
*
);
uint32_t
nv17_dac_sample_load
(
struct
drm_encoder
*
encoder
);
int
nv04_dac_output_offset
(
struct
drm_encoder
*
encoder
);
void
nv04_dac_update_dacclk
(
struct
drm_encoder
*
encoder
,
bool
enable
);
bool
nv04_dac_in_use
(
struct
drm_encoder
*
encoder
);
/* nv04_dfp.c */
int
nv04_dfp_create
(
struct
drm_connector
*
,
struct
dcb_output
*
);
int
nv04_dfp_get_bound_head
(
struct
drm_device
*
dev
,
struct
dcb_output
*
dcbent
);
void
nv04_dfp_bind_head
(
struct
drm_device
*
dev
,
struct
dcb_output
*
dcbent
,
int
head
,
bool
dl
);
void
nv04_dfp_disable
(
struct
drm_device
*
dev
,
int
head
);
void
nv04_dfp_update_fp_control
(
struct
drm_encoder
*
encoder
,
int
mode
);
/* nv04_tv.c */
int
nv04_tv_identify
(
struct
drm_device
*
dev
,
int
i2c_index
);
int
nv04_tv_create
(
struct
drm_connector
*
,
struct
dcb_output
*
);
/* nv17_tv.c */
int
nv17_tv_create
(
struct
drm_connector
*
,
struct
dcb_output
*
);
#endif
drivers/gpu/drm/nouveau/nv04_tv.c
浏览文件 @
017e6e29
...
@@ -65,8 +65,7 @@ static void nv04_tv_dpms(struct drm_encoder *encoder, int mode)
...
@@ -65,8 +65,7 @@ static void nv04_tv_dpms(struct drm_encoder *encoder, int mode)
{
{
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
nouveau_encoder
*
nv_encoder
=
nouveau_encoder
(
encoder
);
struct
nouveau_encoder
*
nv_encoder
=
nouveau_encoder
(
encoder
);
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nv04_mode_state
*
state
=
&
nv04_display
(
dev
)
->
mode_reg
;
struct
nv04_mode_state
*
state
=
&
dev_priv
->
mode_reg
;
uint8_t
crtc1A
;
uint8_t
crtc1A
;
NV_INFO
(
dev
,
"Setting dpms mode %d on TV encoder (output %d)
\n
"
,
NV_INFO
(
dev
,
"Setting dpms mode %d on TV encoder (output %d)
\n
"
,
...
@@ -94,8 +93,7 @@ static void nv04_tv_dpms(struct drm_encoder *encoder, int mode)
...
@@ -94,8 +93,7 @@ static void nv04_tv_dpms(struct drm_encoder *encoder, int mode)
static
void
nv04_tv_bind
(
struct
drm_device
*
dev
,
int
head
,
bool
bind
)
static
void
nv04_tv_bind
(
struct
drm_device
*
dev
,
int
head
,
bool
bind
)
{
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nv04_crtc_reg
*
state
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
head
];
struct
nv04_crtc_reg
*
state
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
head
];
state
->
tv_setup
=
0
;
state
->
tv_setup
=
0
;
...
@@ -133,9 +131,8 @@ static void nv04_tv_mode_set(struct drm_encoder *encoder,
...
@@ -133,9 +131,8 @@ static void nv04_tv_mode_set(struct drm_encoder *encoder,
struct
drm_display_mode
*
adjusted_mode
)
struct
drm_display_mode
*
adjusted_mode
)
{
{
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
encoder
->
crtc
);
struct
nouveau_crtc
*
nv_crtc
=
nouveau_crtc
(
encoder
->
crtc
);
struct
nv04_crtc_reg
*
regp
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
struct
nv04_crtc_reg
*
regp
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
nv_crtc
->
index
];
regp
->
tv_htotal
=
adjusted_mode
->
htotal
;
regp
->
tv_htotal
=
adjusted_mode
->
htotal
;
regp
->
tv_vtotal
=
adjusted_mode
->
vtotal
;
regp
->
tv_vtotal
=
adjusted_mode
->
vtotal
;
...
...
drivers/gpu/drm/nouveau/nv17_tv.c
浏览文件 @
017e6e29
...
@@ -395,7 +395,7 @@ static void nv17_tv_prepare(struct drm_encoder *encoder)
...
@@ -395,7 +395,7 @@ static void nv17_tv_prepare(struct drm_encoder *encoder)
struct
drm_encoder_helper_funcs
*
helper
=
encoder
->
helper_private
;
struct
drm_encoder_helper_funcs
*
helper
=
encoder
->
helper_private
;
struct
nv17_tv_norm_params
*
tv_norm
=
get_tv_norm
(
encoder
);
struct
nv17_tv_norm_params
*
tv_norm
=
get_tv_norm
(
encoder
);
int
head
=
nouveau_crtc
(
encoder
->
crtc
)
->
index
;
int
head
=
nouveau_crtc
(
encoder
->
crtc
)
->
index
;
uint8_t
*
cr_lcd
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
head
].
CRTC
[
uint8_t
*
cr_lcd
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
head
].
CRTC
[
NV_CIO_CRE_LCD__INDEX
];
NV_CIO_CRE_LCD__INDEX
];
uint32_t
dacclk_off
=
NV_PRAMDAC_DACCLK
+
uint32_t
dacclk_off
=
NV_PRAMDAC_DACCLK
+
nv04_dac_output_offset
(
encoder
);
nv04_dac_output_offset
(
encoder
);
...
@@ -456,7 +456,7 @@ static void nv17_tv_mode_set(struct drm_encoder *encoder,
...
@@ -456,7 +456,7 @@ static void nv17_tv_mode_set(struct drm_encoder *encoder,
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
int
head
=
nouveau_crtc
(
encoder
->
crtc
)
->
index
;
int
head
=
nouveau_crtc
(
encoder
->
crtc
)
->
index
;
struct
nv04_crtc_reg
*
regs
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
head
];
struct
nv04_crtc_reg
*
regs
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
head
];
struct
nv17_tv_state
*
tv_regs
=
&
to_tv_enc
(
encoder
)
->
state
;
struct
nv17_tv_state
*
tv_regs
=
&
to_tv_enc
(
encoder
)
->
state
;
struct
nv17_tv_norm_params
*
tv_norm
=
get_tv_norm
(
encoder
);
struct
nv17_tv_norm_params
*
tv_norm
=
get_tv_norm
(
encoder
);
int
i
;
int
i
;
...
...
drivers/gpu/drm/nouveau/nv17_tv_modes.c
浏览文件 @
017e6e29
...
@@ -543,10 +543,9 @@ void nv17_tv_update_rescaler(struct drm_encoder *encoder)
...
@@ -543,10 +543,9 @@ void nv17_tv_update_rescaler(struct drm_encoder *encoder)
void
nv17_ctv_update_rescaler
(
struct
drm_encoder
*
encoder
)
void
nv17_ctv_update_rescaler
(
struct
drm_encoder
*
encoder
)
{
{
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_device
*
dev
=
encoder
->
dev
;
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nv17_tv_encoder
*
tv_enc
=
to_tv_enc
(
encoder
);
struct
nv17_tv_encoder
*
tv_enc
=
to_tv_enc
(
encoder
);
int
head
=
nouveau_crtc
(
encoder
->
crtc
)
->
index
;
int
head
=
nouveau_crtc
(
encoder
->
crtc
)
->
index
;
struct
nv04_crtc_reg
*
regs
=
&
dev_priv
->
mode_reg
.
crtc_reg
[
head
];
struct
nv04_crtc_reg
*
regs
=
&
nv04_display
(
dev
)
->
mode_reg
.
crtc_reg
[
head
];
struct
drm_display_mode
*
crtc_mode
=
&
encoder
->
crtc
->
mode
;
struct
drm_display_mode
*
crtc_mode
=
&
encoder
->
crtc
->
mode
;
struct
drm_display_mode
*
output_mode
=
struct
drm_display_mode
*
output_mode
=
&
get_tv_norm
(
encoder
)
->
ctv_enc_mode
.
mode
;
&
get_tv_norm
(
encoder
)
->
ctv_enc_mode
.
mode
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录