summaryrefslogtreecommitdiff
path: root/x11/xf86-video-radeonhd
diff options
context:
space:
mode:
authorhasso <hasso@pkgsrc.org>2009-10-14 18:50:20 +0000
committerhasso <hasso@pkgsrc.org>2009-10-14 18:50:20 +0000
commit7f0d126ae87e90175f59115b49ebf008474c2bfb (patch)
treed611dda19538e7379d1cb1bcedc20c0c642b7e0b /x11/xf86-video-radeonhd
parentf5bd0eed0ccf4c8053165f26c296fb542e57e087 (diff)
downloadpkgsrc-7f0d126ae87e90175f59115b49ebf008474c2bfb.tar.gz
Update to 1.3.0. Version 1.3.0 improvements:
- Added support for RV740, M92, M93, M97. - Added support for HDMI audio on RS690 and R700. - Added support for power management. - Implemented almost correct analysis of PowerPlay AtomBIOS tables. - 2D acceleration (EXA) is enabled by default now, except on RV740. - Backlight handling finally fixed - compatible with xbacklight 1.1.1. - Overhaul of memory controller setup. Fixes many "MC not idle" issues. - Overhaul of cursor handling. Fixes most cursor bugs. - Selectable color space for XVideo on R6xx/R7xx. - Tons of bug fixes (DDC, EXA, LUT, RandR, AtomBIOS). - More quirk table entries. - Shave support (cleaner compilation output). - All warnings fixed. - Some start of Developer's documentation in README.coding.
Diffstat (limited to 'x11/xf86-video-radeonhd')
-rw-r--r--x11/xf86-video-radeonhd/Makefile5
-rw-r--r--x11/xf86-video-radeonhd/distinfo9
-rw-r--r--x11/xf86-video-radeonhd/patches/patch-aa360
3 files changed, 6 insertions, 368 deletions
diff --git a/x11/xf86-video-radeonhd/Makefile b/x11/xf86-video-radeonhd/Makefile
index 175ee4cda90..a06f53cefa1 100644
--- a/x11/xf86-video-radeonhd/Makefile
+++ b/x11/xf86-video-radeonhd/Makefile
@@ -1,8 +1,7 @@
-# $NetBSD: Makefile,v 1.14 2009/06/11 07:00:31 hasso Exp $
+# $NetBSD: Makefile,v 1.15 2009/10/14 18:50:20 hasso Exp $
#
-DISTNAME= xf86-video-radeonhd-1.2.5
-PKGREVISION= 2
+DISTNAME= xf86-video-radeonhd-1.3.0
CATEGORIES= x11
MASTER_SITES= ${MASTER_SITE_XORG:=driver/}
EXTRACT_SUFX= .tar.bz2
diff --git a/x11/xf86-video-radeonhd/distinfo b/x11/xf86-video-radeonhd/distinfo
index a2d66cd3b9f..612a6469ed6 100644
--- a/x11/xf86-video-radeonhd/distinfo
+++ b/x11/xf86-video-radeonhd/distinfo
@@ -1,6 +1,5 @@
-$NetBSD: distinfo,v 1.10 2009/06/11 07:00:31 hasso Exp $
+$NetBSD: distinfo,v 1.11 2009/10/14 18:50:20 hasso Exp $
-SHA1 (xf86-video-radeonhd-1.2.5.tar.bz2) = 64fc0eb5209adba5479396bafe53b50ded6c0940
-RMD160 (xf86-video-radeonhd-1.2.5.tar.bz2) = e30a896cd08e82b8a1bbc73e6f0ab862fe564a8a
-Size (xf86-video-radeonhd-1.2.5.tar.bz2) = 751941 bytes
-SHA1 (patch-aa) = de3176186b4780be2ae68b3eeb070f3262f0afcf
+SHA1 (xf86-video-radeonhd-1.3.0.tar.bz2) = 4cdcdbcdc6ec7cd4caa19afdbfc34a8bec461f56
+RMD160 (xf86-video-radeonhd-1.3.0.tar.bz2) = 1f396df814872caf2b58f36929f7b6d1db16959f
+Size (xf86-video-radeonhd-1.3.0.tar.bz2) = 772985 bytes
diff --git a/x11/xf86-video-radeonhd/patches/patch-aa b/x11/xf86-video-radeonhd/patches/patch-aa
deleted file mode 100644
index 948d513b424..00000000000
--- a/x11/xf86-video-radeonhd/patches/patch-aa
+++ /dev/null
@@ -1,360 +0,0 @@
-$NetBSD: patch-aa,v 1.7 2009/06/11 07:00:31 hasso Exp $
-
-Accumulated cursor fixes from upstream repository. Should fix cursor
-corruption issues:
-
-http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=f668cc06
-http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=6f378a0d
-http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=669e0bef
-http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=4be5f715
-http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=dd287015
-http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=08461642
-http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=23d25fe7
-
---- src/rhd_cursor.c.oorig 2009-06-10 22:02:08 +0300
-+++ src/rhd_cursor.c 2009-06-10 22:02:47 +0300
-@@ -62,13 +62,16 @@
- static void
- lockCursor(struct rhdCursor *Cursor, Bool Lock)
- {
-- /* Double Buffering: Set _UPDATE_LOCK bit */
-+ /* Locking disables double buffering of HW cursor registers.
-+ * Set D*CURSOR_UPDATE_LOCK bit to 1 to lock.
-+ * We want *_DISABLE_MULTIPLE_UPDATE to always be 0, and since all other
-+ * meaningful bits are read-only for D*CUR_UPDATE registers, it is safe
-+ * to use RHDRegWrite() instead of RHDRegMask(); the latter is slower.
-+ */
- if (Lock)
-- RHDRegMask(Cursor, Cursor->RegOffset + D1CUR_UPDATE,
-- 0x00010000, 0x00010000);
-+ RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_UPDATE, 0x00010000);
- else
-- RHDRegMask(Cursor, Cursor->RegOffset + D1CUR_UPDATE,
-- 0x00000000, 0x00010000);
-+ RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_UPDATE, 0x00000000);
- }
-
- /* RadeonHD has hardware support for hotspots, but doesn't allow negative
-@@ -89,13 +92,23 @@ setCursorPos(struct rhdCursor *Cursor, C
- }
-
- static void
-+setCursorSize(struct rhdCursor *Cursor, CARD32 width, CARD32 height)
-+{
-+ ASSERT ((width > 0) && (width <= MAX_CURSOR_WIDTH));
-+ ASSERT ((height > 0) && (height <= MAX_CURSOR_HEIGHT));
-+ RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_SIZE,
-+ (width - 1) << 16 | (height - 1));
-+}
-+
-+static void
- enableCursor(struct rhdCursor *Cursor, Bool Enable)
- {
-+ /* Make sure mode stays the same even when disabled; bug #13405 */
- if (Enable)
- /* pre-multiplied ARGB, Enable */
- RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_CONTROL, 0x00000201);
- else
-- RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_CONTROL, 0);
-+ RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_CONTROL, 0x00000200);
- }
-
- /* Activate already uploaded cursor image. */
-@@ -106,10 +119,6 @@ setCursorImage(struct rhdCursor *Cursor)
-
- RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_SURFACE_ADDRESS,
- rhdPtr->FbIntAddress + Cursor->Base);
-- ASSERT ((Cursor->Width > 0) && (Cursor->Width <= MAX_CURSOR_WIDTH));
-- ASSERT ((Cursor->Height > 0) && (Cursor->Height <= MAX_CURSOR_HEIGHT));
-- RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_SIZE,
-- (Cursor->Width - 1) << 16 | (Cursor->Height - 1));
- }
-
- /* Upload image.
-@@ -121,7 +130,7 @@ uploadCursorImage(struct rhdCursor *Curs
- RHDPtr rhdPtr = RHDPTRI(Cursor);
-
- memcpy(((CARD8 *) rhdPtr->FbBase + Cursor->Base), img,
-- MAX_CURSOR_WIDTH * Cursor->Height * 4);
-+ MAX_CURSOR_WIDTH * MAX_CURSOR_HEIGHT * 4);
- }
-
- static void
-@@ -192,6 +201,8 @@ convertBitsToARGB(struct rhd_Cursor_Bits
- CARD8 *mask = src + srcPitch * bits->height;
- int x, y;
-
-+ memset(dest, 0, MAX_CURSOR_WIDTH * MAX_CURSOR_HEIGHT * 4);
-+
- for (y = 0; y < bits->height; y++) {
- CARD8 *s = src, *m = mask;
- CARD32 *d = dest;
-@@ -210,41 +221,24 @@ convertBitsToARGB(struct rhd_Cursor_Bits
- }
- }
-
--/* Enable/disable cursor according to visibility, and set cursor pos */
--static void
--displayCursor(struct rhdCrtc *Crtc)
-+/*
-+ * Returns if CRTC has a visible cursor
-+ */
-+static Bool
-+hasVisibleCursor(struct rhdCrtc *Crtc)
- {
- struct rhdCursor *Cursor = Crtc->Cursor;
-+ if (Cursor->X >= Crtc->X - MAX_CURSOR_WIDTH &&
-+ Cursor->X < Crtc->X + Crtc->Width &&
-+ Cursor->Y >= Crtc->Y - MAX_CURSOR_HEIGHT &&
-+ Cursor->Y < Crtc->Y + Crtc->Height) {
-
-- /* Hardware doesn't allow negative cursor pos. Use hardware
-- * hotspot support for that. Cannot exceed width, but cursor is
-- * not visible in this case. */
--
-- /* xorg bug#13405: Cursor corruptions
-- * With both CRTC enabled but HW cursor active only on one, the reported
-- * corruption is seen. If HW cursor for both CRTC is forced to stay on, then no
-- * corruption occurs. */
--#if 0
-- if (Cursor->X >= Crtc->X - Cursor->Width &&
-- Cursor->X < Crtc->X + Crtc->Width &&
-- Cursor->Y >= Crtc->Y - Cursor->Height &&
-- Cursor->Y < Crtc->Y + Crtc->Height) {
--#endif
-- int X, Y, HotX, HotY;
--
-- X = Cursor->X >= 0 ? Cursor->X : 0;
-- Y = Cursor->Y >= 0 ? Cursor->Y : 0;
-- HotX = Cursor->X >= 0 ? 0 : -Cursor->X;
-- HotY = Cursor->Y >= 0 ? 0 : -Cursor->Y;
--
-- enableCursor(Cursor, TRUE);
-- setCursorPos(Cursor, X, Y, HotX, HotY);
--#if 0
-+ return TRUE;
- } else
-- enableCursor(Cursor, FALSE);
--#endif
-+ return FALSE;
- }
-
-+
- /*
- * Internal Driver + Xorg Interface
- */
-@@ -258,12 +252,10 @@ rhdShowCursor(ScrnInfoPtr pScrn)
- for (i = 0; i < 2; i++) {
- struct rhdCrtc *Crtc = rhdPtr->Crtc[i];
-
-- if (Crtc->Active && Crtc->scrnIndex == pScrn->scrnIndex) {
-- struct rhdCursor *Cursor = Crtc->Cursor;
-+ if (Crtc->Active && Crtc->scrnIndex == pScrn->scrnIndex
-+ && hasVisibleCursor(Crtc)) {
-
-- lockCursor (Cursor, TRUE);
-- displayCursor(Crtc);
-- lockCursor (Cursor, FALSE);
-+ rhdCrtcShowCursor(Crtc);
- }
- }
- }
-@@ -278,11 +270,7 @@ rhdHideCursor(ScrnInfoPtr pScrn)
- struct rhdCrtc *Crtc = rhdPtr->Crtc[i];
-
- if (Crtc->Active && Crtc->scrnIndex == pScrn->scrnIndex) {
-- struct rhdCursor *Cursor = Crtc->Cursor;
--
-- lockCursor (Cursor, TRUE);
-- enableCursor(Cursor, FALSE);
-- lockCursor (Cursor, FALSE);
-+ rhdCrtcHideCursor(Crtc);
- }
- }
- }
-@@ -339,14 +327,7 @@ rhdReloadCursor(ScrnInfoPtr pScrn)
- struct rhdCrtc *Crtc = rhdPtr->Crtc[i];
-
- if (Crtc->scrnIndex == pScrn->scrnIndex) {
-- struct rhdCursor *Cursor = Crtc->Cursor;
--
-- lockCursor (Cursor, TRUE);
-- uploadCursorImage(Cursor, rhdPtr->CursorImage);
-- setCursorImage (Cursor);
-- if (Crtc->Active)
-- displayCursor(Crtc);
-- lockCursor (Cursor, FALSE);
-+ rhdCrtcLoadCursorARGB(Crtc, rhdPtr->CursorImage);
- }
- }
- }
-@@ -363,16 +344,11 @@ rhdSetCursorPosition(ScrnInfoPtr pScrn,
- for (i = 0; i < 2; i++) {
- struct rhdCrtc *Crtc = rhdPtr->Crtc[i];
-
-- if (Crtc->Active && Crtc->scrnIndex == pScrn->scrnIndex) {
-- struct rhdCursor *Cursor = Crtc->Cursor;
-+ if (Crtc->Active && Crtc->scrnIndex == pScrn->scrnIndex
-+ && hasVisibleCursor(Crtc)) {
-
- /* Given cursor pos is always relative to frame - make absolute */
-- Cursor->X = x + pScrn->frameX0;
-- Cursor->Y = y + pScrn->frameY0;
--
-- lockCursor (Cursor, TRUE);
-- displayCursor(Crtc);
-- lockCursor (Cursor, FALSE);
-+ rhdCrtcSetCursorPosition(Crtc, x+pScrn->frameX0, y+pScrn->frameY0);
- }
- }
- }
-@@ -397,12 +373,7 @@ rhdSetCursorColors(ScrnInfoPtr pScrn, in
- struct rhdCrtc *Crtc = rhdPtr->Crtc[i];
-
- if (Crtc->scrnIndex == pScrn->scrnIndex) {
-- struct rhdCursor *Cursor = Crtc->Cursor;
--
-- lockCursor (Cursor, TRUE);
-- uploadCursorImage(Cursor, rhdPtr->CursorImage);
-- setCursorImage (Cursor);
-- lockCursor (Cursor, FALSE);
-+ rhdCrtcLoadCursorARGB(Crtc, rhdPtr->CursorImage);
- }
- }
- }
-@@ -422,15 +393,7 @@ rhdLoadCursorImage(ScrnInfoPtr pScrn, un
- struct rhdCrtc *Crtc = rhdPtr->Crtc[i];
-
- if (Crtc->scrnIndex == pScrn->scrnIndex) {
-- struct rhdCursor *Cursor = Crtc->Cursor;
--
-- Cursor->Width = bits->width;
-- Cursor->Height = bits->height;
--
-- lockCursor (Cursor, TRUE);
-- uploadCursorImage(Cursor, rhdPtr->CursorImage);
-- setCursorImage (Cursor);
-- lockCursor (Cursor, FALSE);
-+ rhdCrtcLoadCursorARGB(Crtc, rhdPtr->CursorImage);
- }
- }
- }
-@@ -455,24 +418,19 @@ rhdLoadCursorARGB(ScrnInfoPtr pScrn, Cur
- rhdPtr->CursorBits = NULL;
-
- /* Hardware only supports 64-wide cursor images. */
-- for (i = 0; i < cur->bits->height; i++)
-- memcpy(rhdPtr->CursorImage + MAX_CURSOR_WIDTH*i,
-+ memset(rhdPtr->CursorImage, 0, MAX_CURSOR_WIDTH * MAX_CURSOR_HEIGHT * 4);
-+ for (i = 0; i < cur->bits->height; i++) {
-+ CARD32 *img = rhdPtr->CursorImage + MAX_CURSOR_WIDTH*i;
-+ memcpy(img,
- cur->bits->argb + cur->bits->width*i,
- cur->bits->width*4);
-+ }
-
- for (i = 0; i < 2; i++) {
- struct rhdCrtc *Crtc = rhdPtr->Crtc[i];
-
- if (Crtc->scrnIndex == pScrn->scrnIndex) {
-- struct rhdCursor *Cursor = Crtc->Cursor;
--
-- Cursor->Width = cur->bits->width;
-- Cursor->Height = cur->bits->height;
--
-- lockCursor (Cursor, TRUE);
-- uploadCursorImage(Cursor, rhdPtr->CursorImage);
-- setCursorImage (Cursor);
-- lockCursor (Cursor, FALSE);
-+ rhdCrtcLoadCursorARGB(Crtc, rhdPtr->CursorImage);
- }
- }
- }
-@@ -588,10 +546,9 @@ void
- rhdCrtcShowCursor(struct rhdCrtc *Crtc)
- {
- struct rhdCursor *Cursor = Crtc->Cursor;
--
-- lockCursor (Cursor, TRUE);
-- displayCursor(Crtc);
-- lockCursor (Cursor, FALSE);
-+ lockCursor (Cursor, TRUE);
-+ enableCursor(Cursor, TRUE);
-+ lockCursor (Cursor, FALSE);
- }
-
- /*
-@@ -613,12 +570,58 @@ rhdCrtcHideCursor(struct rhdCrtc *Crtc)
- void
- rhdCrtcSetCursorPosition(struct rhdCrtc *Crtc, int x, int y)
- {
-+ RHDPtr rhdPtr = RHDPTRI(Crtc);
- struct rhdCursor *Cursor = Crtc->Cursor;
-+ int hotx, hoty, width, cursor_end, frame_end;
-+
- Cursor->X = x;
- Cursor->Y = y;
-
-+ hotx = 0;
-+ hoty = 0;
-+
-+ /* Hardware doesn't allow negative cursor pos; compensate using hotspot */
-+ if (x < 0) {
-+ hotx = -x;
-+ x = 0;
-+ }
-+ if (y < 0) {
-+ hoty = -y;
-+ y = 0;
-+ }
-+
- lockCursor (Cursor, TRUE);
-- displayCursor(Crtc);
-+
-+ /* Work around rare corruption cases by adjusting cursor size;
-+ * related to bug #13405
-+ * For dual-screen:
-+ * - Cursor's right-edge must not end on multiples of 128px.
-+ * - For panning, cursor image cannot horizontally extend past end of viewport.
-+ */
-+ if (rhdPtr->Crtc[0]->Active && rhdPtr->Crtc[1]->Active) {
-+ width = MAX_CURSOR_WIDTH;
-+ cursor_end = x + width;
-+ frame_end = Crtc->X + Crtc->Width;
-+
-+ if (cursor_end > frame_end) {
-+ width -= cursor_end - frame_end;
-+ cursor_end = x + width;
-+ }
-+ if (! (cursor_end & 0x7f)) {
-+ width--;
-+ }
-+ /* If the cursor is effectively invisible, move it out of visible area */
-+ if (width <= 0) {
-+ width = 1;
-+ x = 0;
-+ y = Crtc->Y + Crtc->Height;
-+ hotx = 0;
-+ hoty = 0;
-+ }
-+ setCursorSize(Cursor, width, MAX_CURSOR_HEIGHT);
-+ }
-+
-+ setCursorPos (Cursor, x, y, hotx, hoty);
- lockCursor (Cursor, FALSE);
- }
-
-@@ -642,12 +645,10 @@ rhdCrtcLoadCursorARGB(struct rhdCrtc *Cr
- {
- struct rhdCursor *Cursor = Crtc->Cursor;
-
-- Cursor->Width = MAX_CURSOR_WIDTH;
-- Cursor->Height = MAX_CURSOR_HEIGHT;
--
- lockCursor (Cursor, TRUE);
- uploadCursorImage(Cursor, Image);
- setCursorImage (Cursor);
-+ setCursorSize (Cursor, MAX_CURSOR_WIDTH, MAX_CURSOR_HEIGHT);
- lockCursor (Cursor, FALSE);
- }
-