Re: Xati failure on PPC
Michel Dänzer <[email protected]>
| Newsgroups | gmane.comp.freedesktop.xserver |
|---|---|
| Message-ID | <[email protected]> |
On Sat, 2004-01-24 at 01:52, Benjamin Herrenschmidt wrote: > On Sat, 2004-01-24 at 04:04, Matthew Garrett wrote: > > If I run Xati with drm support on a PPC system with a Radeon 9000, the > > screen is switched to the correct mode but I'm left with a console. Xati > > then continues to consume 100% of cpu time and can't be killed. I'm > > using PCIGART since I don't have AGP support for my northbridge, if that > > makes any difference. radeonfb is being used. Any hints? > > Known problem. I didn't have time to dive into it yet (busy merging > stuffs with Andrew at the moment), but if nobody gets to it's I'll > give a try a fixing it among with other fbdev improvements in > xserver I've found some endianness handling differences to the XFree86 server, see attachment. Unfortunately, it still doesn't work right here. -- Earthling Michel Dänzer | Debian (powerpc), X and DRI developer Libre software enthusiast | http://svcs.affero.net/rm.php?r=daenzer
local.diff
(text/x-patch, 2.2 KB)
Index: hw/kdrive/ati/ati_draw.h
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/ati/ati_draw.h,v
retrieving revision 1.5
diff -p -u -r1.5 ati_draw.h
--- hw/kdrive/ati/ati_draw.h 25 Jan 2004 01:16:19 -0000 1.5
+++ hw/kdrive/ati/ati_draw.h 26 Jan 2004 01:28:58 -0000
@@ -52,7 +52,7 @@ do { \
} while (0)
#define OUT_RING(x) do { \
- MMIO_OUT32(&__head[__count++], 0, (x)); \
+ __head[__count++] = (x); \
} while (0)
#define OUT_RING_REG(reg, val) \
Index: hw/kdrive/ati/ati_drawtmp.h
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/ati/ati_drawtmp.h,v
retrieving revision 1.4
diff -p -u -r1.4 ati_drawtmp.h
--- hw/kdrive/ati/ati_drawtmp.h 30 Dec 2003 08:45:53 -0000 1.4
+++ hw/kdrive/ati/ati_drawtmp.h 26 Jan 2004 01:28:58 -0000
@@ -25,7 +25,8 @@
#ifdef USE_DMA
#define TAG(x) x##DMA
-#define LOCALS RING_LOCALS; \
+#define LOCALS char *mmio = atic->reg_base; \
+ RING_LOCALS; \
(void)atic
#define BEGIN(x) BEGIN_RING(x * 2)
#define OUT_REG(reg, val) OUT_RING_REG(reg, val)
@@ -51,6 +52,16 @@ TAG(ATISetup)(PixmapPtr pDst, PixmapPtr
accel_atis = atis;
+ ATIWaitAvailMMIO(1);
+ MMIO_OUT32(mmio, RADEON_DP_DATATYPE,
+ MMIO_IN32(mmio, RADEON_DP_DATATYPE)
+#if X_BYTE_ORDER == X_BIG_ENDIAN
+ | RADEON_HOST_BIG_ENDIAN_EN
+#else
+ & ~RADEON_HOST_BIG_ENDIAN_EN
+#endif
+ );
+
dst_pitch = pDst->devKind;
dst_offset = ((CARD8 *)pDst->devPrivate.ptr -
pScreenPriv->screen->memory_base);
Index: hw/kdrive/ati/ati_reg.h
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/ati/ati_reg.h,v
retrieving revision 1.4
diff -p -u -r1.4 ati_reg.h
--- hw/kdrive/ati/ati_reg.h 30 Dec 2003 08:23:56 -0000 1.4
+++ hw/kdrive/ati/ati_reg.h 26 Jan 2004 01:28:59 -0000
@@ -74,6 +74,8 @@
# define RADEON_DST_X_LEFT_TO_RIGHT (1 << 0)
# define RADEON_DST_Y_TOP_TO_BOTTOM (1 << 1)
+#define RADEON_DP_DATATYPE 0x16c4
+# define RADEON_HOST_BIG_ENDIAN_EN (1 << 29)
#define RADEON_REG_DP_MIX 0x16c8
#define RADEON_REG_DP_WRITE_MASK 0x16cc
#define RADEON_REG_DEFAULT_OFFSET 0x16e0