Module Name: xsrc Committed By: macallan Date: Sun Jan 26 05:38:38 UTC 2025
Modified Files: xsrc/external/mit/xf86-video-ngle/dist/src: summit_accel.c Log Message: adjust FIFO slots in SummitWaitFifo() calls To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 \ xsrc/external/mit/xf86-video-ngle/dist/src/summit_accel.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-ngle/dist/src/summit_accel.c diff -u xsrc/external/mit/xf86-video-ngle/dist/src/summit_accel.c:1.5 xsrc/external/mit/xf86-video-ngle/dist/src/summit_accel.c:1.6 --- xsrc/external/mit/xf86-video-ngle/dist/src/summit_accel.c:1.5 Fri Jan 24 07:51:24 2025 +++ xsrc/external/mit/xf86-video-ngle/dist/src/summit_accel.c Sun Jan 26 05:38:38 2025 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* $NetBSD: summit_accel.c,v 1.5 2025/01/24 07:51:24 macallan Exp $ */ +/* $NetBSD: summit_accel.c,v 1.6 2025/01/26 05:38:38 macallan Exp $ */ #include <sys/types.h> #include <dev/ic/summitreg.h> @@ -55,20 +55,21 @@ fPtr->write_mode = (m); \ } -static void +static inline void SummitWait(NGLEPtr fPtr) { - int reg; + int reg, count = 0;; ENTER; do { reg = NGLERead4(fPtr, VISFX_STATUS); + count++; } while ((reg & 0x01000000) != 0); if (reg != 0) { xf86Msg(X_ERROR, "%s status %08x\n", __func__, reg); xf86Msg(X_ERROR, "fault %08x\n", NGLERead4(fPtr, 0x641040)); } - LEAVE; + DBGMSG(X_ERROR, "%s: %d\n", __func__, count); } static void @@ -76,17 +77,18 @@ SummitWaitMarker(ScreenPtr pScreen, int { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; NGLEPtr fPtr = NGLEPTR(pScrn); - int reg; + int reg, count = 0; ENTER; do { reg = NGLERead4(fPtr, VISFX_STATUS); + count++; } while ((reg & 0x01000000) != 0); if (reg != 0) { xf86Msg(X_ERROR, "%s status %08x\n", __func__, reg); xf86Msg(X_ERROR, "fault %08x\n", NGLERead4(fPtr, 0x641040)); } - LEAVE; + DBGMSG(X_ERROR, "%s: %d\n", __func__, count); } static void @@ -140,7 +142,7 @@ SummitPrepareCopy fPtr->offsetd = y; SUMMIT_WRITE_MODE(dm); - SummitWaitFifo(fPtr, 6); + SummitWaitFifo(fPtr, 8); if (alu == GXcopy) { NGLEWrite4(fPtr, VISFX_FOE, 0); } else { @@ -206,7 +208,7 @@ SummitPrepareSolid( SUMMIT_READ_MODE(rm); SUMMIT_WRITE_MODE(wm); fPtr->offset = y; - SummitWaitFifo(fPtr, 8); + SummitWaitFifo(fPtr, 10); if (alu == GXcopy) { NGLEWrite4(fPtr, VISFX_FOE, 0); } else { @@ -264,6 +266,11 @@ SummitUploadToScreen(PixmapPtr pDst, int NGLEWrite4(fPtr, VISFX_FOE, 0); while (h--) { + /* + * it *should* be impossible to overrun the FIFO using BINC + * writes, but overruns are annoying if they do happen so be + * overly cautious and make sure there is at least some room + */ SummitWaitFifo(fPtr, w + 1); NGLEWrite4(fPtr, VISFX_VRAM_WRITE_DEST, (y << 16) | x); line = (uint32_t *)src;