Module Name:    src
Committed By:   rin
Date:           Tue Jul 23 14:34:12 UTC 2019

Modified Files:
        src/sys/arch/arm/omap: tifb.c
        src/sys/arch/luna68k/dev: lunafb.c
        src/sys/dev/fdt: simplefb.c

Log Message:
For drivers whose framebuffer is located not page-aligned, permit
offset of mmap up to (length of framebuffer) + (page offset of base
address of framebuffer). This is necessary in order to map the
highest page of framebuffer correctly, see,
http://cvsweb.netbsd.org/bsdweb.cgi/xsrc/external/mit/xf86-video-wsfb/dist/src/wsfb_driver.c#rev1.35


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/omap/tifb.c
cvs rdiff -u -r1.39 -r1.40 src/sys/arch/luna68k/dev/lunafb.c
cvs rdiff -u -r1.7 -r1.8 src/sys/dev/fdt/simplefb.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/arm/omap/tifb.c
diff -u src/sys/arch/arm/omap/tifb.c:1.7 src/sys/arch/arm/omap/tifb.c:1.8
--- src/sys/arch/arm/omap/tifb.c:1.7	Wed Mar  1 16:27:25 2017
+++ src/sys/arch/arm/omap/tifb.c	Tue Jul 23 14:34:11 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: tifb.c,v 1.7 2017/03/01 16:27:25 skrll Exp $	*/
+/*	$NetBSD: tifb.c,v 1.8 2019/07/23 14:34:11 rin Exp $	*/
 
 /*
  * Copyright (c) 2010 Michael Lorenz
@@ -57,7 +57,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tifb.c,v 1.7 2017/03/01 16:27:25 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tifb.c,v 1.8 2019/07/23 14:34:11 rin Exp $");
 
 #include "opt_omap.h"
 
@@ -816,7 +816,8 @@ tifb_mmap(void *v, void *vs, off_t offse
 	struct tifb_softc *sc = vd->cookie;
 
 	/* 'regular' framebuffer mmap()ing */
-	if (offset < sc->sc_stride * sc->sc_pi->panel_height) {
+	if (offset >= 0 && offset < sc->sc_palettesize +
+	    sc->sc_stride * sc->sc_pi->panel_height) {
 		pa = bus_dmamem_mmap(sc->sc_dmat, sc->sc_dmamem, 1,
 		    offset, prot, BUS_DMA_PREFETCHABLE);
 		return pa;

Index: src/sys/arch/luna68k/dev/lunafb.c
diff -u src/sys/arch/luna68k/dev/lunafb.c:1.39 src/sys/arch/luna68k/dev/lunafb.c:1.40
--- src/sys/arch/luna68k/dev/lunafb.c:1.39	Sun Jun 30 05:04:48 2019
+++ src/sys/arch/luna68k/dev/lunafb.c	Tue Jul 23 14:34:11 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: lunafb.c,v 1.39 2019/06/30 05:04:48 tsutsui Exp $ */
+/* $NetBSD: lunafb.c,v 1.40 2019/07/23 14:34:11 rin Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: lunafb.c,v 1.39 2019/06/30 05:04:48 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lunafb.c,v 1.40 2019/07/23 14:34:11 rin Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -308,7 +308,8 @@ omfbmmap(void *v, void *vs, off_t offset
 #endif
 	case WSDISPLAYIO_MODE_DUMBFB:
 		if (offset >= 0 &&
-		    offset < dc->dc_rowbytes * dc->dc_ht * dc->dc_depth)
+		    offset < (m68k_page_offset(OMFB_FB_RADDR) +
+		    dc->dc_rowbytes * dc->dc_ht) * dc->dc_depth)
 			cookie = m68k_btop(m68k_trunc_page(OMFB_FB_RADDR) +
 			    offset);
 		break;

Index: src/sys/dev/fdt/simplefb.c
diff -u src/sys/dev/fdt/simplefb.c:1.7 src/sys/dev/fdt/simplefb.c:1.8
--- src/sys/dev/fdt/simplefb.c:1.7	Wed Jan 30 00:55:04 2019
+++ src/sys/dev/fdt/simplefb.c	Tue Jul 23 14:34:12 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: simplefb.c,v 1.7 2019/01/30 00:55:04 jmcneill Exp $ */
+/* $NetBSD: simplefb.c,v 1.8 2019/07/23 14:34:12 rin Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcne...@invisible.ca>
@@ -29,7 +29,7 @@
 #include "opt_wsdisplay_compat.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: simplefb.c,v 1.7 2019/01/30 00:55:04 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: simplefb.c,v 1.8 2019/07/23 14:34:12 rin Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -114,10 +114,11 @@ simplefb_mmap(void *v, void *vs, off_t o
 {
 	struct simplefb_softc * const sc = v;
 
-	if (off < 0 || off >= sc->sc_gen.sc_fbsize)
+	if (off < 0 || off >= (sc->sc_paddr & PAGE_MASK) +
+	    sc->sc_gen.sc_fbsize)
 		return -1;
 
-	return bus_space_mmap(sc->sc_bst, sc->sc_paddr, off, prot,
+	return bus_space_mmap(sc->sc_bst, trunc_page(sc->sc_paddr), off, prot,
 	    BUS_SPACE_MAP_LINEAR | BUS_SPACE_MAP_PREFETCHABLE);
 }
 

Reply via email to