Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-9]: src/sys/arch/arm/sunxi Pull up following revision(s) (request...
details: https://anonhg.NetBSD.org/src/rev/e397b259d032
branches: netbsd-9
changeset: 1001309:e397b259d032
user: martin <martin%NetBSD.org@localhost>
date: Tue Dec 17 12:39:33 2019 +0000
description:
Pull up following revision(s) (requested by jmcneill in ticket #562):
sys/arch/arm/sunxi/sunxi_drm.c: revision 1.11
Make sure memory stolen from simplefb is page aligned.
diffstat:
sys/arch/arm/sunxi/sunxi_drm.c | 25 +++++++++++++++++++++----
1 files changed, 21 insertions(+), 4 deletions(-)
diffs (60 lines):
diff -r 360aa5a80950 -r e397b259d032 sys/arch/arm/sunxi/sunxi_drm.c
--- a/sys/arch/arm/sunxi/sunxi_drm.c Tue Dec 17 12:38:16 2019 +0000
+++ b/sys/arch/arm/sunxi/sunxi_drm.c Tue Dec 17 12:39:33 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_drm.c,v 1.7.6.3 2019/12/17 12:35:12 martin Exp $ */
+/* $NetBSD: sunxi_drm.c,v 1.7.6.4 2019/12/17 12:39:33 martin Exp $ */
/*-
* Copyright (c) 2019 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunxi_drm.c,v 1.7.6.3 2019/12/17 12:35:12 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunxi_drm.c,v 1.7.6.4 2019/12/17 12:39:33 martin Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -53,6 +53,14 @@
#define SUNXI_DRM_MAX_WIDTH 3840
#define SUNXI_DRM_MAX_HEIGHT 2160
+/*
+ * The DRM headers break trunc_page/round_page macros with a redefinition
+ * of PAGE_MASK. Use our own macros instead.
+ */
+#define SUNXI_PAGE_MASK (PAGE_SIZE - 1)
+#define SUNXI_TRUNC_PAGE(x) ((x) & ~SUNXI_PAGE_MASK)
+#define SUNXI_ROUND_PAGE(x) (((x) + SUNXI_PAGE_MASK) & ~SUNXI_PAGE_MASK)
+
static TAILQ_HEAD(, sunxi_drm_endpoint) sunxi_drm_endpoints =
TAILQ_HEAD_INITIALIZER(sunxi_drm_endpoints);
@@ -299,7 +307,8 @@
sunxi_drm_simplefb_lookup(bus_addr_t *paddr, bus_size_t *psize)
{
static const char * compat[] = { "simple-framebuffer", NULL };
- int chosen, child;
+ int chosen, child, error;
+ bus_addr_t addr_end;
chosen = OF_finddevice("/chosen");
if (chosen == -1)
@@ -310,7 +319,15 @@
continue;
if (!of_match_compatible(child, compat))
continue;
- return fdtbus_get_reg(child, 0, paddr, psize);
+ error = fdtbus_get_reg(child, 0, paddr, psize);
+ if (error != 0)
+ return error;
+
+ /* Reclaim entire pages used by the simplefb */
+ addr_end = *paddr + *psize;
+ *paddr = SUNXI_TRUNC_PAGE(*paddr);
+ *psize = SUNXI_ROUND_PAGE(addr_end - *paddr);
+ return 0;
}
return ENOENT;
Home |
Main Index |
Thread Index |
Old Index