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 <[email protected]>
@@ -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);
}