From ef56a4faf647865d611574dbe078589b1021937d Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Nov 14 2007 20:32:23 +0000 Subject: xf86-video-ati 6.7.196 --- diff --git a/.cvsignore b/.cvsignore index 84baf31..c809278 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -xf86-video-ati-6.7.195.tar.bz2 +xf86-video-ati-6.7.196.tar.bz2 diff --git a/radeon-6.7.195-faster-ddc.patch b/radeon-6.7.195-faster-ddc.patch deleted file mode 100644 index 625b3e2..0000000 --- a/radeon-6.7.195-faster-ddc.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff -up xf86-video-ati-6.7.195/src/radeon_output.c.jx xf86-video-ati-6.7.195/src/radeon_output.c ---- xf86-video-ati-6.7.195/src/radeon_output.c.jx 2007-11-07 19:06:52.000000000 -0500 -+++ xf86-video-ati-6.7.195/src/radeon_output.c 2007-11-08 16:23:39.000000000 -0500 -@@ -278,61 +278,7 @@ RADEONDisplayDDCConnected(ScrnInfoPtr pS - DDCReg = radeon_output->DDCReg; - - /* Read and output monitor info using DDC2 over I2C bus */ -- if (radeon_output->pI2CBus && info->ddc2 && (DDCReg != RADEON_LCD_GPIO_MASK) && (DDCReg != RADEON_MDGPIO_EN_REG)) { -- OUTREG(DDCReg, INREG(DDCReg) & -- (CARD32)~(RADEON_GPIO_A_0 | RADEON_GPIO_A_1)); -- -- /* For some old monitors (like Compaq Presario FP500), we need -- * following process to initialize/stop DDC -- */ -- OUTREG(DDCReg, INREG(DDCReg) & ~(RADEON_GPIO_EN_1)); -- for (j = 0; j < 3; j++) { -- OUTREG(DDCReg, -- INREG(DDCReg) & ~(RADEON_GPIO_EN_0)); -- usleep(13000); -- -- OUTREG(DDCReg, -- INREG(DDCReg) & ~(RADEON_GPIO_EN_1)); -- for (i = 0; i < 10; i++) { -- usleep(15000); -- if (INREG(DDCReg) & RADEON_GPIO_Y_1) -- break; -- } -- if (i == 10) continue; -- -- usleep(15000); -- -- OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_0); -- usleep(15000); -- -- OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_1); -- usleep(15000); -- OUTREG(DDCReg, -- INREG(DDCReg) & ~(RADEON_GPIO_EN_0)); -- usleep(15000); -- *MonInfo = xf86DoEDID_DDC2(pScrn->scrnIndex, radeon_output->pI2CBus); -- -- OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_1); -- OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_0); -- usleep(15000); -- OUTREG(DDCReg, -- INREG(DDCReg) & ~(RADEON_GPIO_EN_1)); -- for (i = 0; i < 5; i++) { -- usleep(15000); -- if (INREG(DDCReg) & RADEON_GPIO_Y_1) -- break; -- } -- usleep(15000); -- OUTREG(DDCReg, -- INREG(DDCReg) & ~(RADEON_GPIO_EN_0)); -- usleep(15000); -- -- OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_1); -- OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_0); -- usleep(15000); -- if(*MonInfo) break; -- } -- } else if (radeon_output->pI2CBus && info->ddc2 && ((DDCReg == RADEON_LCD_GPIO_MASK) || (DDCReg == RADEON_MDGPIO_EN_REG))) { -+ if (radeon_output->pI2CBus && info->ddc2) { - *MonInfo = xf86DoEDID_DDC2(pScrn->scrnIndex, radeon_output->pI2CBus); - } else { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "DDC2/I2C is not properly initialized\n"); diff --git a/radeon-6.7.196-faster-ddc.patch b/radeon-6.7.196-faster-ddc.patch new file mode 100644 index 0000000..8943ef6 --- /dev/null +++ b/radeon-6.7.196-faster-ddc.patch @@ -0,0 +1,67 @@ +diff -up xf86-video-ati-6.7.196/src/radeon_output.c.jx xf86-video-ati-6.7.196/src/radeon_output.c +--- xf86-video-ati-6.7.196/src/radeon_output.c.jx 2007-11-14 15:21:22.000000000 -0500 ++++ xf86-video-ati-6.7.196/src/radeon_output.c 2007-11-14 15:22:39.000000000 -0500 +@@ -278,62 +278,7 @@ RADEONDisplayDDCConnected(ScrnInfoPtr pS + DDCReg = radeon_output->DDCReg; + + /* Read and output monitor info using DDC2 over I2C bus */ +- if (radeon_output->pI2CBus && info->ddc2 && (DDCReg != RADEON_LCD_GPIO_MASK) && (DDCReg != RADEON_MDGPIO_EN_REG)) { +- OUTREG(DDCReg, INREG(DDCReg) & +- (CARD32)~(RADEON_GPIO_A_0 | RADEON_GPIO_A_1)); +- +- /* For some old monitors (like Compaq Presario FP500), we need +- * following process to initialize/stop DDC +- */ +- OUTREG(DDCReg, INREG(DDCReg) & ~(RADEON_GPIO_EN_1)); +- for (j = 0; j < 3; j++) { +- OUTREG(DDCReg, +- INREG(DDCReg) & ~(RADEON_GPIO_EN_0)); +- usleep(13000); +- +- OUTREG(DDCReg, +- INREG(DDCReg) & ~(RADEON_GPIO_EN_1)); +- for (i = 0; i < 10; i++) { +- usleep(15000); +- if (INREG(DDCReg) & RADEON_GPIO_Y_1) +- break; +- } +- if (i == 10) continue; +- +- usleep(15000); +- +- OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_0); +- usleep(15000); +- +- OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_1); +- usleep(15000); +- OUTREG(DDCReg, +- INREG(DDCReg) & ~(RADEON_GPIO_EN_0)); +- usleep(15000); +- +- MonInfo = xf86DoEDID_DDC2(pScrn->scrnIndex, radeon_output->pI2CBus); +- +- OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_1); +- OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_0); +- usleep(15000); +- OUTREG(DDCReg, +- INREG(DDCReg) & ~(RADEON_GPIO_EN_1)); +- for (i = 0; i < 5; i++) { +- usleep(15000); +- if (INREG(DDCReg) & RADEON_GPIO_Y_1) +- break; +- } +- usleep(15000); +- OUTREG(DDCReg, +- INREG(DDCReg) & ~(RADEON_GPIO_EN_0)); +- usleep(15000); +- +- OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_1); +- OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_0); +- usleep(15000); +- if (MonInfo) break; +- } +- } else if (radeon_output->pI2CBus && info->ddc2 && ((DDCReg == RADEON_LCD_GPIO_MASK) || (DDCReg == RADEON_MDGPIO_EN_REG))) { ++ if (radeon_output->pI2CBus && info->ddc2) { + MonInfo = xf86DoEDID_DDC2(pScrn->scrnIndex, radeon_output->pI2CBus); + } else { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "DDC2/I2C is not properly initialized\n"); diff --git a/radeon-git-upstream-fixes.patch b/radeon-git-upstream-fixes.patch deleted file mode 100644 index 4129eef..0000000 --- a/radeon-git-upstream-fixes.patch +++ /dev/null @@ -1,805 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index 5f18d2b..5216eff 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -79,7 +79,7 @@ sdkdir=$(pkg-config --variable=sdkdir xorg-server) - # Checks for header files. - AC_HEADER_STDC - --if test "$DRI" != no; then -+if test "x$DRI" = xauto; then - AC_CHECK_FILE([${sdkdir}/dri.h], - [have_dri_h="yes"], [have_dri_h="no"]) - AC_CHECK_FILE([${sdkdir}/sarea.h], -diff --git a/man/radeon.man b/man/radeon.man -index 35dd701..9168254 100644 ---- a/man/radeon.man -+++ b/man/radeon.man -@@ -383,6 +383,14 @@ case. This is only useful for LVDS panels (laptop internal panels). - The default is - .B on. - .TP -+.BI "Option \*qLVDSBiosNativeMode\*q \*q" boolean \*q -+On some laptops, the LVDS mode from the timing tables in the bios does -+not work properly. In those cases, a CVT mode seems to work better. -+If you get a blank screen or have LVDS display problems, disable this -+option to use a CVT mode. -+The default is -+.B on. -+.TP - .BI "Option \*qDRI\*q \*q" boolean \*q - Enable DRI support. This option allows you to enable to disable the DRI. - The default is -diff --git a/src/Makefile.am b/src/Makefile.am -index 1eea432..ff1e225 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -66,6 +66,17 @@ atimisc_drv_la_SOURCES = \ - atiload.c atimisc.c atimach64probe.c $(ATIMISC_CPIO_SOURCES) \ - $(ATIMISC_DGA_SOURCES) $(ATIMISC_DRI_SRCS) $(ATIMISC_EXA_SOURCES) - -+if XSERVER_LIBPCIACCESS -+# r128 has not been ported yet -+else -+r128_drv_la_LTLIBRARIES = r128_drv.la -+r128_drv_la_LDFLAGS = -module -avoid-version -+r128_drv_ladir = @moduledir@/drivers -+r128_drv_la_SOURCES = \ -+ r128_accel.c r128_cursor.c r128_dga.c r128_driver.c \ -+ r128_video.c r128_misc.c r128_probe.c $(R128_DRI_SRCS) -+endif -+ - radeon_drv_la_LTLIBRARIES = radeon_drv.la - radeon_drv_la_LDFLAGS = -module -avoid-version - radeon_drv_ladir = @moduledir@/drivers -@@ -76,16 +87,6 @@ radeon_drv_la_SOURCES = \ - radeon_crtc.c radeon_output.c radeon_modes.c radeon_tv.c \ - $(RADEON_DRI_SRCS) $(RADEON_EXA_SOURCES) - --if XSERVER_LIBPCIACCESS --# r128 and theatre have not been ported yet --else --r128_drv_la_LTLIBRARIES = r128_drv.la --r128_drv_la_LDFLAGS = -module -avoid-version --r128_drv_ladir = @moduledir@/drivers --r128_drv_la_SOURCES = \ -- r128_accel.c r128_cursor.c r128_dga.c r128_driver.c \ -- r128_video.c r128_misc.c r128_probe.c $(R128_DRI_SRCS) -- - theatre_detect_drv_la_LTLIBRARIES = theatre_detect_drv.la - theatre_detect_drv_la_LDFLAGS = -module -avoid-version - theatre_detect_drv_ladir = @moduledir@/multimedia -@@ -106,7 +107,6 @@ theatre200_drv_la_CFLAGS = \ - $(AM_CFLAGS) -DMICROC_DIR=\"$(theatre200_drv_ladir)\" - theatre200_drv_la_SOURCES = \ - theatre200.c theatre200_module.c --endif - - EXTRA_DIST = \ - atimach64render.c \ -diff --git a/src/atiprint.c b/src/atiprint.c -index 60d9c21..3a1debb 100644 ---- a/src/atiprint.c -+++ b/src/atiprint.c -@@ -26,6 +26,7 @@ - - #include - #include -+#include - - #include "ati.h" - #include "atichip.h" -diff --git a/src/atiprobe.c b/src/atiprobe.c -index 78b3edd..38ce90d 100644 ---- a/src/atiprobe.c -+++ b/src/atiprobe.c -@@ -26,6 +26,7 @@ - - #include - #include -+#include - - #include "ati.h" - #include "atibus.h" -diff --git a/src/radeon.h b/src/radeon.h -index ad94cc5..6ee43b2 100644 ---- a/src/radeon.h -+++ b/src/radeon.h -@@ -157,7 +157,8 @@ typedef enum { - #if defined(__powerpc__) - OPTION_MAC_MODEL, - #endif -- OPTION_DEFAULT_TMDS_PLL -+ OPTION_DEFAULT_TMDS_PLL, -+ OPTION_LVDS_BIOS_NATIVE_MODE - } RADEONOpts; - - -@@ -816,6 +817,8 @@ typedef struct { - RADEONMacModel MacModel; - #endif - -+ Bool LVDSBiosNativeMode; -+ - Rotation rotation; - void (*PointerMoved)(int, int, int); - CreateScreenResourcesProcPtr CreateScreenResources; -@@ -910,6 +913,8 @@ extern void RADEONRestoreFP2Registers(ScrnInfoPtr pScrn, - RADEONSavePtr restore); - extern void RADEONRestoreLVDSRegisters(ScrnInfoPtr pScrn, - RADEONSavePtr restore); -+extern void RADEONRestoreBIOSRegisters(ScrnInfoPtr pScrn, -+ RADEONSavePtr restore); - extern void RADEONRestoreRMXRegisters(ScrnInfoPtr pScrn, - RADEONSavePtr restore); - extern void RADEONRestorePLLRegisters(ScrnInfoPtr pScrn, -diff --git a/src/radeon_bios.c b/src/radeon_bios.c -index 65c2bb0..1b46746 100644 ---- a/src/radeon_bios.c -+++ b/src/radeon_bios.c -@@ -176,6 +176,9 @@ static Bool RADEONGetATOMConnectorInfoFromBIOS (ScrnInfoPtr pScrn) - case RADEON_LCD_GPIO_MASK: - info->BiosConnector[i].DDCType = DDC_LCD; - break; -+ case RADEON_MDGPIO_EN_REG: -+ info->BiosConnector[i].DDCType = DDC_GPIO; -+ break; - default: - info->BiosConnector[i].DDCType = DDC_NONE_DETECTED; - break; -@@ -254,6 +257,23 @@ static Bool RADEONGetLegacyConnectorInfoFromBIOS (ScrnInfoPtr pScrn) - info->BiosConnector[i].DDCType = DDC_MONID; - } - -+ /* XPRESS desktop chips seem to have a proprietary connector listed for -+ * DVI-D, try and do the right thing here. -+ */ -+ if ((!info->IsMobility) && -+ (info->BiosConnector[i].ConnectorType == CONNECTOR_PROPRIETARY)) { -+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING, -+ "Proprietary connector found, assuming DVI-D\n"); -+ info->BiosConnector[i].DACType = DAC_NONE; -+ info->BiosConnector[i].TMDSType = TMDS_EXT; -+ info->BiosConnector[i].ConnectorType = CONNECTOR_DVI_D; -+ } -+ -+ if (info->BiosConnector[i].ConnectorType >= CONNECTOR_UNSUPPORTED) { -+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Unknown connector type: %d!\n", -+ info->BiosConnector[i].ConnectorType); -+ info->BiosConnector[i].valid = FALSE; -+ } - - } - } else { -@@ -277,7 +297,7 @@ static Bool RADEONGetLegacyConnectorInfoFromBIOS (ScrnInfoPtr pScrn) - tmp1 = RADEON_BIOS8(tmp0+2) & 0x07; - if (tmp1) { - info->BiosConnector[4].DDCType = tmp1; -- if (info->BiosConnector[4].DDCType > DDC_LCD) { -+ if (info->BiosConnector[4].DDCType > DDC_GPIO) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Unknown DDCType %d found\n", - info->BiosConnector[4].DDCType); -diff --git a/src/radeon_crtc.c b/src/radeon_crtc.c -index 47e46f3..eeb1c6c 100644 ---- a/src/radeon_crtc.c -+++ b/src/radeon_crtc.c -@@ -311,7 +311,7 @@ RADEONInitCrtcRegisters(xf86CrtcPtr crtc, RADEONSavePtr save, - return FALSE; - } - -- save->bios_4_scratch = info->SavedReg.bios_4_scratch; -+ /*save->bios_4_scratch = info->SavedReg.bios_4_scratch;*/ - save->crtc_gen_cntl = (RADEON_CRTC_EXT_DISP_EN - | RADEON_CRTC_EN - | (format << 8) -@@ -348,11 +348,10 @@ RADEONInitCrtcRegisters(xf86CrtcPtr crtc, RADEONSavePtr save, - - hsync_wid = (mode->CrtcHSyncEnd - mode->CrtcHSyncStart) / 8; - if (!hsync_wid) hsync_wid = 1; -- if (hsync_wid > 0x3f) hsync_wid = 0x3f; - hsync_start = mode->CrtcHSyncStart - 8; - - save->crtc_h_sync_strt_wid = ((hsync_start & 0x1fff) -- | (hsync_wid << 16) -+ | ((hsync_wid & 0x3f) << 16) - | ((mode->Flags & V_NHSYNC) - ? RADEON_CRTC_H_SYNC_POL - : 0)); -@@ -363,10 +362,9 @@ RADEONInitCrtcRegisters(xf86CrtcPtr crtc, RADEONSavePtr save, - - vsync_wid = mode->CrtcVSyncEnd - mode->CrtcVSyncStart; - if (!vsync_wid) vsync_wid = 1; -- if (vsync_wid > 0x1f) vsync_wid = 0x1f; - - save->crtc_v_sync_strt_wid = (((mode->CrtcVSyncStart - 1) & 0xfff) -- | (vsync_wid << 16) -+ | ((vsync_wid & 0x1f) << 16) - | ((mode->Flags & V_NVSYNC) - ? RADEON_CRTC_V_SYNC_POL - : 0)); -@@ -545,11 +543,10 @@ RADEONInitCrtc2Registers(xf86CrtcPtr crtc, RADEONSavePtr save, - - hsync_wid = (mode->CrtcHSyncEnd - mode->CrtcHSyncStart) / 8; - if (!hsync_wid) hsync_wid = 1; -- if (hsync_wid > 0x3f) hsync_wid = 0x3f; - hsync_start = mode->CrtcHSyncStart - 8; - - save->crtc2_h_sync_strt_wid = ((hsync_start & 0x1fff) -- | (hsync_wid << 16) -+ | ((hsync_wid & 0x3f) << 16) - | ((mode->Flags & V_NHSYNC) - ? RADEON_CRTC_H_SYNC_POL - : 0)); -@@ -560,10 +557,9 @@ RADEONInitCrtc2Registers(xf86CrtcPtr crtc, RADEONSavePtr save, - - vsync_wid = mode->CrtcVSyncEnd - mode->CrtcVSyncStart; - if (!vsync_wid) vsync_wid = 1; -- if (vsync_wid > 0x1f) vsync_wid = 0x1f; - - save->crtc2_v_sync_strt_wid = (((mode->CrtcVSyncStart - 1) & 0xfff) -- | (vsync_wid << 16) -+ | ((vsync_wid & 0x1f) << 16) - | ((mode->Flags & V_NVSYNC) - ? RADEON_CRTC2_V_SYNC_POL - : 0)); -@@ -768,6 +764,18 @@ RADEONInitPLL2Registers(ScrnInfoPtr pScrn, RADEONSavePtr save, - } - - static void -+RADEONInitBIOSRegisters(ScrnInfoPtr pScrn, RADEONSavePtr save) -+{ -+ RADEONInfoPtr info = RADEONPTR(pScrn); -+ -+ /* tell the bios not to muck with the hardware on events */ -+ save->bios_4_scratch = 0; -+ save->bios_5_scratch = 0xff00; -+ save->bios_6_scratch = info->SavedReg.bios_6_scratch | 0x40000000; -+ -+} -+ -+static void - radeon_update_tv_routing(ScrnInfoPtr pScrn, RADEONSavePtr restore) - { - /* pixclks_cntl controls tv clock routing */ -@@ -813,6 +821,9 @@ radeon_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, - } - } - -+ if (info->IsMobility) -+ RADEONInitBIOSRegisters(pScrn, &info->ModeReg); -+ - ErrorF("init memmap\n"); - RADEONInitMemMapRegisters(pScrn, &info->ModeReg, info); - ErrorF("init common\n"); -@@ -868,6 +879,9 @@ radeon_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, - } - } - -+ if (info->IsMobility) -+ RADEONRestoreBIOSRegisters(pScrn, &info->ModeReg); -+ - ErrorF("restore memmap\n"); - RADEONRestoreMemMapRegisters(pScrn, &info->ModeReg); - ErrorF("restore common\n"); -diff --git a/src/radeon_driver.c b/src/radeon_driver.c -index 03f531e..40e1d98 100644 ---- a/src/radeon_driver.c -+++ b/src/radeon_driver.c -@@ -190,6 +190,7 @@ static const OptionInfoRec RADEONOptions[] = { - #if defined(__powerpc__) - { OPTION_MAC_MODEL, "MacModel", OPTV_STRING, {0}, FALSE }, - #endif -+ { OPTION_LVDS_BIOS_NATIVE_MODE, "LVDSBiosNativeMode", OPTV_BOOLEAN, {0}, TRUE }, - { -1, NULL, OPTV_NONE, {0}, FALSE } - }; - -@@ -4235,14 +4236,27 @@ void RADEONRestoreLVDSRegisters(ScrnInfoPtr pScrn, RADEONSavePtr restore) - - if (info->IsMobility) { - OUTREG(RADEON_LVDS_GEN_CNTL, restore->lvds_gen_cntl); -- OUTREG(RADEON_LVDS_PLL_CNTL, restore->lvds_pll_cntl); -- /*OUTREG(RADEON_BIOS_4_SCRATCH, restore->bios_4_scratch); -- OUTREG(RADEON_BIOS_5_SCRATCH, restore->bios_5_scratch); -- OUTREG(RADEON_BIOS_6_SCRATCH, restore->bios_6_scratch);*/ -+ OUTREG(RADEON_LVDS_PLL_CNTL, restore->lvds_pll_cntl); - } - - } - -+void RADEONRestoreBIOSRegisters(ScrnInfoPtr pScrn, RADEONSavePtr restore) -+{ -+ RADEONInfoPtr info = RADEONPTR(pScrn); -+ unsigned char *RADEONMMIO = info->MMIO; -+ CARD32 bios_6_scratch = INREG(RADEON_BIOS_6_SCRATCH); -+ -+ OUTREG(RADEON_BIOS_4_SCRATCH, restore->bios_4_scratch); -+ OUTREG(RADEON_BIOS_5_SCRATCH, restore->bios_5_scratch); -+ if (restore->bios_6_scratch & 0x40000000) -+ bios_6_scratch |= 0x40000000; -+ else -+ bios_6_scratch &= ~0x40000000; -+ OUTREG(RADEON_BIOS_6_SCRATCH, bios_6_scratch); -+ -+} -+ - /* Write to TV FIFO RAM */ - static void RADEONWriteTVFIFO(ScrnInfoPtr pScrn, CARD16 addr, - CARD32 value) -@@ -5082,6 +5096,16 @@ static void RADEONSaveDACRegisters(ScrnInfoPtr pScrn, RADEONSavePtr save) - - } - -+static void RADEONSaveBIOSRegisters(ScrnInfoPtr pScrn, RADEONSavePtr save) -+{ -+ RADEONInfoPtr info = RADEONPTR(pScrn); -+ unsigned char *RADEONMMIO = info->MMIO; -+ -+ save->bios_4_scratch = INREG(RADEON_BIOS_4_SCRATCH); -+ save->bios_5_scratch = INREG(RADEON_BIOS_5_SCRATCH); -+ save->bios_6_scratch = INREG(RADEON_BIOS_6_SCRATCH); -+} -+ - /* Read flat panel registers */ - static void RADEONSaveFPRegisters(ScrnInfoPtr pScrn, RADEONSavePtr save) - { -@@ -5096,9 +5120,6 @@ static void RADEONSaveFPRegisters(ScrnInfoPtr pScrn, RADEONSavePtr save) - save->lvds_pll_cntl = INREG(RADEON_LVDS_PLL_CNTL); - save->tmds_pll_cntl = INREG(RADEON_TMDS_PLL_CNTL); - save->tmds_transmitter_cntl= INREG(RADEON_TMDS_TRANSMITTER_CNTL); -- save->bios_4_scratch = INREG(RADEON_BIOS_4_SCRATCH); -- save->bios_5_scratch = INREG(RADEON_BIOS_5_SCRATCH); -- save->bios_6_scratch = INREG(RADEON_BIOS_6_SCRATCH); - - if (info->ChipFamily == CHIP_FAMILY_RV280) { - /* bit 22 of TMDS_PLL_CNTL is read-back inverted */ -@@ -5325,7 +5346,7 @@ static void RADEONSave(ScrnInfoPtr pScrn) - vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_MODE); /* Save mode only */ - # else - /* Save mode * & fonts & cmap */ -- vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_MODE | VGA_SR_FONTS); -+ vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_ALL); - # endif - vgaHWLock(hwp); - } -@@ -5340,6 +5361,7 @@ static void RADEONSave(ScrnInfoPtr pScrn) - RADEONSavePLLRegisters(pScrn, save); - RADEONSaveCrtcRegisters(pScrn, save); - RADEONSaveFPRegisters(pScrn, save); -+ RADEONSaveBIOSRegisters(pScrn, save); - RADEONSaveDACRegisters(pScrn, save); - if (pRADEONEnt->HasCRTC2) { - RADEONSaveCrtc2Registers(pScrn, save); -@@ -5386,6 +5408,7 @@ void RADEONRestore(ScrnInfoPtr pScrn) - RADEONRestorePLL2Registers(pScrn, restore); - } - -+ RADEONRestoreBIOSRegisters(pScrn, restore); - RADEONRestoreCrtcRegisters(pScrn, restore); - RADEONRestorePLLRegisters(pScrn, restore); - RADEONRestoreRMXRegisters(pScrn, restore); -@@ -5417,7 +5440,7 @@ void RADEONRestore(ScrnInfoPtr pScrn) - */ - vgaHWRestore(pScrn, &hwp->SavedReg, VGA_SR_MODE ); - # else -- vgaHWRestore(pScrn, &hwp->SavedReg, VGA_SR_MODE | VGA_SR_FONTS ); -+ vgaHWRestore(pScrn, &hwp->SavedReg, VGA_SR_ALL ); - # endif - vgaHWLock(hwp); - } -diff --git a/src/radeon_modes.c b/src/radeon_modes.c -index ea2c229..e01c1e1 100644 ---- a/src/radeon_modes.c -+++ b/src/radeon_modes.c -@@ -95,20 +95,45 @@ static DisplayModePtr RADEONTVModes(xf86OutputPtr output) - static DisplayModePtr RADEONFPNativeMode(xf86OutputPtr output) - { - ScrnInfoPtr pScrn = output->scrn; -+ RADEONInfoPtr info = RADEONPTR(pScrn); - RADEONOutputPrivatePtr radeon_output = output->driver_private; - DisplayModePtr new = NULL; -+ char stmp[32]; - - if (radeon_output->PanelXRes != 0 && - radeon_output->PanelYRes != 0 && - radeon_output->DotClock != 0) { - -- /* Add native panel size */ -- new = xf86CVTMode(radeon_output->PanelXRes, radeon_output->PanelYRes, 60.0, TRUE, FALSE); -+ if (info->LVDSBiosNativeMode) { -+ new = xnfcalloc(1, sizeof (DisplayModeRec)); -+ sprintf(stmp, "%dx%d", radeon_output->PanelXRes, radeon_output->PanelYRes); -+ new->name = xnfalloc(strlen(stmp) + 1); -+ strcpy(new->name, stmp); -+ new->HDisplay = radeon_output->PanelXRes; -+ new->VDisplay = radeon_output->PanelYRes; - -- new->type = M_T_DRIVER | M_T_PREFERRED; -+ new->HTotal = new->HDisplay + radeon_output->HBlank; -+ new->HSyncStart = new->HDisplay + radeon_output->HOverPlus; -+ new->HSyncEnd = new->HSyncStart + radeon_output->HSyncWidth; -+ new->VTotal = new->VDisplay + radeon_output->VBlank; -+ new->VSyncStart = new->VDisplay + radeon_output->VOverPlus; -+ new->VSyncEnd = new->VSyncStart + radeon_output->VSyncWidth; - -- new->next = NULL; -- new->prev = NULL; -+ new->Clock = radeon_output->DotClock; -+ new->Flags = 0; -+ -+ } else { -+ /* Add native panel size */ -+ new = xf86CVTMode(radeon_output->PanelXRes, radeon_output->PanelYRes, 60.0, FALSE, FALSE); -+ -+ } -+ -+ if (new) { -+ new->type = M_T_DRIVER | M_T_PREFERRED; -+ -+ new->next = NULL; -+ new->prev = NULL; -+ } - - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Added native panel mode: %dx%d\n", - radeon_output->PanelXRes, radeon_output->PanelYRes); -@@ -159,7 +184,7 @@ static void RADEONAddScreenModes(xf86OutputPtr output, DisplayModePtr *modeList) - } - } - -- new = xf86CVTMode(width, height, 60.0, TRUE, FALSE); -+ new = xf86CVTMode(width, height, 60.0, FALSE, FALSE); - - new->type |= M_T_USERDEF; - -@@ -199,11 +224,13 @@ RADEONProbeOutputModes(xf86OutputPtr output) - - if (output->status == XF86OutputStatusConnected) { - if (radeon_output->type == OUTPUT_DVI || radeon_output->type == OUTPUT_VGA) { -- edid_mon = xf86OutputGetEDID (output, radeon_output->pI2CBus); -- xf86OutputSetEDID (output, edid_mon); -+ if (output->MonInfo) { -+ edid_mon = xf86OutputGetEDID (output, radeon_output->pI2CBus); -+ xf86OutputSetEDID (output, edid_mon); - -- modes = xf86OutputGetEDIDModes (output); -- return modes; -+ modes = xf86OutputGetEDIDModes (output); -+ return modes; -+ } - } - if (radeon_output->type == OUTPUT_STV || radeon_output->type == OUTPUT_CTV) { - modes = RADEONTVModes(output); -diff --git a/src/radeon_output.c b/src/radeon_output.c -index a6da78e..e2f26e7 100644 ---- a/src/radeon_output.c -+++ b/src/radeon_output.c -@@ -75,13 +75,14 @@ const char *TMDSTypeName[4] = { - "None" - }; - --const char *DDCTypeName[6] = { -+const char *DDCTypeName[7] = { - "None", - "MONID", - "DVI_DDC", - "VGA_DDC", - "CRT2_DDC", -- "LCD_DDC" -+ "LCD_DDC", -+ "GPIO_DDC" - }; - - const char *DACTypeName[4] = { -@@ -277,7 +278,7 @@ RADEONDisplayDDCConnected(ScrnInfoPtr pScrn, xf86OutputPtr output) - DDCReg = radeon_output->DDCReg; - - /* Read and output monitor info using DDC2 over I2C bus */ -- if (radeon_output->pI2CBus && info->ddc2 && (DDCReg != RADEON_LCD_GPIO_MASK)) { -+ if (radeon_output->pI2CBus && info->ddc2 && (DDCReg != RADEON_LCD_GPIO_MASK) && (DDCReg != RADEON_MDGPIO_EN_REG)) { - OUTREG(DDCReg, INREG(DDCReg) & - (CARD32)~(RADEON_GPIO_A_0 | RADEON_GPIO_A_1)); - -@@ -331,7 +332,7 @@ RADEONDisplayDDCConnected(ScrnInfoPtr pScrn, xf86OutputPtr output) - usleep(15000); - if(*MonInfo) break; - } -- } else if (radeon_output->pI2CBus && info->ddc2 && DDCReg == RADEON_LCD_GPIO_MASK) { -+ } else if (radeon_output->pI2CBus && info->ddc2 && ((DDCReg == RADEON_LCD_GPIO_MASK) || (DDCReg == RADEON_MDGPIO_EN_REG))) { - *MonInfo = xf86DoEDID_DDC2(pScrn->scrnIndex, radeon_output->pI2CBus); - } else { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "DDC2/I2C is not properly initialized\n"); -@@ -669,9 +670,19 @@ static RADEONMonitorType RADEONPortCheckNonDDC(ScrnInfoPtr pScrn, xf86OutputPtr - RADEONOutputPrivatePtr radeon_output = output->driver_private; - RADEONMonitorType MonType = MT_NONE; - -- - if (radeon_output->type == OUTPUT_LVDS) { -- MonType = MT_LCD; -+#if defined(__powerpc__) -+ /* not sure on ppc, OF? */ -+#else -+ if (!info->IsAtomBios) { -+ /* see if the lid is closed -- only works at boot */ -+ if (INREG(RADEON_BIOS_6_SCRATCH) & 0x10) -+ MonType = MT_NONE; -+ else -+ MonType = MT_LCD; -+ } else -+#endif -+ MonType = MT_LCD; - } else if (radeon_output->type == OUTPUT_DVI) { - if (radeon_output->TMDSType == TMDS_INT) { - if (INREG(RADEON_FP_GEN_CNTL) & RADEON_FP_DETECT_SENSE) -@@ -765,10 +776,14 @@ radeon_mode_fixup(xf86OutputPtr output, DisplayModePtr mode, - } - } - -- /* update clock for LVDS always and DFP if RMX is active */ -- if ((radeon_output->MonType == MT_LCD) || -- ((radeon_output->MonType == MT_DFP) && -- (radeon_output->Flags & RADEON_USE_RMX))) { -+ /* update timing for LVDS and DFP if RMX is active */ -+ if (radeon_output->Flags & RADEON_USE_RMX) { -+ adjusted_mode->CrtcHTotal = mode->CrtcHDisplay + radeon_output->HBlank; -+ adjusted_mode->CrtcHSyncStart = mode->CrtcHDisplay + radeon_output->HOverPlus; -+ adjusted_mode->CrtcHSyncEnd = mode->CrtcHSyncStart + radeon_output->HSyncWidth; -+ adjusted_mode->CrtcVTotal = mode->CrtcVDisplay + radeon_output->VBlank; -+ adjusted_mode->CrtcVSyncStart = mode->CrtcVDisplay + radeon_output->VOverPlus; -+ adjusted_mode->CrtcVSyncEnd = mode->CrtcVSyncStart + radeon_output->VSyncWidth; - adjusted_mode->Clock = radeon_output->DotClock; - adjusted_mode->Flags = radeon_output->Flags; - } -@@ -1636,6 +1651,16 @@ radeon_detect(xf86OutputPtr output) - break; - } - -+ if (!connected) { -+ /* default to unknown for flaky chips/connectors -+ * so we can get something on the screen -+ */ -+ if (((radeon_output->type == OUTPUT_VGA || radeon_output->type == OUTPUT_DVI) && -+ radeon_output->DACType == DAC_TVDAC) || -+ (info->IsIGP && radeon_output->type == OUTPUT_DVI)) -+ return XF86OutputStatusUnknown; -+ } -+ - if (connected) - return XF86OutputStatusConnected; - else -@@ -1911,7 +1936,7 @@ radeon_create_resources(xf86OutputPtr output) - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "RRConfigureOutputProperty error, %d\n", err); - } -- /* Set the current value of the backlight property */ -+ /* Set the current value of the property */ - switch (radeon_output->default_tvStd) { - case TV_STD_PAL: - s = "pal"; -@@ -2081,47 +2106,23 @@ radeon_set_property(xf86OutputPtr output, Atom property, - return FALSE; - s = (char*)value->data; - if (value->size == strlen("ntsc") && !strncmp("ntsc", s, strlen("ntsc"))) { -- if (radeon_output->SupportedTVStds & TV_STD_NTSC) { -- radeon_output->tvStd = TV_STD_NTSC; -- return TRUE; -- } else { -- return FALSE; -- } -+ radeon_output->tvStd = TV_STD_NTSC; -+ return TRUE; - } else if (value->size == strlen("pal") && !strncmp("pal", s, strlen("pal"))) { -- if (radeon_output->SupportedTVStds & TV_STD_PAL) { -- radeon_output->tvStd = TV_STD_PAL; -- return TRUE; -- } else { -- return FALSE; -- } -+ radeon_output->tvStd = TV_STD_PAL; -+ return TRUE; - } else if (value->size == strlen("pal-m") && !strncmp("pal-m", s, strlen("pal-m"))) { -- if (radeon_output->SupportedTVStds & TV_STD_PAL_M) { -- radeon_output->tvStd = TV_STD_PAL_M; -- return TRUE; -- } else { -- return FALSE; -- } -+ radeon_output->tvStd = TV_STD_PAL_M; -+ return TRUE; - } else if (value->size == strlen("pal-60") && !strncmp("pal-60", s, strlen("pal-60"))) { -- if (radeon_output->SupportedTVStds & TV_STD_PAL_60) { -- radeon_output->tvStd = TV_STD_PAL_60; -- return TRUE; -- } else { -- return FALSE; -- } -+ radeon_output->tvStd = TV_STD_PAL_60; -+ return TRUE; - } else if (value->size == strlen("ntsc-j") && !strncmp("ntsc-j", s, strlen("ntsc-j"))) { -- if (radeon_output->SupportedTVStds & TV_STD_NTSC_J) { -- radeon_output->tvStd = TV_STD_NTSC_J; -- return TRUE; -- } else { -- return FALSE; -- } -+ radeon_output->tvStd = TV_STD_NTSC_J; -+ return TRUE; - } else if (value->size == strlen("scart-pal") && !strncmp("scart-pal", s, strlen("scart-pal"))) { -- if (radeon_output->SupportedTVStds & TV_STD_SCART_PAL) { -- radeon_output->tvStd = TV_STD_SCART_PAL; -- return TRUE; -- } else { -- return FALSE; -- } -+ radeon_output->tvStd = TV_STD_SCART_PAL; -+ return TRUE; - } - return FALSE; - } -@@ -2206,6 +2207,10 @@ static void RADEONI2CGetBits(I2CBusPtr b, int *Clock, int *data) - val = INREG(b->DriverPrivate.uval+4); - *Clock = (val & (1<<13)) != 0; - *data = (val & (1<<12)) != 0; -+ } else if (b->DriverPrivate.uval == RADEON_MDGPIO_EN_REG) { -+ val = INREG(b->DriverPrivate.uval+4); -+ *Clock = (val & (1<<19)) != 0; -+ *data = (val & (1<<18)) != 0; - } else { - val = INREG(b->DriverPrivate.uval); - *Clock = (val & RADEON_GPIO_Y_1) != 0; -@@ -2225,6 +2230,11 @@ static void RADEONI2CPutBits(I2CBusPtr b, int Clock, int data) - val |= (Clock ? 0:(1<<13)); - val |= (data ? 0:(1<<12)); - OUTREG(b->DriverPrivate.uval, val); -+ } else if (b->DriverPrivate.uval == RADEON_MDGPIO_EN_REG) { -+ val = INREG(b->DriverPrivate.uval) & (CARD32)~((1<<18) | (1<<19)); -+ val |= (Clock ? 0:(1<<19)); -+ val |= (data ? 0:(1<<18)); -+ OUTREG(b->DriverPrivate.uval, val); - } else { - val = INREG(b->DriverPrivate.uval) & (CARD32)~(RADEON_GPIO_EN_0 | RADEON_GPIO_EN_1); - val |= (Clock ? 0:RADEON_GPIO_EN_1); -@@ -2430,6 +2440,15 @@ RADEONGetLVDSInfo (xf86OutputPtr output) - } - } - -+ info->LVDSBiosNativeMode = TRUE; -+ if (!xf86ReturnOptValBool(info->Options, OPTION_LVDS_BIOS_NATIVE_MODE, TRUE)) { -+ info->LVDSBiosNativeMode = FALSE; -+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using CVT mode for LVDS\n"); -+ } else { -+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using LVDS Native Mode\n"); -+ } -+ -+ - /* The panel size we collected from BIOS may not be the - * maximum size supported by the panel. If not, we update - * it now. These will be used if no matching mode can be -@@ -2547,6 +2566,7 @@ void RADEONInitConnector(xf86OutputPtr output) - case DDC_VGA : DDCReg = RADEON_GPIO_VGA_DDC; break; - case DDC_CRT2 : DDCReg = RADEON_GPIO_CRT2_DDC; break; - case DDC_LCD : DDCReg = RADEON_LCD_GPIO_MASK; break; -+ case DDC_GPIO : DDCReg = RADEON_MDGPIO_EN_REG; break; - default: break; - } - -@@ -2791,6 +2811,78 @@ static void RADEONSetupGenericConnectors(ScrnInfoPtr pScrn) - - } - -+#if defined(__powerpc__) -+ -+/* -+ * Returns RADEONMacModel or 0 based on lines 'detected as' and 'machine' -+ * in /proc/cpuinfo (on Linux) */ -+static RADEONMacModel RADEONDetectMacModel(ScrnInfoPtr pScrn) -+{ -+ RADEONMacModel ret = 0; -+#ifdef __linux__ -+ char cpuline[50]; /* 50 should be sufficient for our purposes */ -+ FILE *f = fopen ("/proc/cpuinfo", "r"); -+ -+ if (f != NULL) { -+ while (fgets(cpuline, sizeof cpuline, f)) { -+ if (!strncmp(cpuline, "machine", strlen ("machine"))) { -+ if (strstr(cpuline, "PowerBook5,6") || -+ strstr(cpuline, "PowerBook5,7") || -+ strstr(cpuline, "PowerBook5,8") || -+ strstr(cpuline, "PowerBook5,9")) { -+ ret = RADEON_MAC_POWERBOOK_DL; -+ break; -+ } -+ -+ if (strstr(cpuline, "PowerMac10,1") || -+ strstr(cpuline, "PowerMac10,2")) { -+ ret = RADEON_MAC_MINI; -+ break; -+ } -+ } else if (!strncmp(cpuline, "detected as", strlen("detected as"))) { -+ if (strstr(cpuline, "iBook")) { -+ ret = RADEON_MAC_IBOOK; -+ break; -+ } else if (strstr(cpuline, "PowerBook")) { -+ ret = RADEON_MAC_POWERBOOK_DL; -+ break; -+ } -+ -+ /* No known PowerMac model detected */ -+ break; -+ } -+ } -+ -+ fclose (f); -+ } else -+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING, -+ "Cannot detect PowerMac model because /proc/cpuinfo not " -+ "readable.\n"); -+ -+#endif /* __linux */ -+ -+ if (ret) { -+ xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT, "Detected %s.\n", -+ ret == RADEON_MAC_POWERBOOK_DL ? "PowerBook with dual link DVI" : -+ ret == RADEON_MAC_POWERBOOK ? "PowerBook with single link DVI" : -+ ret == RADEON_MAC_IBOOK ? "iBook" : -+ "Mac Mini"); -+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, -+ "If this is not correct, try Option \"MacModel\" and " -+ "consider reporting to the\n"); -+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, -+ "xorg-driver-ati@lists.x.org mailing list" -+#ifdef __linux__ -+ " with the contents of /proc/cpuinfo" -+#endif -+ ".\n"); -+ } -+ -+ return ret; -+} -+ -+#endif /* __powerpc__ */ -+ - /* - * initialise the static data sos we don't have to re-do at randr change */ - Bool RADEONSetupConnectors(ScrnInfoPtr pScrn) -@@ -2816,9 +2908,8 @@ Bool RADEONSetupConnectors(ScrnInfoPtr pScrn) - } - - #if defined(__powerpc__) -- optstr = (char *)xf86GetOptValString(info->Options, OPTION_MAC_MODEL); -- - info->MacModel = 0; -+ optstr = (char *)xf86GetOptValString(info->Options, OPTION_MAC_MODEL); - if (optstr) { - if (!strncmp("ibook", optstr, strlen("ibook"))) - info->MacModel = RADEON_MAC_IBOOK; -@@ -2830,12 +2921,16 @@ Bool RADEONSetupConnectors(ScrnInfoPtr pScrn) - info->MacModel = RADEON_MAC_MINI; - else { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Invalid Mac Model: %s\n", optstr); -- return FALSE; - } -+ } -+ -+ if (!info->MacModel) { -+ info->MacModel = RADEONDetectMacModel(pScrn); -+ } - -+ if (info->MacModel){ - if (!RADEONSetupAppleConnectors(pScrn)) - RADEONSetupGenericConnectors(pScrn); -- - } else - #endif - if (xf86ReturnOptValBool(info->Options, OPTION_DEFAULT_CONNECTOR_TABLE, FALSE)) { -diff --git a/src/radeon_probe.h b/src/radeon_probe.h -index dbd50d7..66ece94 100644 ---- a/src/radeon_probe.h -+++ b/src/radeon_probe.h -@@ -60,6 +60,7 @@ typedef enum - DDC_VGA, - DDC_CRT2, - DDC_LCD, -+ DDC_GPIO, - } RADEONDDCType; - - typedef enum diff --git a/sources b/sources index 9198175..9e21182 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -2f11b8e699fadd93e6932b07cc01bc64 xf86-video-ati-6.7.195.tar.bz2 +06db625391c75c8be86c4dd5a5d713e6 xf86-video-ati-6.7.196.tar.bz2 diff --git a/xorg-x11-drv-ati.spec b/xorg-x11-drv-ati.spec index 2000623..383f393 100644 --- a/xorg-x11-drv-ati.spec +++ b/xorg-x11-drv-ati.spec @@ -4,8 +4,8 @@ Summary: Xorg X11 ati video driver Name: xorg-x11-drv-ati -Version: 6.7.195 -Release: 5%{?dist} +Version: 6.7.196 +Release: 1%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X Hardware Support @@ -18,8 +18,7 @@ Source3: radeon.xinf # Radeon patches (0-99) Patch2: radeon-6.6.3-renderaccel-buglet.patch -Patch3: radeon-git-upstream-fixes.patch -Patch4: radeon-6.7.195-faster-ddc.patch +Patch4: radeon-6.7.196-faster-ddc.patch # Rage 128 patches (100-199) @@ -43,7 +42,6 @@ X.Org X11 ati video driver. %setup -q -n %{tarball}-%{version} %patch2 -p1 -b .renderaccel -%patch3 -p1 -b .fixes %patch4 -p1 -b .ddc %build @@ -78,14 +76,17 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/hwdata/videoaliases/ati.xinf %{_datadir}/hwdata/videoaliases/r128.xinf %{_datadir}/hwdata/videoaliases/radeon.xinf -#{moduledir}/multimedia/theatre200_drv.so -#{moduledir}/multimedia/theatre_detect_drv.so -#{moduledir}/multimedia/theatre_drv.so +%{moduledir}/multimedia/theatre200_drv.so +%{moduledir}/multimedia/theatre_detect_drv.so +%{moduledir}/multimedia/theatre_drv.so %{_mandir}/man4/ati.4* %{_mandir}/man4/r128.4* %{_mandir}/man4/radeon.4* %changelog +* Wed Nov 14 2007 Adam Jackson 6.7.196-1 +- xf86-video-ati 6.7.196 + * Tue Nov 13 2007 Adam Jackson 6.7.195-5 - Require xserver 1.4.99.1