Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch Provide bs_mmap implementations for bcm283x based b...
details: https://anonhg.NetBSD.org/src/rev/8e769ec81780
branches: trunk
changeset: 319734:8e769ec81780
user: jmcneill <jmcneill%NetBSD.org@localhost>
date: Fri Jun 08 18:09:43 2018 +0000
description:
Provide bs_mmap implementations for bcm283x based boards.
PR: port-arm/53283
Submitted by: Nick Hudson
diffstat:
sys/arch/aarch64/aarch64/bus_space.c | 10 +++---
sys/arch/aarch64/include/pmap.h | 11 ++++---
sys/arch/arm/broadcom/bcm283x_platform.c | 47 +++++++++++++++++++++++++++----
3 files changed, 52 insertions(+), 16 deletions(-)
diffs (156 lines):
diff -r 85d9190bb58d -r 8e769ec81780 sys/arch/aarch64/aarch64/bus_space.c
--- a/sys/arch/aarch64/aarch64/bus_space.c Fri Jun 08 14:44:21 2018 +0000
+++ b/sys/arch/aarch64/aarch64/bus_space.c Fri Jun 08 18:09:43 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: bus_space.c,v 1.3 2018/04/09 22:26:15 jmcneill Exp $ */
+/* $NetBSD: bus_space.c,v 1.4 2018/06/08 18:09:43 jmcneill Exp $ */
/*
* Copyright (c) 2017 Ryo Shimizu <ryo%nerv.org@localhost>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: bus_space.c,v 1.3 2018/04/09 22:26:15 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: bus_space.c,v 1.4 2018/06/08 18:09:43 jmcneill Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -616,11 +616,11 @@
paddr_t bus_flags = 0;
if ((flags & BUS_SPACE_MAP_CACHEABLE) != 0)
- bus_flags |= (AARCH64_MMAP_WRITEBACK << AARCH64_MMAP_FLAG_SHIFT);
+ bus_flags |= ARM_MMAP_WRITEBACK;
else if ((flags & BUS_SPACE_MAP_PREFETCHABLE) != 0)
- bus_flags |= (AARCH64_MMAP_WRITECOMBINE << AARCH64_MMAP_FLAG_SHIFT);
+ bus_flags |= ARM_MMAP_WRITECOMBINE;
else
- bus_flags |= (AARCH64_MMAP_DEVICE << AARCH64_MMAP_FLAG_SHIFT);
+ bus_flags |= ARM_MMAP_DEVICE;
return (atop(bpa + (offset << ((struct bus_space *)t)->bs_stride)) |
bus_flags);
diff -r 85d9190bb58d -r 8e769ec81780 sys/arch/aarch64/include/pmap.h
--- a/sys/arch/aarch64/include/pmap.h Fri Jun 08 14:44:21 2018 +0000
+++ b/sys/arch/aarch64/include/pmap.h Fri Jun 08 18:09:43 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.h,v 1.4 2018/04/27 08:07:08 ryo Exp $ */
+/* $NetBSD: pmap.h,v 1.5 2018/06/08 18:09:43 jmcneill Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -150,10 +150,11 @@
#define AARCH64_MMAP_WRITECOMBINE 2UL
#define AARCH64_MMAP_DEVICE 3UL
-#define ARM_MMAP_WRITECOMBINE AARCH64_MMAP_WRITECOMBINE
-#define ARM_MMAP_WRITEBACK AARCH64_MMAP_WRITEBACK
-#define ARM_MMAP_NOCACHE AARCH64_MMAP_NOCACHE
-#define ARM_MMAP_DEVICE AARCH64_MMAP_DEVICE
+#define ARM_MMAP_MASK __BITS(63, AARCH64_MMAP_FLAG_SHIFT)
+#define ARM_MMAP_WRITECOMBINE __SHIFTIN(AARCH64_MMAP_WRITECOMBINE, ARM_MMAP_MASK)
+#define ARM_MMAP_WRITEBACK __SHIFTIN(AARCH64_MMAP_WRITEBACK, ARM_MMAP_MASK)
+#define ARM_MMAP_NOCACHE __SHIFTIN(AARCH64_MMAP_NOCACHE, ARM_MMAP_MASK)
+#define ARM_MMAP_DEVICE __SHIFTIN(AARCH64_MMAP_DEVICE, ARM_MMAP_MASK)
#define PMAP_PTE 0x10000000 /* kenter_pa */
#define PMAP_DEV 0x20000000 /* kenter_pa */
diff -r 85d9190bb58d -r 8e769ec81780 sys/arch/arm/broadcom/bcm283x_platform.c
--- a/sys/arch/arm/broadcom/bcm283x_platform.c Fri Jun 08 14:44:21 2018 +0000
+++ b/sys/arch/arm/broadcom/bcm283x_platform.c Fri Jun 08 18:09:43 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: bcm283x_platform.c,v 1.4 2018/04/01 04:35:03 ryo Exp $ */
+/* $NetBSD: bcm283x_platform.c,v 1.5 2018/06/08 18:09:43 jmcneill Exp $ */
/*-
* Copyright (c) 2017 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.4 2018/04/01 04:35:03 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.5 2018/06/08 18:09:43 jmcneill Exp $");
#include "opt_arm_debug.h"
#include "opt_bcm283x.h"
@@ -136,6 +136,8 @@
struct bus_space bcm2836_a4x_bs_tag;
int bcm283x_bs_map(void *, bus_addr_t, bus_size_t, int, bus_space_handle_t *);
+paddr_t bcm283x_bs_mmap(void *, bus_addr_t, off_t, int, int);
+paddr_t bcm283x_a4x_bs_mmap(void *, bus_addr_t, off_t, int, int);
int
bcm283x_bs_map(void *t, bus_addr_t ba, bus_size_t size, int flag,
@@ -159,10 +161,13 @@
*bshp = (bus_space_handle_t)(va + (pa - startpa));
- const int pmapflags =
- (flag & (BUS_SPACE_MAP_CACHEABLE|BUS_SPACE_MAP_PREFETCHABLE))
- ? 0
- : PMAP_NOCACHE;
+ int pmapflags;
+ if (flag & BUS_SPACE_MAP_PREFETCHABLE)
+ pmapflags = PMAP_WRITE_COMBINE;
+ else if (flag & BUS_SPACE_MAP_CACHEABLE)
+ pmapflags = 0;
+ else
+ pmapflags = PMAP_NOCACHE;
for (pa = startpa; pa < endpa; pa += PAGE_SIZE, va += PAGE_SIZE) {
pmap_kenter_pa(va, pa, VM_PROT_READ | VM_PROT_WRITE, pmapflags);
}
@@ -171,6 +176,32 @@
return 0;
}
+paddr_t
+bcm283x_bs_mmap(void *t, bus_addr_t bpa, off_t offset, int prot, int flags)
+{
+ /* Convert BA to PA */
+ const paddr_t pa = bpa & ~BCM2835_BUSADDR_CACHE_MASK;
+ paddr_t bus_flags = 0;
+
+ if (flags & BUS_SPACE_MAP_PREFETCHABLE)
+ bus_flags |= ARM_MMAP_WRITECOMBINE;
+
+ return arm_btop(pa + offset) | bus_flags;
+}
+
+paddr_t
+bcm283x_a4x_bs_mmap(void *t, bus_addr_t bpa, off_t offset, int prot, int flags)
+{
+ /* Convert BA to PA */
+ const paddr_t pa = bpa & ~BCM2835_BUSADDR_CACHE_MASK;
+ paddr_t bus_flags = 0;
+
+ if (flags & BUS_SPACE_MAP_PREFETCHABLE)
+ bus_flags |= ARM_MMAP_WRITECOMBINE;
+
+ return arm_btop(pa + 4 * offset) | bus_flags;
+}
+
int
bcm2835_bs_map(void *t, bus_addr_t ba, bus_size_t size, int flag,
bus_space_handle_t *bshp)
@@ -1163,7 +1194,9 @@
bcm2835_a4x_bs_tag = arm_generic_a4x_bs_tag;
bcm2835_bs_tag.bs_map = bcm2835_bs_map;
+ bcm2835_bs_tag.bs_mmap = bcm283x_bs_mmap;
bcm2835_a4x_bs_tag.bs_map = bcm2835_bs_map;
+ bcm2835_a4x_bs_tag.bs_mmap = bcm283x_a4x_bs_mmap;
fdtbus_set_decoderegprop(false);
@@ -1182,7 +1215,9 @@
bcm2836_a4x_bs_tag = arm_generic_a4x_bs_tag;
bcm2836_bs_tag.bs_map = bcm2836_bs_map;
+ bcm2836_bs_tag.bs_mmap = bcm283x_bs_mmap;
bcm2836_a4x_bs_tag.bs_map = bcm2836_bs_map;
+ bcm2836_a4x_bs_tag.bs_mmap = bcm283x_a4x_bs_mmap;
fdtbus_set_decoderegprop(false);
Home |
Main Index |
Thread Index |
Old Index