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; }