xf86-video-ati: Branch 'master'
Alex Deucher
agd5f at kemper.freedesktop.org
Tue Feb 12 09:53:17 PST 2008
src/legacy_output.c | 72 ++++++++++++++++++++++++----------------------------
1 file changed, 34 insertions(+), 38 deletions(-)
New commits:
commit 8d64be6ebd7f50d4bcb587afeee8252c1367dc77
Author: Alex Deucher <alex at samba.(none)>
Date: Tue Feb 12 12:53:09 2008 -0500
RADEON: make sure we always set up the FP crtc shadow registers for crtc0
The behavior changed when I added rmx center mode support. In cases where
crtc0 drives a DAC this can lead to a blank screen.
diff --git a/src/legacy_output.c b/src/legacy_output.c
index bac1b67..0de13df 100644
--- a/src/legacy_output.c
+++ b/src/legacy_output.c
@@ -1018,6 +1018,8 @@ RADEONInitRMXRegisters(xf86OutputPtr output, RADEONSavePtr save,
float Hratio, Vratio;
int hsync_wid;
int vsync_wid;
+ int hsync_start;
+
save->fp_vert_stretch = info->SavedReg->fp_vert_stretch &
RADEON_VERT_STRETCH_RESERVED;
@@ -1034,15 +1036,38 @@ RADEONInitRMXRegisters(xf86OutputPtr output, RADEONSavePtr save,
save->crtc_more_cntl |= RADEON_CRTC_H_CUTOFF_ACTIVE_EN;
}
+
+ save->fp_crtc_h_total_disp = ((((mode->CrtcHTotal / 8) - 1) & 0x3ff)
+ | ((((mode->CrtcHDisplay / 8) - 1) & 0x1ff)
+ << 16));
+
+ hsync_wid = (mode->CrtcHSyncEnd - mode->CrtcHSyncStart) / 8;
+ if (!hsync_wid) hsync_wid = 1;
+ hsync_start = mode->CrtcHSyncStart - 8;
+
+ save->fp_h_sync_strt_wid = ((hsync_start & 0x1fff)
+ | ((hsync_wid & 0x3f) << 16)
+ | ((mode->Flags & V_NHSYNC)
+ ? RADEON_CRTC_H_SYNC_POL
+ : 0));
+
+ save->fp_crtc_v_total_disp = (((mode->CrtcVTotal - 1) & 0xffff)
+ | ((mode->CrtcVDisplay - 1) << 16));
+
+ vsync_wid = mode->CrtcVSyncEnd - mode->CrtcVSyncStart;
+ if (!vsync_wid) vsync_wid = 1;
+
+ save->fp_v_sync_strt_wid = (((mode->CrtcVSyncStart - 1) & 0xfff)
+ | ((vsync_wid & 0x1f) << 16)
+ | ((mode->Flags & V_NVSYNC)
+ ? RADEON_CRTC_V_SYNC_POL
+ : 0));
+
+ save->fp_horz_vert_active = 0;
+
if (radeon_output->MonType != MT_LCD && radeon_output->MonType != MT_DFP)
return;
- if ((radeon_output->rmx_type == RMX_CENTER) &&
- (radeon_output->Flags & RADEON_USE_RMX)) {
- save->crtc_more_cntl |= (RADEON_CRTC_AUTO_HORZ_CENTER_EN |
- RADEON_CRTC_AUTO_VERT_CENTER_EN);
- }
-
if (radeon_output->PanelXRes == 0 || radeon_output->PanelYRes == 0) {
Hratio = 1.0;
Vratio = 1.0;
@@ -1077,12 +1102,13 @@ RADEONInitRMXRegisters(xf86OutputPtr output, RADEONSavePtr save,
((radeon_output->PanelYRes-1)<<12));
}
-
-
if ((radeon_output->rmx_type == RMX_CENTER) &&
(radeon_output->Flags & RADEON_USE_RMX)) {
int blank_width;
+ save->crtc_more_cntl |= (RADEON_CRTC_AUTO_HORZ_CENTER_EN |
+ RADEON_CRTC_AUTO_VERT_CENTER_EN);
+
blank_width = (mode->CrtcHBlankEnd - mode->CrtcHBlankStart) / 8;
if (blank_width > 110) blank_width = 110;
@@ -1114,36 +1140,6 @@ RADEONInitRMXRegisters(xf86OutputPtr output, RADEONSavePtr save,
save->fp_horz_vert_active = (((radeon_output->PanelYRes) & 0xfff) |
(((radeon_output->PanelXRes / 8) & 0x1ff) << 16));
- } else {
- int hsync_start;
-
- save->fp_crtc_h_total_disp = ((((mode->CrtcHTotal / 8) - 1) & 0x3ff)
- | ((((mode->CrtcHDisplay / 8) - 1) & 0x1ff)
- << 16));
-
- hsync_wid = (mode->CrtcHSyncEnd - mode->CrtcHSyncStart) / 8;
- if (!hsync_wid) hsync_wid = 1;
- hsync_start = mode->CrtcHSyncStart - 8;
-
- save->fp_h_sync_strt_wid = ((hsync_start & 0x1fff)
- | ((hsync_wid & 0x3f) << 16)
- | ((mode->Flags & V_NHSYNC)
- ? RADEON_CRTC_H_SYNC_POL
- : 0));
-
- save->fp_crtc_v_total_disp = (((mode->CrtcVTotal - 1) & 0xffff)
- | ((mode->CrtcVDisplay - 1) << 16));
-
- vsync_wid = mode->CrtcVSyncEnd - mode->CrtcVSyncStart;
- if (!vsync_wid) vsync_wid = 1;
-
- save->fp_v_sync_strt_wid = (((mode->CrtcVSyncStart - 1) & 0xfff)
- | ((vsync_wid & 0x1f) << 16)
- | ((mode->Flags & V_NVSYNC)
- ? RADEON_CRTC_V_SYNC_POL
- : 0));
-
- save->fp_horz_vert_active = 0;
}
}
More information about the xorg-commit
mailing list