Module Name: src Committed By: macallan Date: Fri Dec 17 19:27:57 UTC 2021
Modified Files: src/sys/arch/sparc/dev: cgfourteen.c cgfourteenvar.h Log Message: only write the mask register if we're actually changing it To generate a diff of this commit: cvs rdiff -u -r1.91 -r1.92 src/sys/arch/sparc/dev/cgfourteen.c cvs rdiff -u -r1.18 -r1.19 src/sys/arch/sparc/dev/cgfourteenvar.h 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.91 src/sys/arch/sparc/dev/cgfourteen.c:1.92 --- src/sys/arch/sparc/dev/cgfourteen.c:1.91 Fri Dec 17 18:51:02 2021 +++ src/sys/arch/sparc/dev/cgfourteen.c Fri Dec 17 19:27:57 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: cgfourteen.c,v 1.91 2021/12/17 18:51:02 macallan Exp $ */ +/* $NetBSD: cgfourteen.c,v 1.92 2021/12/17 19:27:57 macallan Exp $ */ /* * Copyright (c) 1996 @@ -1042,6 +1042,12 @@ cg14_set_depth(struct cgfourteen_softc * { int i; + /* init mask */ + if (sc->sc_sx != NULL) { + sc->sc_mask = 0xffffffff; + sx_write(sc->sc_sx, SX_QUEUED(R_MASK), sc->sc_mask); + } + if (sc->sc_depth == depth) return; @@ -1226,6 +1232,13 @@ cg14_rectfill_a(void *cookie, int dstx, sc->sc_vd.active->scr_ri.ri_devcmap[(attr >> 24 & 0xf)]); } +static inline void +cg14_set_mask(struct cgfourteen_softc *sc, uint32_t mask) +{ + if (mask == sc->sc_mask) return; + sc->sc_mask = mask; + sx_write(sc->sc_sx, SX_QUEUED(R_MASK), mask); +} /* * invert a rectangle, used only to (un)draw the cursor. * - does a scanline at a time @@ -1258,27 +1271,27 @@ cg14_invert(struct cgfourteen_softc *sc, } words = (wi + pre + 3) >> 2; cnt = words - pwrds; - sx_write(sc->sc_sx, SX_QUEUED(7), 0xe0e0e0e0); /* four red pixels */ + for (line = 0; line < he; line++) { pptr = addr; /* load a whole scanline */ sta(pptr & ~7, ASI_SX, SX_LD(8, words - 1, pptr & 7)); reg = 8; if (pre) { - sx_write(sc->sc_sx, SX_QUEUED(R_MASK), lmask); + cg14_set_mask(sc, lmask); sx_write(sc->sc_sx, SX_INSTRUCTIONS, SX_ROPB(8, 8, 40, 0)); reg++; } if (cnt > 0) { - sx_write(sc->sc_sx, SX_QUEUED(R_MASK), 0xffffffff); + cg14_set_mask(sc, 0xffffffff); /* XXX handle cnt > 16 */ sx_write(sc->sc_sx, SX_INSTRUCTIONS, SX_ROP(reg, reg, reg + 32, cnt - 1)); reg += cnt; } if (post) { - sx_write(sc->sc_sx, SX_QUEUED(R_MASK), rmask); + cg14_set_mask(sc, rmask); sx_write(sc->sc_sx, SX_INSTRUCTIONS, SX_ROPB(reg, 7, reg + 32, 0)); reg++; @@ -1500,8 +1513,7 @@ cg14_putchar(void *cookie, int row, int uint32_t reg; for (i = 0; i < he; i++) { reg = *data8; - sx_write(sc->sc_sx, SX_QUEUED(R_MASK), - reg << 24); + cg14_set_mask(sc, reg << 24); sta(addr & ~7, ASI_SX, SX_STBS(8, wi - 1, addr & 7)); data8++; addr += stride; @@ -1513,8 +1525,7 @@ cg14_putchar(void *cookie, int row, int uint32_t reg; for (i = 0; i < he; i++) { reg = *data16; - sx_write(sc->sc_sx, SX_QUEUED(R_MASK), - reg << 16); + cg14_set_mask(sc, reg << 16); sta(addr & ~7, ASI_SX, SX_STBS(8, wi - 1, addr & 7)); data16++; addr += stride; Index: src/sys/arch/sparc/dev/cgfourteenvar.h diff -u src/sys/arch/sparc/dev/cgfourteenvar.h:1.18 src/sys/arch/sparc/dev/cgfourteenvar.h:1.19 --- src/sys/arch/sparc/dev/cgfourteenvar.h:1.18 Sat Apr 30 05:23:03 2016 +++ src/sys/arch/sparc/dev/cgfourteenvar.h Fri Dec 17 19:27:57 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: cgfourteenvar.h,v 1.18 2016/04/30 05:23:03 macallan Exp $ */ +/* $NetBSD: cgfourteenvar.h,v 1.19 2021/12/17 19:27:57 macallan Exp $ */ /* * Copyright (c) 1996 @@ -98,6 +98,7 @@ struct cgfourteen_softc { #if NSX > 0 struct sx_softc *sc_sx; uint32_t sc_fb_paddr; + uint32_t sc_mask; glyphcache sc_gc; #endif /* NSX > 0 */ #endif