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)