Module Name:    src
Committed By:   macallan
Date:           Wed Apr 23 16:54:21 UTC 2014

Modified Files:
        src/sys/arch/sparc/dev: cgfourteen.c

Log Message:
rev. 27 SX needs memory referencing instructions written to 64bit aligned
addresses ( my rev. 25 just ignores the lower 3 bits )
so, we zero these bits now


To generate a diff of this commit:
cvs rdiff -u -r1.77 -r1.78 src/sys/arch/sparc/dev/cgfourteen.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/sparc/dev/cgfourteen.c
diff -u src/sys/arch/sparc/dev/cgfourteen.c:1.77 src/sys/arch/sparc/dev/cgfourteen.c:1.78
--- src/sys/arch/sparc/dev/cgfourteen.c:1.77	Sun Mar 16 05:20:25 2014
+++ src/sys/arch/sparc/dev/cgfourteen.c	Wed Apr 23 16:54:21 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: cgfourteen.c,v 1.77 2014/03/16 05:20:25 dholland Exp $ */
+/*	$NetBSD: cgfourteen.c,v 1.78 2014/04/23 16:54:21 macallan Exp $ */
 
 /*
  * Copyright (c) 1996
@@ -782,6 +782,7 @@ cg14_setup_wsdisplay(struct cgfourteen_s
 		WSSCREEN_WSCOLORS | WSSCREEN_HILIT,
 		NULL
 	};
+	cg14_set_depth(sc, 8);
 	sc->sc_screens[0] = &sc->sc_defaultscreen_descr;
 	sc->sc_screenlist = (struct wsscreen_list){1, sc->sc_screens};
 	sc->sc_mode = WSDISPLAYIO_MODE_EMUL;
@@ -1229,20 +1230,20 @@ cg14_rectfill(struct cgfourteen_softc *s
 		pptr = addr;
 		cnt = wi;
 		if (pre) {
-			sta(pptr, ASI_SX, SX_STBS(8, pre - 1, pptr & 7));
+			sta(pptr & ~7, ASI_SX, SX_STBS(8, pre - 1, pptr & 7));
 			pptr += pre;
 			cnt -= pre;
 		}
 		/* now do the aligned pixels in 32bit chunks */
 		while(cnt > 31) {
 			words = min(32, cnt >> 2);
-			sta(pptr, ASI_SX, SX_STS(8, words - 1, pptr & 7));
+			sta(pptr & ~7, ASI_SX, SX_STS(8, words - 1, pptr & 7));
 			pptr += words << 2;
 			cnt -= words << 2;
 		}
 		/* do any remaining pixels byte-wise again */
 		if (cnt > 0)
-			sta(pptr, ASI_SX, SX_STBS(8, cnt - 1, pptr & 7));
+			sta(pptr & ~7, ASI_SX, SX_STBS(8, cnt - 1, pptr & 7));
 		addr += stride;
 	}
 }
@@ -1268,29 +1269,29 @@ cg14_invert(struct cgfourteen_softc *sc,
 		pptr = addr;
 		cnt = wi;
 		if (pre) {
-			sta(pptr, ASI_SX, SX_LDB(8, pre - 1, pptr & 7));
+			sta(pptr & ~7, ASI_SX, SX_LDB(8, pre - 1, pptr & 7));
 			sx_write(sc->sc_sx, SX_INSTRUCTIONS,
 			    SX_ROP(8, 8, 32, pre - 1));
-			sta(pptr, ASI_SX, SX_STB(32, pre - 1, pptr & 7));
+			sta(pptr & ~7, ASI_SX, SX_STB(32, pre - 1, pptr & 7));
 			pptr += pre;
 			cnt -= pre;
 		}
 		/* now do the aligned pixels in 32bit chunks */
 		while(cnt > 15) {
 			words = min(16, cnt >> 2);
-			sta(pptr, ASI_SX, SX_LD(8, words - 1, pptr & 7));
+			sta(pptr & ~7, ASI_SX, SX_LD(8, words - 1, pptr & 7));
 			sx_write(sc->sc_sx, SX_INSTRUCTIONS,
 			    SX_ROP(8, 8, 32, words - 1));
-			sta(pptr, ASI_SX, SX_ST(32, words - 1, pptr & 7));
+			sta(pptr & ~7, ASI_SX, SX_ST(32, words - 1, pptr & 7));
 			pptr += words << 2;
 			cnt -= words << 2;
 		}
 		/* do any remaining pixels byte-wise again */
 		if (cnt > 0)
-			sta(pptr, ASI_SX, SX_LDB(8, cnt - 1, pptr & 7));
+			sta(pptr & ~7, ASI_SX, SX_LDB(8, cnt - 1, pptr & 7));
 			sx_write(sc->sc_sx, SX_INSTRUCTIONS,
 			    SX_ROP(8, 8, 32, cnt - 1));
-			sta(pptr, ASI_SX, SX_STB(32, cnt - 1, pptr & 7));
+			sta(pptr & ~7, ASI_SX, SX_STB(32, cnt - 1, pptr & 7));
 		addr += stride;
 	}
 }
