Module Name: src Committed By: tsutsui Date: Mon Apr 29 15:34:57 UTC 2024
Modified Files: src/sys/arch/hp300/dev: diofb.c topcat.c Log Message: Move a check of topcat(4) specific fb width quirks to topcat.c. We need to check fb->planes but it's propbed in topcat.c after common diofb_fbinquire() is called. Also add a comment that it looks these 1 bpp and 4 bpp boards have VRAM with sparse address layout and we have to handle 512 pixels per line with 1024 bytes per line. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/arch/hp300/dev/diofb.c cvs rdiff -u -r1.6 -r1.7 src/sys/arch/hp300/dev/topcat.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/hp300/dev/diofb.c diff -u src/sys/arch/hp300/dev/diofb.c:1.7 src/sys/arch/hp300/dev/diofb.c:1.8 --- src/sys/arch/hp300/dev/diofb.c:1.7 Sat Aug 7 16:18:53 2021 +++ src/sys/arch/hp300/dev/diofb.c Mon Apr 29 15:34:57 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: diofb.c,v 1.7 2021/08/07 16:18:53 thorpej Exp $ */ +/* $NetBSD: diofb.c,v 1.8 2024/04/29 15:34:57 tsutsui Exp $ */ /* $OpenBSD: diofb.c,v 1.18 2010/12/26 15:40:59 miod Exp $ */ /* @@ -146,15 +146,6 @@ diofb_fbinquire(struct diofb *fb, int sc if (fb->dheight > fb->fbheight) fb->dheight = fb->fbheight; - /* - * Some displays, such as the HP332 and HP340 internal video - * appear to return a display width of 1024 instead of 512. - */ - if (fbr->num_planes == 1 || fbr->num_planes == 4) { - if (fb->dwidth == 1024 && fb->dheight == 400) - fb->dwidth = 512; - } - fb->planes = fbr->num_planes; if (fb->planes > 8) fb->planes = 8; Index: src/sys/arch/hp300/dev/topcat.c diff -u src/sys/arch/hp300/dev/topcat.c:1.6 src/sys/arch/hp300/dev/topcat.c:1.7 --- src/sys/arch/hp300/dev/topcat.c:1.6 Wed Nov 30 11:36:50 2022 +++ src/sys/arch/hp300/dev/topcat.c Mon Apr 29 15:34:57 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: topcat.c,v 1.6 2022/11/30 11:36:50 tsutsui Exp $ */ +/* $NetBSD: topcat.c,v 1.7 2024/04/29 15:34:57 tsutsui Exp $ */ /* $OpenBSD: topcat.c,v 1.15 2006/08/11 18:33:13 miod Exp $ */ /* @@ -344,6 +344,19 @@ topcat_reset(struct diofb *fb, int scode fb->planemask = (1 << fb->planes) - 1; } + /* + * Some displays, such as the HP332 and HP340 internal video + * and HP98542/98543 appear to return a display width of 1024 + * instead of 512. + * + * It looks these boards have VRAM with sparse address layout, + * i.e. 1 bit or 4 bits per pixel but 2 bytes per pixel, so + * we have to handle 512 pixels per line with 1024 bytes per line. + */ + if (fb->planes <= 4 && fb->dwidth == 1024 && fb->dheight == 400) { + fb->dwidth = 512; + } + fb->bmv = topcat_windowmove; topcat_restore(fb); diofb_fbsetup(fb);