.gitignore | 5 Makefile.am | 35 ++++++ README | 19 ++- RadeonHD.tmpl | 1 configure.ac | 21 +++ git_version.sh | 13 +- man/radeonhd.man | 204 ++++++++++++++++++++++++++++++++++--- src/Imakefile | 3 src/rhd.h | 20 +++ src/rhd_atombios.c | 25 ++-- src/rhd_card.h | 3 src/rhd_connector.c | 63 ++++++++++- src/rhd_crtc.c | 42 ++++++- src/rhd_crtc.h | 1 src/rhd_cursor.c | 23 ++-- src/rhd_dac.c | 12 ++ src/rhd_driver.c | 230 +++++++++++++++++++++++++++++++++--------- src/rhd_edid.c | 52 +++++++-- src/rhd_helper.c | 42 ++++++- src/rhd_i2c.c | 11 +- src/rhd_id.c | 103 +++++++++++------- src/rhd_lut.c | 4 src/rhd_lvtma.c | 45 ++++---- src/rhd_mc.c | 6 - src/rhd_modes.c | 15 +- src/rhd_monitor.c | 38 ++++-- src/rhd_monitor.h | 3 src/rhd_pll.c | 67 ++++++++++-- src/rhd_randr.c | 207 +++++++++++++++++++++++++++++++------ src/rhd_regs.h | 6 - src/rhd_tmds.c | 10 + src/rhd_vga.c | 7 - utils/conntest/Makefile.am | 4 utils/conntest/README | 2 utils/conntest/rhd_conntest.c | 8 - 35 files changed, 1074 insertions(+), 276 deletions(-)
New commits: commit f213db06140226c843c9649cfaaea4b3d130ba16 Author: Matthias Hopf <[EMAIL PROTECTED]> Date: Fri Dec 21 16:43:05 2007 +0100 Bump to 1.1.0. Add changes to README. diff --git a/README b/README index c42645c..8c5739e 100644 --- a/README +++ b/README @@ -28,8 +28,21 @@ This README file contains the following sections: -Recent Changes -============== +Major Changes +============= + +Read ChangeLog for a complete list. + +- Version 1.1.0 + + - Added Support for RS600, preliminary RV670. + - Allow panning in RandR mode. + - Preliminary (read: untested) support for HDMI connectors. + - Lots of bugfixes, e.g. + - Better monitor detection. + - Gamma + palette fixes. + - Mode stability + textmode restore. + - RandR mode selection fixes. - Version 1.0.0 @@ -50,7 +63,7 @@ More Resources The official radeonhd wiki: http://wiki.x.org/wiki/radeonhd - + The mailing list on radeonhd: http://lists.opensuse.org/radeonhd/ diff --git a/configure.ac b/configure.ac index 85e3cf7..db0432c 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ AC_PREREQ(2.57) AC_INIT([xf86-video-radeonhd], - 1.0.0, + 1.1.0, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/radeonhd], xf86-video-radeonhd) commit c036b81933391ea41b78c4ba20bde01a1939433f Author: Matthias Hopf <[EMAIL PROTECTED]> Date: Thu Dec 20 17:45:28 2007 +0100 Be a bit more strict in asking for user reports. Only on problems. We don't want reports about unknown boards if there is no problem at all. diff --git a/src/rhd_id.c b/src/rhd_id.c index b9daabf..9fa820a 100644 --- a/src/rhd_id.c +++ b/src/rhd_id.c @@ -652,7 +652,7 @@ RHDCardIdentify(ScrnInfoPtr pScrn) deviceID, subVendorID, subDeviceID); #ifdef ATOM_BIOS xf86Msg(X_NONE, "\t" - "If your card does not work or does not work optimally\n\t" + "If - and only if - your card does not work or does not work optimally\n\t" "please contact [EMAIL PROTECTED] to help rectify this.\n\t" "Use the subject: 0x%04X:0x%04X:0x%04X: <name of board>.\n", deviceID, subVendorID, subDeviceID); commit 064b2899884557672850f8c2b309a82395995d62 Author: Matthias Hopf <[EMAIL PROTECTED]> Date: Fri Dec 21 16:54:03 2007 +0100 fglrx check didn't compile correctly with ansi wrapper enabled. Fix this. diff --git a/src/rhd_driver.c b/src/rhd_driver.c index 80a410b..8b02192 100644 --- a/src/rhd_driver.c +++ b/src/rhd_driver.c @@ -88,6 +88,7 @@ # include <sys/stat.h> # include <string.h> # include <unistd.h> +# define stat_t struct stat #endif /* @@ -424,7 +425,7 @@ RHDPreInit(ScrnInfoPtr pScrn, int flags) Bool ret = FALSE; RHDI2CDataArg i2cArg; DisplayModePtr Modes; /* Non-RandR-case only */ - struct stat statbuf; + stat_t statbuf; if (flags & PROBE_DETECT) { /* do dynamic mode probing */ commit b9277bfc275254be9823578819a13ceb056fc47e Author: Matthias Hopf <[EMAIL PROTECTED]> Date: Fri Dec 21 16:27:51 2007 +0100 Check for fglrx kernel module and bark if it is loaded. diff --git a/man/radeonhd.man b/man/radeonhd.man index e1bbd76..5039c2c 100644 --- a/man/radeonhd.man +++ b/man/radeonhd.man @@ -47,8 +47,9 @@ After using the .I fglrx driver, the display can get very jittery with .BR radeonhd . -A reboot fixes this problem in most -cases, sometimes a powercycle is necessary. +Also suspend & resume will probably fail. A reboot fixes this problem in most +cases, sometimes a powercycle is necessary. Unloading the kernel module is +typically not enough. .PP A more up-to-date list can be found on the wiki page. .PP diff --git a/src/rhd_driver.c b/src/rhd_driver.c index 2ef58f3..80a410b 100644 --- a/src/rhd_driver.c +++ b/src/rhd_driver.c @@ -84,7 +84,10 @@ #if HAVE_XF86_ANSIC_H # include "xf86_ansic.h" #else +# include <sys/types.h> +# include <sys/stat.h> # include <string.h> +# include <unistd.h> #endif /* @@ -167,6 +170,10 @@ static int pix24bpp = 0; #define _X_EXPORT #endif +#ifdef __linux__ +# define FGLRX_SYS_PATH "/sys/module/fglrx" +#endif + _X_EXPORT DriverRec RADEONHD = { RHD_VERSION, RHD_DRIVER_NAME, @@ -417,12 +424,22 @@ RHDPreInit(ScrnInfoPtr pScrn, int flags) Bool ret = FALSE; RHDI2CDataArg i2cArg; DisplayModePtr Modes; /* Non-RandR-case only */ + struct stat statbuf; if (flags & PROBE_DETECT) { /* do dynamic mode probing */ return TRUE; } +#ifdef FGLRX_SYS_PATH + /* check for fglrx kernel module */ + if (stat (FGLRX_SYS_PATH, &statbuf) == 0) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "The fglrx kernel module is loaded. This can have obvious\n" + " or subtle side effects. See radeonhd(4) for details.\n"); + } +#endif + #ifndef XSERVER_LIBPCIACCESS /* * Allocate the RhdRec driverPrivate commit 79e016fde25a4ac713acedeb97cc4e5a6425d1ab Author: Luc Verhaegen <[EMAIL PROTECTED]> Date: Fri Dec 21 03:48:01 2007 +0100 RV670: TMDSA: Electrical values for 9505. diff --git a/src/rhd_tmds.c b/src/rhd_tmds.c index 505e843..25eb841 100644 --- a/src/rhd_tmds.c +++ b/src/rhd_tmds.c @@ -160,6 +160,7 @@ static struct Rv6xxTMDSAMacro { } Rv6xxTMDSAMacro[] = { { 0x94C1, 0x00010416, 0x00010308 }, /* RV610 */ { 0x94C3, 0x00010416, 0x00010308 }, /* RV610 */ + { 0x9505, 0x00010416, 0x00010308 }, /* RV670: != atombios */ { 0x9587, 0x00010416, 0x00010308 }, /* RV630 */ { 0x9588, 0x00010416, 0x00010388 }, /* RV630 */ { 0x9589, 0x00010416, 0x00010388 }, /* RV630 */ commit 9c010f2cb89ff3ca063a4c057f2cdce1047f2e46 Author: Luc Verhaegen <[EMAIL PROTECTED]> Date: Fri Dec 21 01:12:37 2007 +0100 Rv670 TMDSB electrical values. diff --git a/src/rhd_lvtma.c b/src/rhd_lvtma.c index d808906..84634c6 100644 --- a/src/rhd_lvtma.c +++ b/src/rhd_lvtma.c @@ -619,11 +619,12 @@ static struct RV6xxTMDSBMacro { CARD32 TX; CARD32 PreEmphasis; } RV6xxTMDSBMacro[] = { - { 0x94C1, 0x01030311, 0x10001A00, 0x01801015}, - { 0x94C3, 0x01030311, 0x10001A00, 0x01801015}, - { 0x9587, 0x01030311, 0x10001C00, 0x01C01011}, /* guess: broken atombios */ - { 0x9588, 0x01030311, 0x10001C00, 0x01C01011}, - { 0x9589, 0x01030311, 0x10001C00, 0x01C01011}, + { 0x94C1, 0x01030311, 0x10001A00, 0x01801015}, /* RV610 */ + { 0x94C3, 0x01030311, 0x10001A00, 0x01801015}, /* RV610 */ + { 0x9505, 0x0533041A, 0x020010A0, 0x41002045}, /* RV670 */ + { 0x9587, 0x01030311, 0x10001C00, 0x01C01011}, /* RV630 */ + { 0x9588, 0x01030311, 0x10001C00, 0x01C01011}, /* RV630 */ + { 0x9589, 0x01030311, 0x10001C00, 0x01C01011}, /* RV630 */ { 0, 0, 0, 0} /* End marker */ }; @@ -679,7 +680,7 @@ TMDSBSet(struct rhdOutput *Output) RHDRegMask(Output, LVTMA_REG_TEST_OUTPUT, 0x00200000, 0x00200000); else if ((rhdPtr->ChipSet == RHD_RS600) || (rhdPtr->ChipSet == RHD_RS690)) RHDRegWrite(Output, LVTMA_REG_TEST_OUTPUT, 0x01120000); - else /* R600 and up */ + else if (rhdPtr->ChipSet < RHD_RV670) RHDRegMask(Output, LVTMA_REG_TEST_OUTPUT, 0x00100000, 0x00100000); /* Clear out some HPD events first: this should be under driver control. */ commit e5f9b2d2f646ae93552eaccbd1193778fc772c8b Author: Luc Verhaegen <[EMAIL PROTECTED]> Date: Thu Dec 20 18:08:40 2007 +0100 Rv670: Add PLL control values. diff --git a/src/rhd_pll.c b/src/rhd_pll.c index bd1702e..8b9ac71 100644 --- a/src/rhd_pll.c +++ b/src/rhd_pll.c @@ -274,6 +274,52 @@ PLL2SetLow(struct rhdPLL *PLL, CARD32 RefDiv, CARD32 FBDiv, CARD32 PostDiv, * For R500, this is done in atombios by ASIC_RegistersInit * Some data table in atom should've provided this information. */ + +struct PLL_Control { + CARD16 FeedbackDivider; /* 0xFFFF/-1 is the endmarker here */ + CARD32 Control; +}; + +/* From hardcoded values. */ +static struct PLL_Control RV610PLLControl[] = +{ + { 0x0049, 0x159F8704 }, + { 0x006C, 0x159B8704 }, + { 0xFFFF, 0x159EC704 } +}; + +/* Some tables are provided by atombios, + * it's just that they are hidden away deliberately and not exposed */ +static struct PLL_Control RV670PLLControl[] = +{ + { 0x004A, 0x159FC704 }, + { 0x0067, 0x159BC704 }, + { 0x00C4, 0x159EC704 }, + { 0x00F4, 0x1593A704 }, + { 0x0136, 0x1595A704 }, + { 0x01A4, 0x1596A704 }, + { 0x022C, 0x159CE504 }, + { 0xFFFF, 0x1591E404 } +}; + +/* + * + */ +static CARD32 +PLLControlTableRetrieve(struct PLL_Control *Table, CARD16 FeedbackDivider) +{ + int i; + + for (i = 0; Table[i].FeedbackDivider == 0xFFFF; i++) + if (Table[i].FeedbackDivider >= FeedbackDivider) + break; + + return Table[i].Control; +} + +/* + * + */ static CARD32 PLLElectrical(RHDPtr rhdPtr, CARD16 FeedbackDivider) { @@ -299,13 +345,9 @@ PLLElectrical(RHDPtr rhdPtr, CARD16 FeedbackDivider) case RHD_M72: case RHD_M74: case RHD_M76: - /* charge pump and loop filter differ per FB divider */ - if (FeedbackDivider >= 0x6C) - return 0x159EC704; - else if (FeedbackDivider >= 0x49) - return 0x159B8704; - else - return 0x159F8704; + return PLLControlTableRetrieve(RV610PLLControl, FeedbackDivider); + case RHD_RV670: + return PLLControlTableRetrieve(RV670PLLControl, FeedbackDivider); default: return 0; } commit da8b68aa190ce00bb30057f86cb56079eaa29909 Author: Matthias Hopf <[EMAIL PROTECTED]> Date: Thu Dec 20 17:25:55 2007 +0100 Use DDC address probing for finding connected monitors if necessary. If both HPD and Sense are not available, use DDC. diff --git a/src/rhd_randr.c b/src/rhd_randr.c index c6062a5..cc49ea1 100644 --- a/src/rhd_randr.c +++ b/src/rhd_randr.c @@ -804,6 +804,13 @@ rhdRROutputDetect(xf86OutputPtr output) else return XF86OutputStatusDisconnected; } + /* Use DDC address probing if possible otherwise */ + if (rout->Connector->DDC) { + if (xf86I2CProbeAddress(rout->Connector->DDC, 0xa0)) + return XF86OutputStatusConnected; + else + return XF86OutputStatusDisconnected; + } return XF86OutputStatusUnknown; } } commit 73aaafadb00f698ce63d52455801a4aa368ded41 Author: Matthias Hopf <[EMAIL PROTECTED]> Date: Thu Dec 20 17:24:27 2007 +0100 Update supported devices table. diff --git a/man/radeonhd.man b/man/radeonhd.man index c312419..e1bbd76 100644 --- a/man/radeonhd.man +++ b/man/radeonhd.man @@ -60,8 +60,9 @@ driver supports video cards based on the following ATI chips: .\" The following list was generated from "X -logverbose 7" by the following command: .\" sed -n '/^\t[RM][A-Z0-9]\+ * : /{ s/\.$//; s/^\t\([A-Z0-9]\+\) \+: \(.*\)/.TP 8\n.B \1\n\2/; p};' /var/log/Xorg.0.log .\" The list replicates the output of RHDIdentify() in src/rhd_id.c. -.TP 8 +.PP .PD 0 +.TP 8 .B RV505 Radeon X1550, X1550 64bit .TP 8 @@ -101,6 +102,9 @@ Radeon HD 2350, HD 2400 Pro/XT, HD 2400 Pro AGP; FireGL V4000 .B RV630 Radeon HD 2600 LE/Pro/XT, HD 2600 Pro/XT AGP; Gemini RV630; FireGL V3600/V5600 .TP 8 +.B RV670 +Radeon HD 3850, HD 3870, FireGL V7700 +.TP 8 .B M52 Mobility Radeon X1300 .TP 8 @@ -137,11 +141,11 @@ Mobility Radeon HD 2400 XT .B M76 Mobility Radeon HD 2600; (Gemini ATI) Mobility Radeon HD 2600 XT .TP 8 -.B RS690 -Radeon X1200 +.B RS600 +Radeon Xpress 1200, Xpress 1250 .TP 8 -.B RS740 -RS740, RS740M +.B RS690 +Radeon X1200, X1250, X1270 .PD .\" .\" commit 765f5972a08d404ded3c118eb5d507de71950a97 Author: Matthias Hopf <[EMAIL PROTECTED]> Date: Thu Dec 20 16:57:45 2007 +0100 Added description of all RandR properties. diff --git a/man/radeonhd.man b/man/radeonhd.man index 15c6714..c312419 100644 --- a/man/radeonhd.man +++ b/man/radeonhd.man @@ -262,6 +262,150 @@ Thus the default is (i.e. ignore). .\" .\" +.SH RANDR OUTPUT PROPERTIES +The following properties can be queried with +.B xrandr --prop +and some of them can be set with +.BR "xrandr --output" " <output> " --set " <property> <value> ." +Those marked with RR13 are probably merged into a RandR 1.3 standard. +Properties marked Read-Only are provided by the driver for informational +purpose only, those marked Static won't change during runtime. +.TP +.BR RANDR_SIGNAL_FORMAT " Read-Only RR13" +.RS +.TP 16 +.PD 0 +.IR Type : +string +.TP +.IR Range/List : +unknown VGA TMDS LVDS FBAS FBAS-PAL FBAS-NTSC FBAS-SECAM SVideo YPbPr +DisplayPort +.RE +.RS +.PD +.PP +Signal format / physical protocol format that is used for the specified +output. +.br +A driver MAY change this property of an output if the underlying hardware +indicates a protocol change (e.g. TV formats). Values with dashes +.RI ( FBAS-PAL ) +describe more specific versions of the base values +.RI ( FBAS ) +and SHOULD be used if known to the driver. +.RE +.TP +.BR RANDR_CONNECTOR_TYPE " Read-Only Static RR13" +.RS +.TP 16 +.PD 0 +.IR Type : +string +.TP +.IR Range/List : +unknown VGA DVI DVI-I DVI-A DVI-D HDMI PANEL TV TV-FBAS TV-SVideo TV-YPbPr +TV-SCART TV-C4 DisplayPort +.RE +.RS +.PD +.PP +Connector type, as far as known to the driver. +.br +Values with dashes +.RI ( TV-FBAS ) +describe more specific versions of the base values +.RI ( TV ). +The former SHOULD be used if the connector is not capable of producing other +signal formats. The later SHOULD be used if the exact connector is unknown, or +the connector is a multi-format connector that is not described otherwise. +.IR DVI , +for instance, SHOULD be handled like a +.I DVI-I +connector, unless additional information is available to the user agent. +.I PANEL +describes laptop-internal (normally LVDS) displays. +.IR TV , +.IR TV-SCART , +.IR TV-YPbPr , +and +.I TV-C4 +with signal format +.I VGA +are valid combinations and describe RGB TV signals. +.RE +.TP +.BR RANDR_CONNECTOR_NUMBER " Read-Only Static RR13" +.RS +.TP 16 +.PD 0 +.IR Type : +int32 +.TP +.IR Range/List : +0- +.RE +.RS +.PD +.PP +Outputs that route their signal to the same connector MUST have the same +connector number. Outputs with the same connector number MUST route their +signal to the same connector, except if it is 0, which indicates unknown +connectivity. 1 is called the primary connector, 2 the secondary. 3 is often a +TV connector, but that is completely driver / hardware dependent. +.br +Outputs with the same connector number SHOULD have the same connector type. +Meaning and client behavior for mismatching connector types is undefined at +the moment. +.RE +.TP +.BR RANDR_OUTPUT_NUMBER " Read-Only Static RR13" +.RS +.TP 16 +.PD 0 +.IR Type : +int32 +.TP +.IR Range/List : +0- +.RE +.RS +.PD +.PP +A card may route one internal output to several connectors. Connectors that +are driven by the same output cannot be driven by different Crtcs and are thus +only allowed to be used in clone mode. The driver SHOULD emit an error message +and continue as gracefully as possible if using different Crtcs for the same +internal output is requested. +.br +Internal outputs are numbered from 1, 0 indicates that output routing is +unknown. +.RE +.TP +.B RANDR_PANING_AREA +.RS +.TP 16 +.PD 0 +.IR Type : +string +.TP +.IR Format : +.RB <width> x <height>[ + <xoffset> + <yoffset>] +.RE +.RS +.PD +.PP +Specifies the panning area in RandR mode per output. +.br +It actually is a Crtc-specific property, but RandR doesn't support that yet. +As the +.B xrandr +application typically always resets the framebuffer size with every action, +.BR --fb " <width>" x <height> +has to be added on every invocation, unless there is an additional output +configured that is using this size as its resolution. +.\" +.\" .SH KNOWN BUGS As the .B radeonhd commit cad8539ca12249a2c16b177e2364b77395a0dcab Author: Luc Verhaegen <[EMAIL PROTECTED]> Date: Thu Dec 20 16:49:17 2007 +0100 Rv670: Add IDs and such, and beautify supported hardware printing. No real support just yet. Need a few more things for that, which will come up next. Reported by TommyDrum. diff --git a/src/rhd.h b/src/rhd.h index a6cf9d5..d620853 100644 --- a/src/rhd.h +++ b/src/rhd.h @@ -80,7 +80,8 @@ enum RHD_CHIPSETS { RHD_M72, RHD_M74, RHD_M76, - /* R600 integrated */ + /* RV670 came into existence after RV6x0 and M7x */ + RHD_RV670, RHD_CHIP_END }; diff --git a/src/rhd_id.c b/src/rhd_id.c index 027fbb8..b9daabf 100644 --- a/src/rhd_id.c +++ b/src/rhd_id.c @@ -70,7 +70,8 @@ SymTabRec RHDChipsets[] = { { RHD_M72, "M72" }, { RHD_M74, "M74" }, { RHD_M76, "M76" }, - /* R600 integrated */ + /* RV670 came into existence after RV6x0 and M7x */ + { RHD_RV670, "RV670" }, { -1, NULL } }; @@ -195,10 +196,12 @@ const PCI_ID_LIST = { RHD_DEVICE_MATCH( 0x793F, RHD_RS600 ), /* Radeon Xpress 1200 */ RHD_DEVICE_MATCH( 0x7941, RHD_RS600 ), /* Radeon Xpress 1200 */ RHD_DEVICE_MATCH( 0x7942, RHD_RS600 ), /* Radeon Xpress 1200 (M) */ +#if 0 /* Not seen yet */ RHD_DEVICE_MATCH( 0x796C, RHD_RS740 ), /* RS740 */ RHD_DEVICE_MATCH( 0x796D, RHD_RS740 ), /* RS740M */ RHD_DEVICE_MATCH( 0x796E, RHD_RS740 ), /* RS740 */ RHD_DEVICE_MATCH( 0x796F, RHD_RS740 ), /* RS740M */ +#endif RHD_DEVICE_MATCH( 0x9400, RHD_R600 ), /* Radeon HD 2900 XT */ RHD_DEVICE_MATCH( 0x9401, RHD_R600 ), /* Radeon HD 2900 XT */ RHD_DEVICE_MATCH( 0x9402, RHD_R600 ), /* Radeon HD 2900 XT */ @@ -218,6 +221,11 @@ const PCI_ID_LIST = { RHD_DEVICE_MATCH( 0x94C9, RHD_M72 ), /* Mobility Radeon HD 2400 */ RHD_DEVICE_MATCH( 0x94CB, RHD_M72 ), /* ATI RADEON E2400 */ RHD_DEVICE_MATCH( 0x94CC, RHD_RV610 ), /* RV610 */ + RHD_DEVICE_MATCH( 0x9500, RHD_RV670 ), /* RV670 */ + RHD_DEVICE_MATCH( 0x9501, RHD_RV670 ), /* ATI Radeon HD3870 */ + RHD_DEVICE_MATCH( 0x9505, RHD_RV670 ), /* ATI Radeon HD3850 */ + RHD_DEVICE_MATCH( 0x9507, RHD_RV670 ), /* RV670 */ + RHD_DEVICE_MATCH( 0x9511, RHD_RV670 ), /* ATI FireGL V7700 */ RHD_DEVICE_MATCH( 0x9580, RHD_RV630 ), /* RV630 */ RHD_DEVICE_MATCH( 0x9581, RHD_M76 ), /* Mobility Radeon HD 2600 */ RHD_DEVICE_MATCH( 0x9583, RHD_M76 ), /* Mobility Radeon HD 2600 XT */ @@ -240,37 +248,42 @@ void RHDIdentify(int flags) { xf86Msg(X_INFO, "%s: X driver for the following AMD GPG (ATI) graphics devices:\n", RHD_NAME); - xf86Msg(X_NONE, "\t" - "RV505 : Radeon X1550, X1550 64bit.\n\t" - "RV515 : Radeon X1300, X1550, X1600; FireGL V3300, V3350.\n\t" - "RV516 : Radeon X1300, X1550, X1550 64-bit, X1600; FireMV 2250.\n\t" - "R520 : Radeon X1800; FireGL V5300, V7200, V7300, V7350.\n\t" - "RV530 : Radeon X1300 XT, X1600, X1600 Pro, X1650; FireGL V3400, V5200.\n\t" - "RV535 : Radeon X1300, X1650.\n\t" - "RV550 : Radeon X2300 HD.\n\t" - "RV560 : Radeon X1650.\n\t" - "RV570 : Radeon X1950, X1950 GT; FireGL V7400.\n\t" - "R580 : Radeon X1900, X1950; AMD Stream Processor.\n"); - xf86Msg(X_NONE, "\t" - "R600 : Radeon HD 2900 GT/Pro/XT; FireGL V7600/V8600/V8650.\n\t" - "RV610 : Radeon HD 2350, HD 2400 Pro/XT, HD 2400 Pro AGP; FireGL V4000.\n\t" - "RV630 : Radeon HD 2600 LE/Pro/XT, HD 2600 Pro/XT AGP; Gemini RV630; FireGL V3600/V5600.\n\t" - "M52 : Mobility Radeon X1300.\n\t" - "M54 : Mobility Radeon X1400; M54-GL.\n\t" - "M56 : Mobility Radeon X1600; Mobility FireGL V5200.\n\t" - "M58 : Mobility Radeon X1800, X1800 XT; Mobility FireGL V7100, V7200.\n\t" - "M62 : Mobility Radeon X1350.\n\t" - "M64 : Mobility Radeon X1450, X2300.\n"); - xf86Msg(X_NONE, "\t" - "M66 : Mobility Radeon X1700, X1700 XT; FireGL V5250.\n\t" - "M68 : Mobility Radeon X1900.\n\t" - "M71 : Mobility Radeon HD 2300.\n\t" - "M72 : Mobility Radeon HD 2400; Radeon E2400.\n\t" - "M74 : Mobility Radeon HD 2400 XT.\n\t" - "M76 : Mobility Radeon HD 2600; (Gemini ATI) Mobility Radeon HD 2600 XT.\n\t" - "RS600 : Radeon Xpress 1200.\n\t" - "RS690 : Radeon X1200.\n\t" - "RS740 : RS740, RS740M\n"); + xf86Msg(X_NONE, + "\tRV505 : Radeon X1550, X1550 64bit.\n" + "\tRV515 : Radeon X1300, X1550, X1600; FireGL V3300, V3350.\n" + "\tRV516 : Radeon X1300, X1550, X1550 64-bit, X1600; FireMV 2250.\n" + "\tR520 : Radeon X1800; FireGL V5300, V7200, V7300, V7350.\n" + "\tRV530 : Radeon X1300 XT, X1600, X1600 Pro, X1650; FireGL V3400, V5200.\n" + "\tRV535 : Radeon X1300, X1650.\n" + "\tRV550 : Radeon X2300 HD.\n" + "\tRV560 : Radeon X1650.\n" + "\tRV570 : Radeon X1950, X1950 GT; FireGL V7400.\n" + "\tR580 : Radeon X1900, X1950; AMD Stream Processor.\n"); + xf86Msg(X_NONE, + "\tR600 : Radeon HD 2900 GT/Pro/XT; FireGL V7600/V8600/V8650.\n" + "\tRV610 : Radeon HD 2350, HD 2400 Pro/XT, HD 2400 Pro AGP; FireGL V4000.\n" + "\tRV630 : Radeon HD 2600 LE/Pro/XT, HD 2600 Pro/XT AGP; Gemini RV630;\n" + "\t\tFireGL V3600/V5600.\n" + "\tRV670 : Radeon HD 3850, HD 3870, FireGL V7700.\n"); + xf86Msg(X_NONE, + "\tM52 : Mobility Radeon X1300.\n" + "\tM54 : Mobility Radeon X1400; M54-GL.\n" + "\tM56 : Mobility Radeon X1600; Mobility FireGL V5200.\n" + "\tM58 : Mobility Radeon X1800, X1800 XT; Mobility FireGL V7100, V7200.\n" + "\tM62 : Mobility Radeon X1350.\n" + "\tM64 : Mobility Radeon X1450, X2300.\n" + "\tM66 : Mobility Radeon X1700, X1700 XT; FireGL V5250.\n" + "\tM68 : Mobility Radeon X1900.\n"); + xf86Msg(X_NONE, + "\tM71 : Mobility Radeon HD 2300.\n" + "\tM72 : Mobility Radeon HD 2400; Radeon E2400.\n" + "\tM74 : Mobility Radeon HD 2400 XT.\n" + "\tM76 : Mobility Radeon HD 2600\n" + "\t\t(Gemini ATI) Mobility Radeon HD 2600 XT.\n"); + xf86Msg(X_NONE, + "\tRS600 : Radeon Xpress 1200, Xpress 1250.\n" + "\tRS690 : Radeon X1200, X1250, X1270.\n" + /* NOT YET "\tRS740 : RS740, RS740M\n" */ ); xf86Msg(X_NONE, "\n"); xf86Msg(X_INFO, "%s: version %s, built from %s\n\n", @@ -586,6 +599,7 @@ rhdCards[] = /* 0x94C9 : M72 : Mobility Radeon HD 2400 */ /* 0x94CB : M72 : ATI RADEON E2400 */ /* 0x94CC : RV610 : RV610 */ + /* 0x9505 : RV670 : ATI Radeon HD 3850 */ /* 0x9580 : RV630 : RV630 */ /* 0x9581 : M76 : Mobility Radeon HD 2600 */ /* 0x9583 : M76 : Mobility Radeon HD 2600 XT */ commit 2b3928c642fcd65f21354f99a4f7fd9c9b24d7c4 Author: Luc Verhaegen <[EMAIL PROTECTED]> Date: Wed Dec 19 18:43:03 2007 +0100 RandR compate code: Add crtc gamma function. This means translating the "new" way of specifying a gamma table to the older better designed way that i kept in my modesetting code. Or, another victim of rampant NIH. Fixes the "messed up colours" issues we have been seeing after suspend/resume. diff --git a/src/rhd_randr.c b/src/rhd_randr.c index 6583fce..c6062a5 100644 --- a/src/rhd_randr.c +++ b/src/rhd_randr.c @@ -43,7 +43,6 @@ #include "rhd.h" #include "rhd_randr.h" - #if (RANDR_MAJOR == 1 && RANDR_MINOR >= 2) || RANDR_MAJOR >= 2 @@ -66,6 +65,7 @@ #include "rhd_monitor.h" #include "rhd_vga.h" #include "rhd_pll.h" +#include "rhd_lut.h" #include "rhd_mc.h" #include "rhd_card.h" @@ -368,6 +368,36 @@ rhdRRCrtcCommit(xf86CrtcPtr crtc) RHDDebugRandrState(rhdPtr, Crtc->Name); } +/* + * They just had to do NIH again here: Old X functionality provides a size, a + * list of indices, and a table of RGB unsigned shorts. RandR provides what + * is below. Apart from horribly breaking any attempt at being backwards + * compatible, this also pretty much rules out the usage of indexed colours, as + * each time even a single colour is changed an entirely new table has to be + * uploaded. Just cute. -- libv. + */ +static void +rhdRRCrtcGammaSet(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue, + int size) +{ + struct rhdCrtc *Crtc = (struct rhdCrtc *) crtc->driver_private; + int indices[0x100]; /* would RandR use a size larger than 256? */ + LOCO colors[0x100]; + int i; + + RHDDebug(Crtc->scrnIndex, "%s: %s.\n", __func__, Crtc->Name); + + /* thanks so very much */ + for (i = 0; i < size; i++) { + indices[i] = i; + colors[i].red = red[i]; + colors[i].green = green[i]; + colors[i].blue = blue[i]; + } + + Crtc->LUT->Set(Crtc->LUT, size, indices, colors); +} + /* Dummy, because not tested for NULL */ static Bool rhdRRCrtcModeFixupDUMMY(xf86CrtcPtr crtc, @@ -876,7 +906,7 @@ static const xf86CrtcFuncsRec rhdRRCrtcFuncs = { rhdRRCrtcLock, rhdRRCrtcUnlock, rhdRRCrtcModeFixupDUMMY, rhdRRCrtcPrepare, rhdRRCrtcModeSet, rhdRRCrtcCommit, - NULL, /* CrtcGammaSet */ + rhdRRCrtcGammaSet, /* rhdRRCrtcShadowAllocate,rhdRRCrtcShadowCreate,rhdRRCrtcShadowDestroy */ NULL, NULL, NULL, /* SetCursorColors,SetCursorPosition,ShowCursor,HideCursor, commit dc8f3c3dfcf370c9ebce14a087894623fe2d60ab Author: Matthias Hopf <[EMAIL PROTECTED]> Date: Wed Dec 19 16:42:23 2007 +0100 Nuke xf86DiDGAInit(). We don't really want to support DGA anyway, and this call had some... side effects. diff --git a/src/rhd_randr.c b/src/rhd_randr.c index 793a2bb..6583fce 100644 --- a/src/rhd_randr.c +++ b/src/rhd_randr.c @@ -1135,8 +1135,6 @@ RHDRandrScreenInit(ScreenPtr pScreen) RHDPtr rhdPtr = RHDPTR(pScrn); RHDFUNC(rhdPtr); - if (!xf86DiDGAInit(pScreen, (unsigned long) rhdPtr->FbBase)) - return FALSE; if (!xf86CrtcScreenInit(pScreen)) return FALSE; /* Wrap cursor for driver-level panning */ commit 861debbf8d649ce09d53d5880f819757ac9c7814 Author: Egbert Eich <[EMAIL PROTECTED]> Date: Tue Dec 18 23:03:07 2007 +0100 Make the driver build with the latest ustream git server sources again. The driver stopped building due to the removal of xf86_ansic.h and xf86_libc.h in the latest upstream sources. This patch consolidates the heterogenious handling of system functions in this driver. The system function wrappers remain fully supported for older server versions. diff --git a/configure.ac b/configure.ac index be420e5..85e3cf7 100644 --- a/configure.ac +++ b/configure.ac @@ -66,6 +66,12 @@ AM_CONDITIONAL([HAVE_PCI_PCI_H], [test "x$have_pci_pci_h" = "xyes"]) CFLAGS="$SAVED_CFLAGS" CPPFLAGS="$SAVED_CPPFLAGS" +AC_CHECK_HEADER([${sdkdir}/xf86_ansic.h], + [AC_DEFINE([HAVE_XF86_ANSIC_H], [1], + [Define to 1 if you have <${sdkdir}/xf86_ansic.h>.]) + have_xf86_ansic_h=yes]) +AM_CONDITIONAL([HAVE_XF86_ANSIC_H], [test "x$have_xf86_ansic_h" = "xyes"]) + SAVED_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $XORG_CFLAGS" diff --git a/src/Imakefile b/src/Imakefile index 1cc0666..a8d6322 100644 --- a/src/Imakefile +++ b/src/Imakefile @@ -78,6 +78,8 @@ INCLUDES = -I. -I$(XF86COMSRC) -I$(XF86OSSRC) \ ATOM_BIOS_INCLUDES = -I./AtomBios/includes ATOM_BIOS_DEFINES = -DATOM_BIOS=1 +XCOMM older versions always have xf86_ansic.h +XF86_ANSIC_DEFINES = -DHAVE_XF86_ANSIC_H=1 #ifdef ATOM_BIOS_PARSER ATOM_BIOS_PARSER_INCLUDES = -I./AtomBios @@ -86,6 +88,7 @@ ATOM_BIOS_PARSER_DEFINES = -DDRIVER_PARSER -DDISABLE_EASF -DENABLE_ALL_SERVICE_F DEFINES = $(INCLUDES) $(ATOM_BIOS_INCLUDES) $(ATOM_BIOS_PARSER_INCLUDES) \ $(ATOM_BIOS_DEFINES) $(ATOM_BIOS_PARSER_DEFINES) \ + $(XF86_ANSIC_DEFINES) \ $(RHD_GIT_DEFINES) \ $(RHD_VERSION_DEFINES) diff --git a/src/rhd_atombios.c b/src/rhd_atombios.c index d88ebae..2bfb879 100644 --- a/src/rhd_atombios.c +++ b/src/rhd_atombios.c @@ -28,8 +28,15 @@ #endif #include "xf86.h" #include "xf86_OSproc.h" -#include "xf86_ansic.h" #include "xf86Pci.h" +#if HAVE_XF86_ANSIC_H +# include "xf86_ansic.h" +#else +# include <unistd.h> +# include <string.h> +# include <stdio.h> +#endif + #include "edid.h" #include "rhd.h" #include "rhd_atombios.h" @@ -818,7 +825,7 @@ rhdAtomLvdsTimings(atomBiosHandlePtr handle, ATOM_DTD_FORMAT *dtd) mode->VRefresh = (1000.0 * ((float) mode->Clock)) / ((float)(((float)mode->HTotal) * ((float)mode->VTotal))); - xf86snprintf(name, NAME_LEN, "%dx%d", + snprintf(name, NAME_LEN, "%dx%d", mode->HDisplay, mode->VDisplay); mode->name = xstrdup(name); @@ -1955,7 +1962,7 @@ rhdAtomConnectorInfoFromSupportedDevices(atomBiosHandlePtr handle, cp[ncon].Output[0] = devices[n].ot; cp[ncon].Output[1] = RHD_OUTPUT_NONE; cp[ncon].Type = devices[n].con; - cp[ncon].Name = xf86strdup(devices[n].name); + cp[ncon].Name = xstrdup(devices[n].name); cp[ncon].Name = RhdAppendString(cp[ncon].Name, devices[n].outputName); if (devices[n].dual) { diff --git a/src/rhd_connector.c b/src/rhd_connector.c index a8dc76a..29b4ce6 100644 --- a/src/rhd_connector.c +++ b/src/rhd_connector.c @@ -31,7 +31,13 @@ #include "edid.h" /* for usleep */ -#include "xf86_ansic.h" +#if HAVE_XF86_ANSIC_H +# include "xf86_ansic.h" +#else +# include <unistd.h> +# include <string.h> +# include <stdio.h> +#endif #include "rhd.h" #include "rhd_connector.h" @@ -165,7 +171,7 @@ rhdConnectorSynthName(struct rhdConnectorInfo *ConnectorInfo, return str; case RHD_CONNECTOR_TV: - str1 = strdup(ConnectorInfo->Name); + str1 = xstrdup(ConnectorInfo->Name); str = xalloc(20); str2 = strchr(str1, ' '); if (str2) *(str2) = '\0'; diff --git a/src/rhd_crtc.c b/src/rhd_crtc.c index 089e3ee..91c92db 100644 --- a/src/rhd_crtc.c +++ b/src/rhd_crtc.c @@ -30,7 +30,11 @@ #include "xf86.h" /* for usleep */ -#include "xf86_ansic.h" +#if HAVE_XF86_ANSIC_H +# include "xf86_ansic.h" +#else +# include <unistd.h> +#endif #include "rhd.h" #include "rhd_crtc.h" diff --git a/src/rhd_cursor.c b/src/rhd_cursor.c index 4a2d0d5..9870998 100644 --- a/src/rhd_cursor.c +++ b/src/rhd_cursor.c @@ -40,6 +40,11 @@ #include "xf86Cursor.h" #include "cursorstr.h" #include "servermd.h" +#if HAVE_XF86_ANSIC_H +# include "xf86_ansic.h" +#else +#include <string.h> +#endif /* Driver specific headers */ #include "rhd.h" @@ -47,11 +52,6 @@ #include "rhd_crtc.h" #include "rhd_regs.h" -/* System headers */ -#ifndef _XF86_ANSIC_H -#include <string.h> -#endif - -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]