@@ -1301,7 +1302,7 @@ cg14_slurp(int reg, uint32_t addr, int c
 	int num;
 	while (cnt > 0) {
 		num = min(32, cnt);
-		sta(addr, ASI_SX, SX_LD(reg, num - 1, addr & 7));
+		sta(addr & ~7, ASI_SX, SX_LD(reg, num - 1, addr & 7));
 		cnt -= num;
 		reg += num;
 		addr += (num << 2);
@@ -1314,7 +1315,7 @@ cg14_spit(int reg, uint32_t addr, int cn
 	int num;
 	while (cnt > 0) {
 		num = min(32, cnt);
-		sta(addr, ASI_SX, SX_ST(reg, num - 1, addr & 7));
+		sta(addr & ~7, ASI_SX, SX_ST(reg, num - 1, addr & 7));
 		cnt -= num;
 		reg += num;
 		addr += (num << 2);
@@ -1349,9 +1350,9 @@ cg14_bitblt(void *cookie, int xs, int ys
 			dptr = daddr;
 			cnt = wi;
 			if (pre > 0) {
-				sta(sptr, ASI_SX,
+				sta(sptr & ~7, ASI_SX,
 				    SX_LDB(32, pre - 1, sptr & 7));
-				sta(dptr, ASI_SX,
+				sta(dptr & ~7, ASI_SX,
 				    SX_STB(32, pre - 1, dptr & 7));
 				cnt -= pre;
 				sptr += pre;
@@ -1367,9 +1368,9 @@ cg14_bitblt(void *cookie, int xs, int ys
 				cnt -= num << 2;
 			}
 			if (cnt > 0) {
-				sta(sptr, ASI_SX,
+				sta(sptr & ~7, ASI_SX,
 				    SX_LDB(32, cnt - 1, sptr & 7));
-				sta(dptr, ASI_SX,
+				sta(dptr & ~7, ASI_SX,
 				    SX_STB(32, cnt - 1, dptr & 7));
 			}
 			saddr += skip;
@@ -1383,16 +1384,16 @@ cg14_bitblt(void *cookie, int xs, int ys
 			dptr = daddr;
 			cnt = wi;
 			while(cnt > 31) {
-				sta(sptr, ASI_SX, SX_LDB(32, 31, sptr & 7));
-				sta(dptr, ASI_SX, SX_STB(32, 31, dptr & 7));
+				sta(sptr & ~7, ASI_SX, SX_LDB(32, 31, sptr & 7));
+				sta(dptr & ~7, ASI_SX, SX_STB(32, 31, dptr & 7));
 				sptr += 32;
 				dptr += 32;
 				cnt -= 32;
 			}
 			if (cnt > 0) {
-				sta(sptr, ASI_SX,
+				sta(sptr & ~7, ASI_SX,
 				    SX_LDB(32, cnt - 1, sptr & 7));
-				sta(dptr, ASI_SX,
+				sta(dptr & ~7, ASI_SX,
 				    SX_STB(32, cnt - 1, dptr & 7));
 			}
 			saddr += skip;
@@ -1448,7 +1449,7 @@ cg14_putchar(void *cookie, int row, int 
 				reg = *data8;
 				sx_write(sc->sc_sx, SX_QUEUED(R_MASK),
 				    reg << 24);
-				sta(addr, ASI_SX, SX_STBS(8, wi - 1, addr & 7));
+				sta(addr & ~7, ASI_SX, SX_STBS(8, wi - 1, addr & 7));
 				data8++;
 				addr += stride;
 			}
@@ -1461,7 +1462,7 @@ cg14_putchar(void *cookie, int row, int 
 				reg = *data16;
 				sx_write(sc->sc_sx, SX_QUEUED(R_MASK),
 				    reg << 16);
-				sta(addr, ASI_SX, SX_STBS(8, wi - 1, addr & 7));
+				sta(addr & ~7, ASI_SX, SX_STBS(8, wi - 1, addr & 7));
 				data16++;
 				addr += stride;
 			}

Reply via email to