Module Name: src Committed By: macallan Date: Sun Jan 26 11:21:21 UTC 2025
Modified Files: src/sys/arch/hppa/dev: summitfb.c Log Message: some minor updates: - clear image planes before they become visible when switching to fb mode - adjust FIFO slots, now that we knw a bit more about how they work To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 src/sys/arch/hppa/dev/summitfb.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/hppa/dev/summitfb.c diff -u src/sys/arch/hppa/dev/summitfb.c:1.28 src/sys/arch/hppa/dev/summitfb.c:1.29 --- src/sys/arch/hppa/dev/summitfb.c:1.28 Tue Jan 7 05:36:35 2025 +++ src/sys/arch/hppa/dev/summitfb.c Sun Jan 26 11:21:21 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: summitfb.c,v 1.28 2025/01/07 05:36:35 riastradh Exp $ */ +/* $NetBSD: summitfb.c,v 1.29 2025/01/26 11:21:21 macallan Exp $ */ /* $OpenBSD: sti_pci.c,v 1.7 2009/02/06 22:51:04 miod Exp $ */ @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: summitfb.c,v 1.28 2025/01/07 05:36:35 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: summitfb.c,v 1.29 2025/01/26 11:21:21 macallan Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -60,8 +60,6 @@ __KERNEL_RCSID(0, "$NetBSD: summitfb.c,v #define DPRINTF(s) __nothing #endif -//#define SUMMITFB_ENABLE_GC - int summitfb_match(device_t, cfdata_t, void *); void summitfb_attach(device_t, device_t, void *); @@ -139,7 +137,7 @@ static int summitfb_putpalreg(struct su uint8_t, uint8_t); static inline void summitfb_setup_fb(struct summitfb_softc *); - +static void summitfb_clearfb(struct summitfb_softc *); static void summitfb_rectfill(struct summitfb_softc *, int, int, int, int, uint32_t); static void summitfb_bitblt(void *, int, int, int, int, int, @@ -687,7 +685,6 @@ summitfb_setup_fb(struct summitfb_softc summitfb_write4(sc, VISFX_OTR, OTR_A); // all transparent } summitfb_write4(sc, VISFX_IBO, RopSrc); - //summitfb_write4(sc, VISFX_CONTROL, CONTROL_WFC); } void @@ -707,7 +704,7 @@ summitfb_setup(struct summitfb_softc *sc summitfb_write4(sc, 0xb08048, 0x1b); /* MFU_BSCCTL */ summitfb_write4(sc, 0x920860, 0xe4); /* FBC_RBS */ - summitfb_write4(sc, 0x921114, 0); /* CPE, ckip plane enable */ + summitfb_write4(sc, 0x921114, 0); /* CPE, clip plane enable */ summitfb_write4(sc, 0x9211d8, 0); /* FCDA */ summitfb_write4(sc, 0xa00818, 0); /* WORG window origin */ @@ -724,7 +721,7 @@ summitfb_setup(struct summitfb_softc *sc summitfb_write4(sc, VISFX_FOE, FOE_BLEND_ROP); summitfb_write4(sc, VISFX_IBO, RopSrc); summitfb_write_mode(sc, VISFX_WRITE_MODE_PLAIN); - summitfb_read_mode(sc, OTC01 | BIN8F | BUFFL); + summitfb_read_mode(sc, OTC04 | BIN8I | BUFovl); summitfb_write4(sc, VISFX_CLIP_TL, 0); summitfb_write4(sc, VISFX_CLIP_WH, ((sc->sc_scr.fbwidth) << 16) | (sc->sc_scr.fbheight)); @@ -749,9 +746,10 @@ summitfb_setup(struct summitfb_softc *sc /* zero the attribute plane */ summitfb_write_mode(sc, OTC04 | BINapln); - summitfb_wait_fifo(sc, 4); + summitfb_wait_fifo(sc, 12); summitfb_write4(sc, VISFX_PLANE_MASK, 0xff); summitfb_write4(sc, VISFX_IBO, 0); /* GXclear */ + summitfb_write4(sc, VISFX_FG_COLOUR, 0); summitfb_write4(sc, VISFX_START, 0); summitfb_write4(sc, VISFX_SIZE, (sc->sc_width << 16) | sc->sc_height); summitfb_wait(sc); @@ -828,7 +826,8 @@ summitfb_ioctl(void *v, void *vs, u_long (ms->scr_defattr >> 16) & 0xff]); vcons_redraw_screen(ms); summitfb_set_video(sc, 1); - } + } else + summitfb_clearfb(sc); summitfb_setup_fb(sc); } return 0; @@ -1070,12 +1069,23 @@ summitfb_wait_fifo(struct summitfb_softc } static void +summitfb_clearfb(struct summitfb_softc *sc) +{ + summitfb_write_mode(sc, OTC32 | BIN8F | BUFBL | BUFFL | 0x8c0); + summitfb_wait_fifo(sc, 10); + summitfb_write4(sc, VISFX_IBO, RopSrc); + summitfb_write4(sc, VISFX_FG_COLOUR, 0); + summitfb_write4(sc, VISFX_START, 0); + summitfb_write4(sc, VISFX_SIZE, (sc->sc_width << 16) | sc->sc_height); +} + +static void summitfb_rectfill(struct summitfb_softc *sc, int x, int y, int wi, int he, uint32_t bg) { summitfb_write_mode(sc, VISFX_WRITE_MODE_FILL); - summitfb_wait_fifo(sc, 4); + summitfb_wait_fifo(sc, 10); summitfb_write4(sc, VISFX_IBO, RopSrc); summitfb_write4(sc, VISFX_FG_COLOUR, bg); summitfb_write4(sc, VISFX_START, (x << 16) | y); @@ -1101,7 +1111,7 @@ summitfb_bitblt(void *cookie, int xs, in } summitfb_write_mode(sc, write_mode); summitfb_read_mode(sc, read_mode); - summitfb_wait_fifo(sc, 4); + summitfb_wait_fifo(sc, 10); summitfb_write4(sc, VISFX_IBO, rop); summitfb_write4(sc, VISFX_COPY_SRC, (xs << 16) | ys); summitfb_write4(sc, VISFX_COPY_WH, (wi << 16) | he); @@ -1195,7 +1205,7 @@ summitfb_putchar(void *cookie, int row, fg = ri->ri_devcmap[(attr >> 24) & 0x0f]; summitfb_write_mode(sc, VISFX_WRITE_MODE_EXPAND); - summitfb_wait_fifo(sc, 6); + summitfb_wait_fifo(sc, 12); summitfb_write4(sc, VISFX_IBO, RopSrc); summitfb_write4(sc, VISFX_FG_COLOUR, fg); summitfb_write4(sc, VISFX_BG_COLOUR, bg); @@ -1237,6 +1247,7 @@ summitfb_loadfont(struct summitfb_softc return; summitfb_write_mode(sc, VISFX_WRITE_MODE_EXPAND); + summitfb_wait_fifo(sc, 10); summitfb_write4(sc, VISFX_IBO, RopSrc); summitfb_write4(sc, VISFX_FG_COLOUR, 0xffffffff); summitfb_write4(sc, VISFX_BG_COLOUR, 0); @@ -1311,7 +1322,7 @@ summitfb_putchar_fast(void *cookie, int fg = ri->ri_devcmap[(attr >> 24) & 0x0f]; summitfb_write_mode(sc, 0x050000c0); - summitfb_wait_fifo(sc, 6); + summitfb_wait_fifo(sc, 8); summitfb_write4(sc, VISFX_IBO, RopSrc); summitfb_write4(sc, VISFX_FG_COLOUR, fg); summitfb_write4(sc, VISFX_BG_COLOUR, bg); @@ -1320,6 +1331,7 @@ summitfb_putchar_fast(void *cookie, int xs = sc->sc_font_start + (i % sc->sc_cols) * sc->sc_font->fontwidth; ys = (i / sc->sc_cols) * sc->sc_font->fontheight; + summitfb_wait_fifo(sc, 8); summitfb_write4(sc, VISFX_COPY_SRC, (xs << 16) | ys); summitfb_write4(sc, VISFX_COPY_WH, (wi << 16) | he); summitfb_write4(sc, VISFX_COPY_DST, (x << 16) | y); @@ -1364,7 +1376,6 @@ summitfb_putchar_aa(void *cookie, int ro return; summitfb_setup_fb(sc); - summitfb_wait(sc); sc->sc_putchar(cookie, row, col, c, attr); if (rv == GC_ADD)