xserver-kdrive_1.3.0.0.bb : more glamo patches, have purposely not bumped
authorGraeme Gregory <dp@xora.org.uk>
Mon, 3 Dec 2007 12:37:48 +0000 (12:37 +0000)
committerGraeme Gregory <dp@xora.org.uk>
Mon, 3 Dec 2007 12:37:48 +0000 (12:37 +0000)
PR as this isnt a released device yet.

packages/xorg-xserver/xserver-kdrive/00-xglamo-logs.patch [new file with mode: 0644]
packages/xorg-xserver/xserver-kdrive/01-xglamo-scrolling-artifact-fix.patch [new file with mode: 0644]
packages/xorg-xserver/xserver-kdrive/02-xglamo-no-dri.patch [new file with mode: 0644]
packages/xorg-xserver/xserver-kdrive/03-xglamo-no-vesa.patch [new file with mode: 0644]
packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb

diff --git a/packages/xorg-xserver/xserver-kdrive/00-xglamo-logs.patch b/packages/xorg-xserver/xserver-kdrive/00-xglamo-logs.patch
new file mode 100644 (file)
index 0000000..8fc8ff4
--- /dev/null
@@ -0,0 +1,386 @@
+Index: xorg-server-1.3.0.0/hw/kdrive/glamo/Makefile.am
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/glamo/Makefile.am       2007-11-28 18:44:27.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/glamo/Makefile.am    2007-11-28 18:44:28.000000000 +0100
+@@ -20,6 +20,7 @@
+ noinst_LIBRARIES = libglamo.a
+ libglamo_a_SOURCES =  \
++      glamo-log.h     \
+       glamo_dma.c     \
+       glamo_dma.h     \
+       glamo_draw.c    \
+Index: xorg-server-1.3.0.0/hw/kdrive/glamo/glamo-log.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.3.0.0/hw/kdrive/glamo/glamo-log.h    2007-11-29 09:05:53.000000000 +0100
+@@ -0,0 +1,63 @@
++/*
++ * Copyright © 2007 OpenMoko, Inc.
++ *
++ * This driver is based on Xati,
++ * Copyright © 2004 Eric Anholt
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that copyright
++ * notice and this permission notice appear in supporting documentation, and
++ * that the name of the copyright holders not be used in advertising or
++ * publicity pertaining to distribution of the software without specific,
++ * written prior permission.  The copyright holders make no representations
++ * about the suitability of this software for any purpose.  It is provided "as
++ * is" without express or implied warranty.
++ *
++ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
++ * OF THIS SOFTWARE.
++ *
++ * Author: Dodji Seketeli <dodji@openedhand.com>
++ */
++#ifndef _GLAMO_LOG_H_
++#define _GLAMO_LOG_H_
++#ifdef HAVE_CONFIG_H
++#include <kdrive-config.h>
++#endif
++
++#include <assert.h>
++#include "os.h"
++
++#ifdef NDEBUG
++/*we are not in debug mode*/
++#define GLAMO_LOG
++#define GLAMO_LOG_ERROR
++
++#else /*NDEBUG*/
++
++#define ERROR_LOG_LEVEL 3
++#define INFO_LOG_LEVEL 4
++
++#ifndef GLAMO_LOG
++#define GLAMO_LOG(...) \
++LogMessageVerb(X_NOTICE, INFO_LOG_LEVEL, "in %s:%d:%s: ",\
++               __FILE__, __LINE__, __func__) ; \
++LogMessageVerb(X_NOTICE, INFO_LOG_LEVEL, __VA_ARGS__)
++#endif /*GLAMO_LOG*/
++
++#ifndef GLAMO_LOG_ERROR
++#define GLAMO_LOG_ERROR(...) \
++LogMessageVerb(X_NOTICE, ERROR_LOG_LEVEL, "Error:in %s:%d:%s: ",\
++               __FILE__, __LINE__, __func__) ; \
++LogMessageVerb(X_NOTICE, ERROR_LOG_LEVEL, __VA_ARGS__)
++#endif /*GLAMO_LOG_ERROR*/
++
++#endif /*NDEBUG*/
++
++#endif /*_GLAMO_LOG_H_*/
++
+Index: xorg-server-1.3.0.0/hw/kdrive/glamo/glamo_draw.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/glamo/glamo_draw.c      2007-11-28 18:44:27.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/glamo/glamo_draw.c   2007-11-29 09:33:11.000000000 +0100
+@@ -26,6 +26,7 @@
+ #ifdef HAVE_CONFIG_H
+ #include <kdrive-config.h>
+ #endif
++#include "glamo-log.h"
+ #include "glamo.h"
+ #include "glamo-regs.h"
+ #include "glamo_dma.h"
+@@ -90,45 +91,11 @@
+       KdScreenPriv(pScreen);
+       GLAMOScreenInfo(pScreenPriv);
+-      ENTER_DRAW(0);
++      GLAMO_LOG("enter");
+       GLAMOWaitIdle(glamos);
+-      LEAVE_DRAW(0);
++      GLAMO_LOG("leave");
+ }
+-#if GLAMO_TRACE_DRAW
+-void
+-GLAMOEnterDraw (PixmapPtr pPix, const char *function)
+-{
+-    if (pPix != NULL) {
+-      KdScreenPriv(pPix->drawable.pScreen);
+-      CARD32 offset;
+-
+-      offset = ((CARD8 *)pPix->devPrivate.ptr -
+-                pScreenPriv->screen->memory_base);
+-
+-      ErrorF ("Enter %s 0x%x (%dx%dx%d/%d)\n", function, (unsigned int) offset,
+-          pPix->drawable.width, pPix->drawable.height, pPix->drawable.depth,
+-          (unsigned int) pPix->drawable.bitsPerPixel);
+-    } else
+-      ErrorF ("Enter %s\n", function);
+-}
+-
+-void
+-GLAMOLeaveDraw (PixmapPtr pPix, const char *function)
+-{
+-    if (pPix != NULL) {
+-      KdScreenPriv(pPix->drawable.pScreen);
+-      CARD32 offset;
+-
+-      offset = ((CARD8 *)pPix->devPrivate.ptr -
+-                pScreenPriv->screen->memory_base);
+-
+-      ErrorF ("Leave %s 0x%x\n", function, (unsigned int) offset);
+-    } else
+-      ErrorF ("Leave %s\n", function);
+-}
+-#endif
+-
+ static Bool
+ GLAMOPrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
+ {
+@@ -152,7 +119,7 @@
+                       pScreenPriv->screen->memory_base);
+       pitch = pPix->devKind;
+-      ENTER_DRAW(pPix);
++      GLAMO_LOG("enter");
+       BEGIN_DMA(12);
+       OUT_REG(GLAMO_REG_2D_DST_ADDRL, offset & 0xffff);
+@@ -163,7 +130,7 @@
+       OUT_REG(GLAMO_REG_2D_COMMAND2, settings);
+       END_DMA();
+-      LEAVE_DRAW(pPix);
++      GLAMO_LOG("leave");
+       return TRUE;
+ }
+@@ -171,7 +138,7 @@
+ static void
+ GLAMOSolid(int x1, int y1, int x2, int y2)
+ {
+-      ENTER_DRAW(0);
++      GLAMO_LOG("enter");
+       GLAMOScreenInfo *glamos = accel_glamos;
+       RING_LOCALS;
+@@ -184,14 +151,12 @@
+       OUT_REG(GLAMO_REG_2D_ID1, 0);
+       OUT_REG(GLAMO_REG_2D_ID2, 0);
+       END_DMA();
+-      LEAVE_DRAW(0);
++      GLAMO_LOG("leave");
+ }
+ static void
+ GLAMODoneSolid(void)
+ {
+-      ENTER_DRAW(0);
+-      LEAVE_DRAW(0);
+ }
+ static Bool
+@@ -204,6 +169,8 @@
+       FbBits mask;
+       RING_LOCALS;
++      GLAMO_LOG("enter");
++
+       if (pSrc->drawable.bitsPerPixel != 16 ||
+           pDst->drawable.bitsPerPixel != 16)
+               GLAMO_FALLBACK(("Only 16bpp is supported"));
+@@ -224,8 +191,6 @@
+       settings = GLAMOBltRop[alu] << 8;
+-      ENTER_DRAW (pDst);
+-
+       BEGIN_DMA(16);
+       OUT_REG(GLAMO_REG_2D_SRC_ADDRL, src_offset & 0xffff);
+@@ -241,7 +206,7 @@
+       END_DMA();
+-      LEAVE_DRAW(pDst);
++      GLAMO_LOG("leave");
+       return TRUE;
+ }
+@@ -268,8 +233,10 @@
+ static void
+ GLAMODoneCopy(void)
+ {
+-      ENTER_DRAW(0);
+-      LEAVE_DRAW(0);
++      GLAMOScreenInfo *glamos = accel_glamos;
++      GLAMO_LOG("enter");
++        GLAMOFlushIndirect(glamos, 1);
++      GLAMO_LOG("leave");
+ }
+ static Bool
+@@ -279,6 +246,7 @@
+       CARD8 *dst_offset;
+       int dst_pitch;
++        GLAMO_LOG("enter");
+       dst_offset = (CARD8 *)pDst->devPrivate.ptr;
+       dst_pitch = pDst->devKind;
+       width = pDst->drawable.width;
+@@ -294,83 +262,9 @@
+               src += src_pitch;
+       }
+-      ErrorF("hostdata upload %d,%d %dbpp\n", width, height, bpp);
+-
+       return TRUE;
+ }
+-
+-#if 0
+-static Bool
+-GLAMOUploadToScratch(PixmapPtr pSrc, PixmapPtr pDst)
+-{
+-      KdScreenPriv(pSrc->drawable.pScreen);
+-      GLAMOCardInfo(pScreenPriv);
+-      GLAMOScreenInfo(pScreenPriv);
+-      int dst_pitch, src_pitch, w, i, size, bytes;
+-      unsigned char *dst, *src;
+-      RING_LOCALS;
+-
+-      ENTER_DRAW(pSrc);
+-      /* Align width to log 2, useful for R128 composite.  This should be a
+-       * KAA flag we check for (and supported in kaa.c in general) since many
+-       * older bits of hardware are going to want POT pitches.
+-       */
+-      w = pSrc->drawable.width;
+-      if (glamos->kaa.flags & KAA_OFFSCREEN_ALIGN_POT)
+-              w = 1 << (GLAMOLog2(w - 1) + 1);
+-      dst_pitch = (w * pSrc->drawable.bitsPerPixel / 8 +
+-          glamos->kaa.pitchAlign - 1) & ~(glamos->kaa.pitchAlign - 1);
+-
+-      size = dst_pitch * pSrc->drawable.height;
+-      if (size > glamos->scratch_area->size)
+-              GLAMO_FALLBACK(("Pixmap too large for scratch (%d,%d)\n",
+-                  pSrc->drawable.width, pSrc->drawable.height));
+-
+-      glamos->scratch_next = (glamos->scratch_next + glamos->kaa.offsetAlign - 1) &
+-          ~(glamos->kaa.offsetAlign - 1);
+-      if (glamos->scratch_next + size > glamos->scratch_area->offset +
+-          glamos->scratch_area->size) {
+-              /* Only sync when we've used all of the scratch area. */
+-              kaaWaitSync(pSrc->drawable.pScreen);
+-              glamos->scratch_next = glamos->scratch_area->offset;
+-      }
+-      memcpy(pDst, pSrc, sizeof(*pDst));
+-      pDst->devKind = dst_pitch;
+-      pDst->devPrivate.ptr = pScreenPriv->screen->memory_base +
+-          glamos->scratch_next;
+-      glamos->scratch_next += size;
+-
+-      src = pSrc->devPrivate.ptr;
+-      src_pitch = pSrc->devKind;
+-      dst = pDst->devPrivate.ptr;
+-      bytes = src_pitch < dst_pitch ? src_pitch : dst_pitch;
+-
+-      i = pSrc->drawable.height;
+-      while (i--) {
+-              memcpy(dst, src, bytes);
+-              dst += dst_pitch;
+-              src += src_pitch;
+-      }
+-
+-      /* Flush the pixel cache */
+-      if (glamoc->is_3362) {
+-              BEGIN_DMA(4);
+-              OUT_REG(RADEON_REG_RB3D_DSTCACHE_CTLSTAT,
+-                  RADEON_RB3D_DC_FLUSH_ALL);
+-              OUT_REG(GLAMO_REG_WAIT_UNTIL, RADEON_WAIT_HOST_IDLECLEAN);
+-              END_DMA();
+-      } else {
+-              BEGIN_DMA(2);
+-              OUT_REG(R128_REG_PC_GUI_CTLSTAT, R128_PC_FLUSH_ALL);
+-              END_DMA();
+-      }
+-
+-      LEAVE_DRAW(pSrc);
+-      return TRUE;
+-}
+-#endif
+-
+ static void
+ GLAMOBlockHandler(pointer blockData, OSTimePtr timeout, pointer readmask)
+ {
+Index: xorg-server-1.3.0.0/hw/kdrive/glamo/glamo_dma.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/glamo/glamo_dma.c       2007-11-28 18:44:27.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/glamo/glamo_dma.c    2007-11-28 22:13:23.000000000 +0100
+@@ -25,6 +25,7 @@
+ #include <sys/time.h>
++#include "glamo-log.h"
+ #include "glamo.h"
+ #include "glamo-regs.h"
+ #include "glamo_dma.h"
+@@ -35,9 +36,7 @@
+ #include "glamo_sarea.h"
+ #endif /* USE_DRI */
+-#define DEBUG_FIFO 1
+-
+-#if DEBUG_FIFO
++#ifndef NDEBUG
+ static void
+ GLAMODebugFifo(GLAMOScreenInfo *glamos)
+ {
+@@ -273,7 +272,7 @@
+               count--;
+       }
+       if (TIMEDOUT()) {
+-              ErrorF("Timeout submitting packets, resetting...\n");
++              GLAMO_LOG_ERROR("Timeout submitting packets, resetting...\n");
+               GLAMOEngineReset(glamos->screen->pScreen, GLAMO_ENGINE_CQ);
+               GLAMODrawSetup(glamos->screen->pScreen);
+       }
+@@ -292,11 +291,6 @@
+       if ((glamos->indirectStart == buf->used) && !discard)
+               return;
+-#if DEBUG_FIFO
+-      ErrorF("Dispatching %d DWORDS\n", (buf->used - glamos->indirectStart) /
+-          4);
+-#endif
+-
+ #ifdef USE_DRI
+       if (glamos->using_dri) {
+               buf->drmBuf->used = buf->used;
+@@ -384,11 +378,6 @@
+       glamos->indirectBuffer = GLAMOGetDMABuffer(glamos);
+       if (glamos->indirectBuffer == FALSE)
+               FatalError("Failed to allocate DMA buffer.\n");
+-
+-      if (glamos->using_dri)
+-              ErrorF("Initialized DRI DMA\n");
+-      else
+-              ErrorF("Initialized DMA\n");
+ }
+ void
+Index: xorg-server-1.3.0.0/configure.ac
+===================================================================
+--- xorg-server-1.3.0.0.orig/configure.ac      2007-11-29 09:07:21.000000000 +0100
++++ xorg-server-1.3.0.0/configure.ac   2007-11-29 09:15:38.000000000 +0100
+@@ -866,6 +866,10 @@
+ if ! test "x$DEBUGGING" = xyes; then
+   AC_DEFINE(NDEBUG, 1, [Disable some debugging code])
++  AC_MSG_NOTICE([disabled debugging])
++else
++  AC_MSG_NOTICE([enabled debugging])
++
+ fi
+ AC_DEFINE(USE_RGB_TXT, 1, [Use rgb.txt directly])
diff --git a/packages/xorg-xserver/xserver-kdrive/01-xglamo-scrolling-artifact-fix.patch b/packages/xorg-xserver/xserver-kdrive/01-xglamo-scrolling-artifact-fix.patch
new file mode 100644 (file)
index 0000000..1ca96b9
--- /dev/null
@@ -0,0 +1,15 @@
+Index: xorg-server-1.3.0.0/hw/kdrive/glamo/glamo_draw.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/glamo/glamo_draw.c      2007-11-30 09:54:00.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/glamo/glamo_draw.c   2007-11-30 09:55:05.000000000 +0100
+@@ -314,8 +314,8 @@
+        */
+       glamos->kaa.flags = KAA_OFFSCREEN_PIXMAPS;
+-      glamos->kaa.offsetAlign = 2;
+-      glamos->kaa.pitchAlign = 2;
++      glamos->kaa.offsetAlign = 0;
++      glamos->kaa.pitchAlign = 0;
+       kaaInitTrapOffsets(8, sample_offsets_x, sample_offsets_y, 0.0, 0.0);
+       sample_count = (1 << 8) - 1;
diff --git a/packages/xorg-xserver/xserver-kdrive/02-xglamo-no-dri.patch b/packages/xorg-xserver/xserver-kdrive/02-xglamo-no-dri.patch
new file mode 100644 (file)
index 0000000..4331512
--- /dev/null
@@ -0,0 +1,438 @@
+Index: xorg-server-1.3.0.0/hw/kdrive/glamo/glamo.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/glamo/glamo.c   2007-11-28 18:44:27.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/glamo/glamo.c        2007-11-30 10:18:43.000000000 +0100
+@@ -27,9 +27,6 @@
+ #include <kdrive-config.h>
+ #endif
+ #include "glamo.h"
+-#if defined(USE_DRI) && defined(GLXEXT)
+-#include "glamo_sarea.h"
+-#endif
+ static Bool
+ GLAMOCardInit(KdCardInfo *card)
+@@ -89,13 +86,6 @@
+               return FALSE;
+       }
+-#ifdef USE_DRI
+-      /* We demand identification by busid, not driver name */
+-      glamoc->drmFd = drmOpen(NULL, glamoc->busid);
+-      if (glamoc->drmFd < 0)
+-              ErrorF("Failed to open DRM, DRI disabled.\n");
+-#endif /* USE_DRI */
+-
+       card->driver = glamoc;
+       glamoc->is_3362 = TRUE;
+@@ -122,10 +112,6 @@
+ GLAMOSetOffscreen (KdScreenInfo *screen)
+ {
+       GLAMOCardInfo(screen);
+-#if defined(USE_DRI) && defined(GLXEXT)
+-      GLAMOScreenInfo *glamos = (GLAMOScreenInfo *)screen->driver;
+-      int l;
+-#endif
+       int screen_size;
+       char *mmio = glamoc->reg_base;
+@@ -152,57 +138,7 @@
+       }
+       screen_size = screen->fb[0].byteStride * screen->height;
+-
+       screen->off_screen_base = screen_size;
+-
+-#if defined(USE_DRI) && defined(GLXEXT)
+-      /* Reserve a static area for the back buffer the same size as the
+-       * visible screen.  XXX: This would be better initialized in glamo_dri.c
+-       * when GLX is set up, but the offscreen memory manager's allocations
+-       * don't last through VT switches, while the kernel's understanding of
+-       * offscreen locations does.
+-       */
+-      glamos->frontOffset = 0;
+-      glamos->frontPitch = screen->fb[0].byteStride;
+-
+-      if (screen->off_screen_base + screen_size <= screen->memory_size) {
+-              glamos->backOffset = screen->off_screen_base;
+-              glamos->backPitch = screen->fb[0].byteStride;
+-              screen->off_screen_base += screen_size;
+-      }
+-
+-      /* Reserve the depth span for Rage 128 */
+-      if (!glamoc->is_3362 && screen->off_screen_base +
+-          screen->fb[0].byteStride <= screen->memory_size) {
+-              glamos->spanOffset = screen->off_screen_base;
+-              screen->off_screen_base += screen->fb[0].byteStride;
+-      }
+-
+-      /* Reserve the static depth buffer, which happens to be the same
+-       * bitsPerPixel as the screen.
+-       */
+-      if (screen->off_screen_base + screen_size <= screen->memory_size) {
+-              glamos->depthOffset = screen->off_screen_base;
+-              glamos->depthPitch = screen->fb[0].byteStride;
+-              screen->off_screen_base += screen_size;
+-      }
+-
+-      /* Reserve approx. half of remaining offscreen memory for local
+-       * textures.  Round down to a whole number of texture regions.
+-       */
+-      glamos->textureSize = (screen->memory_size - screen->off_screen_base) / 2;
+-      l = GLAMOLog2(glamos->textureSize / GLAMO_NR_TEX_REGIONS);
+-      if (l < GLAMO_LOG_TEX_GRANULARITY)
+-              l = GLAMO_LOG_TEX_GRANULARITY;
+-      glamos->textureSize = (glamos->textureSize >> l) << l;
+-      if (glamos->textureSize >= 512 * 1024) {
+-              glamos->textureOffset = screen->off_screen_base;
+-              screen->off_screen_base += glamos->textureSize;
+-      } else {
+-              /* Minimum texture size is for 2 256x256x32bpp textures */
+-              glamos->textureSize = 0;
+-      }
+-#endif /* USE_DRI && GLXEXT */
+ }
+ static Bool
+@@ -413,9 +349,6 @@
+ GLAMODisable(ScreenPtr pScreen)
+ {
+       KdScreenPriv(pScreen);
+-#if defined(USE_DRI) && defined(GLXEXT)
+-      GLAMOScreenInfo(pScreenPriv);
+-#endif /* USE_DRI && GLXEXT */
+       GLAMOCardInfo(pScreenPriv);
+       GLAMOUnmapReg(pScreenPriv->card, glamoc);
+Index: xorg-server-1.3.0.0/hw/kdrive/glamo/glamo_dma.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/glamo/glamo_dma.c       2007-11-28 22:13:23.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/glamo/glamo_dma.c    2007-11-30 10:25:49.000000000 +0100
+@@ -31,11 +31,6 @@
+ #include "glamo_dma.h"
+ #include "glamo_draw.h"
+-#ifdef USE_DRI
+-#include "radeon_common.h"
+-#include "glamo_sarea.h"
+-#endif /* USE_DRI */
+-
+ #ifndef NDEBUG
+ static void
+ GLAMODebugFifo(GLAMOScreenInfo *glamos)
+@@ -168,26 +163,6 @@
+       if (glamos->indirectBuffer != NULL)
+               GLAMOFlushIndirect(glamos, 0);
+-#ifdef USE_DRI
+-      if (glamos->using_dri) {
+-              int ret = 0;
+-              int cmd = (glamoc->is_3362 ? DRM_RADEON_CP_IDLE :
+-                  DRM_R128_CCE_IDLE);
+-              WHILE_NOT_TIMEOUT(2) {
+-                      ret = drmCommandNone(glamoc->drmFd, cmd);
+-                      if (ret != -EBUSY)
+-                              break;
+-              }
+-              if (TIMEDOUT()) {
+-                      GLAMODebugFifo(glamos);
+-                      FatalError("Timed out idling CCE (card hung)\n");
+-              }
+-              if (ret != 0)
+-                      ErrorF("Failed to idle DMA, returned %d\n", ret);
+-              return;
+-      }
+-#endif
+-
+       WHILE_NOT_TIMEOUT(.5) {
+               status = MMIO_IN16(mmio, GLAMO_REG_CQ_STATUS);
+               if ((status & (1 << 2)) && !(status & (1 << 8)))
+@@ -214,20 +189,6 @@
+       if (buf == NULL)
+               return NULL;
+-#ifdef USE_DRI
+-      if (glamos->using_dri) {
+-              buf->drmBuf = GLAMODRIGetBuffer(glamos);
+-              if (buf->drmBuf == NULL) {
+-                      xfree(buf);
+-                      return NULL;
+-              }
+-              buf->size = buf->drmBuf->total;
+-              buf->used = buf->drmBuf->used;
+-              buf->address = buf->drmBuf->address;
+-              return buf;
+-      }
+-#endif /* USE_DRI */
+-
+       buf->size = glamos->ring_len / 2;
+       buf->address = xalloc(buf->size);
+       if (buf->address == NULL) {
+@@ -290,25 +251,6 @@
+       if ((glamos->indirectStart == buf->used) && !discard)
+               return;
+-
+-#ifdef USE_DRI
+-      if (glamos->using_dri) {
+-              buf->drmBuf->used = buf->used;
+-              GLAMODRIDispatchIndirect(glamos, discard);
+-              if (discard) {
+-                      buf->drmBuf = GLAMODRIGetBuffer(glamos);
+-                      buf->size = buf->drmBuf->total;
+-                      buf->used = buf->drmBuf->used;
+-                      buf->address = buf->drmBuf->address;
+-                      glamos->indirectStart = 0;
+-              } else {
+-                      /* Start on a double word boundary */
+-                      glamos->indirectStart = buf->used = (buf->used + 7) & ~7;
+-              }
+-              return;
+-      }
+-#endif /* USE_DRI */
+-
+       GLAMODispatchIndirectDMA(glamos);
+       buf->used = 0;
+@@ -367,13 +309,7 @@
+       KdScreenPriv(pScreen);
+       GLAMOScreenInfo(pScreenPriv);
+-#ifdef USE_DRI
+-      if (glamos->using_dri)
+-              GLAMODRIDMAStart(glamos);
+-#endif /* USE_DRI */
+-
+-      if (!glamos->using_dri)
+-              GLAMODMAInit(pScreen);
++      GLAMODMAInit(pScreen);
+       glamos->indirectBuffer = GLAMOGetDMABuffer(glamos);
+       if (glamos->indirectBuffer == FALSE)
+@@ -388,11 +324,6 @@
+       GLAMOWaitIdle(glamos);
+-#ifdef USE_DRI
+-      if (glamos->using_dri)
+-              GLAMODRIDMAStop(glamos);
+-#endif /* USE_DRI */
+-
+       xfree(glamos->indirectBuffer->address);
+       xfree(glamos->indirectBuffer);
+       glamos->indirectBuffer = NULL;
+Index: xorg-server-1.3.0.0/hw/kdrive/glamo/glamo.h
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/glamo/glamo.h   2007-11-30 10:24:13.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/glamo/glamo.h        2007-11-30 10:25:06.000000000 +0100
+@@ -39,18 +39,6 @@
+ #include "kxv.h"
+-#undef XF86DRI
+-#ifdef XF86DRI
+-#define USE_DRI
+-#include "xf86drm.h"
+-#include "dri.h"
+-#ifdef GLXEXT
+-#include "GL/glxint.h"
+-#include "GL/glxtokens.h"
+-#include "glamo_dripriv.h"
+-#endif
+-#endif
+-
+ #define GLAMO_REG_BASE(c)             ((c)->attr.address[0])
+ #define GLAMO_REG_SIZE(c)             (0x2400)
+@@ -124,9 +112,6 @@
+       Bool is_3362;
+       CARD32 crtc_pitch;
+       CARD32 crtc2_pitch;
+-#ifdef USE_DRI
+-      int drmFd;
+-#endif /* USE_DRI */
+       Bool use_fbdev, use_vesa;
+ } GLAMOCardInfo;
+@@ -166,9 +151,6 @@
+       int size;
+       int used;
+       void *address;
+-#ifdef USE_DRI
+-      drmBufPtr drmBuf;
+-#endif
+ } dmaBuf;
+ typedef struct _GLAMOScreenInfo {
+@@ -194,8 +176,6 @@
+       KdVideoAdaptorPtr pAdaptor;
+       int             num_texture_ports;
+-      Bool            using_dri;      /* If we use the DRM for DMA. */
+-
+       KdOffscreenArea *dma_space;     /* For "DMA" from framebuffer. */
+       CARD16          *ring_addr;     /* Beginning of ring buffer. */
+       int             ring_write;     /* Index of write ptr in ring. */
+@@ -204,76 +184,6 @@
+       dmaBuf          *indirectBuffer;
+       int             indirectStart;
+-
+-#ifdef USE_DRI
+-      Bool            dma_started;
+-
+-      drmSize         registerSize;
+-      drmHandle       registerHandle;
+-      drmHandle       fbHandle;
+-
+-      drmSize         gartSize;
+-      drmHandle       agpMemHandle;           /* Handle from drmAgpAlloc */
+-      unsigned long   gartOffset;
+-      unsigned char   *AGP;                   /* Map */
+-      int             agpMode;
+-      drmSize         pciSize;
+-      drmHandle       pciMemHandle;
+-
+-      /* ring buffer data */
+-      unsigned long   ringStart;              /* Offset into AGP space */
+-      drmHandle       ringHandle;             /* Handle from drmAddMap */
+-      drmSize         ringMapSize;            /* Size of map */
+-      int             ringSize;               /* Size of ring (MB) */
+-      unsigned char   *ring;                  /* Map */
+-
+-      unsigned long   ringReadOffset;         /* Offset into AGP space */
+-      drmHandle       ringReadPtrHandle;      /* Handle from drmAddMap */
+-      drmSize         ringReadMapSize;        /* Size of map */
+-      unsigned char   *ringReadPtr;           /* Map */
+-
+-      /* vertex/indirect buffer data */
+-      unsigned long   bufStart;               /* Offset into AGP space */
+-      drmHandle       bufHandle;              /* Handle from drmAddMap */
+-      drmSize         bufMapSize;             /* Size of map */
+-      int             bufSize;                /* Size of buffers (MB) */
+-      unsigned char   *buf;                   /* Map */
+-      int             bufNumBufs;             /* Number of buffers */
+-      drmBufMapPtr    buffers;                /* Buffer map */
+-
+-      /* AGP Texture data */
+-      unsigned long   gartTexStart;           /* Offset into AGP space */
+-      drmHandle       gartTexHandle;          /* Handle from drmAddMap */
+-      drmSize         gartTexMapSize;         /* Size of map */
+-      int             gartTexSize;            /* Size of AGP tex space (MB) */
+-      unsigned char   *gartTex;               /* Map */
+-      int             log2GARTTexGran;
+-
+-      int             DMAusecTimeout;   /* CCE timeout in usecs */
+-
+-      /* DRI screen private data */
+-      int             frontOffset;
+-      int             frontPitch;
+-      int             backOffset;
+-      int             backPitch;
+-      int             depthOffset;
+-      int             depthPitch;
+-      int             spanOffset;
+-      int             textureOffset;
+-      int             textureSize;
+-      int             log2TexGran;
+-
+-      int             irqEnabled;
+-
+-      int             serverContext;
+-
+-      DRIInfoPtr      pDRIInfo;
+-#ifdef GLXEXT
+-      int             numVisualConfigs;
+-      __GLXvisualConfig *pVisualConfigs;
+-      GLAMOConfigPrivPtr pVisualConfigsPriv;
+-#endif /* GLXEXT */
+-#endif /* USE_DRI */
+ } GLAMOScreenInfo;
+ #define getGLAMOScreenInfo(kd)        ((GLAMOScreenInfo *) ((kd)->screen->driver))
+@@ -330,31 +240,6 @@
+ void
+ GLAMODrawFini(ScreenPtr pScreen);
+-/* glamo_dri.c */
+-#ifdef USE_DRI
+-Bool
+-GLAMODRIScreenInit(ScreenPtr pScreen);
+-
+-void
+-GLAMODRICloseScreen(ScreenPtr pScreen);
+-
+-void
+-GLAMODRIDMAStart(GLAMOScreenInfo *glamos);
+-
+-void
+-GLAMODRIDMAStop(GLAMOScreenInfo *glamos);
+-
+-void
+-GLAMODRIDMAReset(GLAMOScreenInfo *glamos);
+-
+-void
+-GLAMODRIDispatchIndirect(GLAMOScreenInfo *glamos, Bool discard);
+-
+-drmBufPtr
+-GLAMODRIGetBuffer(GLAMOScreenInfo *glamos);
+-
+-#endif /* USE_DRI */
+-
+ /* glamo_cursor.c */
+ Bool
+ GLAMOCursorInit(ScreenPtr pScreen);
+Index: xorg-server-1.3.0.0/hw/kdrive/glamo/glamo_draw.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/glamo/glamo_draw.c      2007-11-30 09:55:05.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/glamo/glamo_draw.c   2007-11-30 10:26:02.000000000 +0100
+@@ -296,11 +296,6 @@
+       RegisterBlockAndWakeupHandlers(GLAMOBlockHandler, GLAMOWakeupHandler,
+           pScreen);
+-      glamos->using_dri = FALSE;
+-#ifdef USE_DRI
+-      glamos->using_dri = GLAMODRIScreenInit(pScreen);
+-#endif /* USE_DRI */
+-
+       memset(&glamos->kaa, 0, sizeof(KaaScreenInfoRec));
+       glamos->kaa.waitMarker = GLAMOWaitMarker;
+       glamos->kaa.PrepareSolid = GLAMOPrepareSolid;
+@@ -357,20 +352,6 @@
+       glamos->kaa.UploadToScreen = NULL;
+       glamos->kaa.UploadToScratch = NULL;
+-#ifdef USE_DRI
+-      if (glamos->using_dri) {
+-              if (!glamoc->is_3362) {
+-                      /*glamos->kaa.PrepareTrapezoids = R128PrepareTrapezoids;
+-                      glamos->kaa.Trapezoids = R128Trapezoids;
+-                      glamos->kaa.DoneTrapezoids = R128DoneTrapezoids;*/
+-              } else if (glamoc->is_r100 || glamoc->is_r200) {
+-                      glamos->kaa.PrepareTrapezoids = RadeonPrepareTrapezoids;
+-                      glamos->kaa.Trapezoids = RadeonTrapezoids;
+-                      glamos->kaa.DoneTrapezoids = RadeonDoneTrapezoids;
+-              }
+-      }
+-#endif /* USE_DRI */
+-
+       glamos->kaa.UploadToScreen = GLAMOUploadToScreen;
+       /* Reserve a scratch area.  It'll be used for storing glyph data during
+@@ -399,15 +380,6 @@
+ void
+ GLAMODrawFini(ScreenPtr pScreen)
+ {
+-#ifdef USE_DRI
+-      KdScreenPriv(pScreen);
+-      GLAMOScreenInfo(pScreenPriv);
+-      if (glamos->using_dri) {
+-              GLAMODRICloseScreen(pScreen);
+-              glamos->using_dri = FALSE;
+-      }
+-#endif /* USE_DRI */
+-
+       RemoveBlockAndWakeupHandlers(GLAMOBlockHandler, GLAMOWakeupHandler,
+           pScreen);
diff --git a/packages/xorg-xserver/xserver-kdrive/03-xglamo-no-vesa.patch b/packages/xorg-xserver/xserver-kdrive/03-xglamo-no-vesa.patch
new file mode 100644 (file)
index 0000000..2c44bd8
--- /dev/null
@@ -0,0 +1,141 @@
+Index: xorg-server-1.3.0.0/hw/kdrive/glamo/glamo.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/glamo/glamo.c   2007-11-30 10:18:43.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/glamo/glamo.c        2007-11-30 10:35:27.000000000 +0100
+@@ -38,9 +38,7 @@
+       if (glamoc == NULL)
+               return FALSE;
+-#ifdef KDRIVEFBDEV
+       if (!initialized && fbdevInitialize(card, &glamoc->backend_priv.fbdev)) {
+-              glamoc->use_fbdev = TRUE;
+               initialized = TRUE;
+               glamoc->backend_funcs.cardfini = fbdevCardFini;
+               glamoc->backend_funcs.scrfini = fbdevScreenFini;
+@@ -58,29 +56,6 @@
+               glamoc->backend_funcs.randrSetConfig = fbdevRandRSetConfig;
+ #endif
+       }
+-#endif
+-#ifdef KDRIVEVESA
+-      if (!initialized && vesaInitialize(card, &glamoc->backend_priv.vesa)) {
+-              glamoc->use_vesa = TRUE;
+-              initialized = TRUE;
+-              glamoc->backend_funcs.cardfini = vesaCardFini;
+-              glamoc->backend_funcs.scrfini = vesaScreenFini;
+-              glamoc->backend_funcs.initScreen = vesaInitScreen;
+-              glamoc->backend_funcs.finishInitScreen = vesaFinishInitScreen;
+-              glamoc->backend_funcs.createRes = vesaCreateResources;
+-              glamoc->backend_funcs.preserve = vesaPreserve;
+-              glamoc->backend_funcs.restore = vesaRestore;
+-              glamoc->backend_funcs.dpms = vesaDPMS;
+-              glamoc->backend_funcs.enable = vesaEnable;
+-              glamoc->backend_funcs.disable = vesaDisable;
+-              glamoc->backend_funcs.getColors = vesaGetColors;
+-              glamoc->backend_funcs.putColors = vesaPutColors;
+-#ifdef RANDR
+-              glamoc->backend_funcs.randrSetConfig = vesaRandRSetConfig;
+-#endif
+-      }
+-#endif
+-
+       if (!initialized || !GLAMOMapReg(card, glamoc)) {
+               xfree(glamoc);
+               return FALSE;
+@@ -158,18 +133,8 @@
+       if (screen->fb[0].depth == 0)
+               screen->fb[0].depth = 16;
+-#ifdef KDRIVEFBDEV
+-      if (glamoc->use_fbdev) {
+-              success = fbdevScreenInitialize(screen,
+-                                              &glamos->backend_priv.fbdev);
+-      }
+-#endif
+-#ifdef KDRIVEVESA
+-      if (glamoc->use_vesa) {
+-              success = vesaScreenInitialize(screen,
+-                                             &glamos->backend_priv.vesa);
+-      }
+-#endif
++
++      success = fbdevScreenInitialize(screen, &glamos->backend_priv.fbdev);
+       if (!success) {
+               screen->driver = NULL;
+Index: xorg-server-1.3.0.0/hw/kdrive/glamo/glamo.h
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/glamo/glamo.h   2007-11-30 10:25:06.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/glamo/glamo.h        2007-11-30 10:35:17.000000000 +0100
+@@ -30,13 +30,7 @@
+ #include <kdrive-config.h>
+ #endif
+-#ifdef KDRIVEFBDEV
+ #include <fbdev.h>
+-#endif
+-#ifdef KDRIVEVESA
+-#include <vesa.h>
+-#endif
+-
+ #include "kxv.h"
+ #define GLAMO_REG_BASE(c)             ((c)->attr.address[0])
+@@ -99,12 +93,7 @@
+ typedef struct _GLAMOCardInfo {
+       union {
+-#ifdef KDRIVEFBDEV
+               FbdevPriv fbdev;
+-#endif
+-#ifdef KDRIVEVESA
+-              VesaCardPrivRec vesa;
+-#endif
+       } backend_priv;
+       struct backend_funcs backend_funcs;
+@@ -112,7 +101,6 @@
+       Bool is_3362;
+       CARD32 crtc_pitch;
+       CARD32 crtc2_pitch;
+-      Bool use_fbdev, use_vesa;
+ } GLAMOCardInfo;
+ #define getGLAMOCardInfo(kd)  ((GLAMOCardInfo *) ((kd)->card->driver))
+@@ -155,12 +143,7 @@
+ typedef struct _GLAMOScreenInfo {
+       union {
+-#ifdef KDRIVEFBDEV
+               FbdevScrPriv fbdev;
+-#endif
+-#ifdef KDRIVEVESA
+-              VesaScreenPrivRec vesa;
+-#endif
+       } backend_priv;
+       KaaScreenInfoRec kaa;
+Index: xorg-server-1.3.0.0/hw/kdrive/glamo/glamo_stub.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/glamo/glamo_stub.c      2007-11-28 18:44:27.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/glamo/glamo_stub.c   2007-11-30 10:34:10.000000000 +0100
+@@ -59,9 +59,6 @@
+ ddxUseMsg (void)
+ {
+       KdUseMsg();
+-#ifdef KDRIVEVESA
+-      vesaUseMsg();
+-#endif
+ }
+ int
+@@ -69,9 +66,6 @@
+ {
+       int     ret;
+-#ifdef KDRIVEVESA
+-      if (!(ret = vesaProcessArgument (argc, argv, i)))
+-#endif
+               ret = KdProcessArgument(argc, argv, i);
+       return ret;
index f78bef0..368b421 100644 (file)
@@ -23,6 +23,10 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
         file://gumstix-kmode.patch;patch=1 \
         file://smedia-glamo.patch;patch=1 \
         file://build-glamo.patch;patch=1 \
+        file://00-xglamo-logs.patch;patch=1 \
+        file://01-xglamo-scrolling-artifact-fix.patch;patch=1 \
+        file://02-xglamo-no-dri.patch;patch=1 \
+        file://03-xglamo-no-vesa.patch;patch=1 \
 "
 
 S = "${WORKDIR}/xorg-server-${PV}"