Module Name: xsrc
Committed By: macallan
Date: Wed Jul 24 16:07:59 UTC 2019
Modified Files:
xsrc/external/mit/xf86-video-suncg14/dist/src: cg14.h cg14_accel.c
cg14_render.c
Log Message:
avoid stalling the CPU by letting the SX instruction FIFO drain every couple
of memory instructions.
No more missed IPIs when building stuff in an xterm so far...
To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 \
xsrc/external/mit/xf86-video-suncg14/dist/src/cg14.h
cvs rdiff -u -r1.14 -r1.15 \
xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c
cvs rdiff -u -r1.12 -r1.13 \
xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: xsrc/external/mit/xf86-video-suncg14/dist/src/cg14.h
diff -u xsrc/external/mit/xf86-video-suncg14/dist/src/cg14.h:1.13 xsrc/external/mit/xf86-video-suncg14/dist/src/cg14.h:1.14
--- xsrc/external/mit/xf86-video-suncg14/dist/src/cg14.h:1.13 Thu Dec 7 19:23:22 2017
+++ xsrc/external/mit/xf86-video-suncg14/dist/src/cg14.h Wed Jul 24 16:07:59 2019
@@ -31,6 +31,7 @@
#include "gcstruct.h"
#include "xf86sbusBus.h"
#include "exa.h"
+#include <sparc/sxreg.h>
/* Various offsets in virtual (ie. mmap()) spaces Linux and Solaris support. */
#define CG14_REGS_VOFF 0x00000000 /* registers */
@@ -100,7 +101,8 @@ typedef struct {
uint32_t fillcolour;
int op;
Bool source_is_solid, no_source_pixmap;
- int xdir, ydir;
+ int xdir, ydir;
+ int queuecount;
ExaDriverPtr pExa;
} Cg14Rec, *Cg14Ptr;
@@ -123,7 +125,14 @@ read_sx_reg(Cg14Ptr p, int reg)
static inline void
write_sx_io(Cg14Ptr p, int reg, uint32_t val)
{
+ if (p->queuecount > 6) {
+ /* let the queue drain to avoid stalling the CPU */
+ do { } while
+ ((read_sx_reg(p, SX_CONTROL_STATUS) & SX_MT) == 0);
+ p->queuecount = 0;
+ }
*(volatile uint32_t *)(p->sxio + (reg & ~7)) = val;
+ p->queuecount++;
}
Bool CG14SetupCursor(ScreenPtr);
Index: xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c
diff -u xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c:1.14 xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c:1.15
--- xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c:1.14 Fri Mar 1 02:22:27 2019
+++ xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c Wed Jul 24 16:07:59 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: cg14_accel.c,v 1.14 2019/03/01 02:22:27 macallan Exp $ */
+/* $NetBSD: cg14_accel.c,v 1.15 2019/07/24 16:07:59 macallan Exp $ */
/*
* Copyright (c) 2013 Michael Lorenz
* All rights reserved.
@@ -41,7 +41,6 @@
#include "compiler.h"
#include "cg14.h"
-#include <sparc/sxreg.h>
/*#define SX_DEBUG*/
@@ -1121,6 +1120,7 @@ CG14InitAccel(ScreenPtr pScreen)
pExa->UploadToScreen = CG14UploadToScreen;
pExa->DownloadFromScreen = CG14DownloadFromScreen;
+ p->queuecount = 0;
/* do some hardware init */
write_sx_reg(p, SX_PLANEMASK, 0xffffffff);
p->last_mask = 0xffffffff;
Index: xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c
diff -u xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c:1.12 xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c:1.13
--- xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c:1.12 Fri Dec 8 22:49:37 2017
+++ xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c Wed Jul 24 16:07:59 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: cg14_render.c,v 1.12 2017/12/08 22:49:37 macallan Exp $ */
+/* $NetBSD: cg14_render.c,v 1.13 2019/07/24 16:07:59 macallan Exp $ */
/*
* Copyright (c) 2013 Michael Lorenz
* All rights reserved.
@@ -41,7 +41,6 @@
#include "compiler.h"
#include "cg14.h"
-#include <sparc/sxreg.h>
/*#define SX_SINGLE*/
/*#define SX_RENDER_DEBUG*/