Module Name: src
Committed By: matt
Date: Sun Oct 7 19:16:40 UTC 2012
Modified Files:
src/sys/arch/arm/broadcom: bcm53xx_board.c bcm53xx_var.h
Log Message:
Add bcm53xx_dma_bootstrap which, if there is more than 256MB of RAM, add two
ranges to the default dma tag. This has the side effect of making most initial
bus_dmamem_allocs trying to get memory from the first 256MB which is coherent
on this platform.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/broadcom/bcm53xx_board.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/broadcom/bcm53xx_var.h
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/broadcom/bcm53xx_board.c
diff -u src/sys/arch/arm/broadcom/bcm53xx_board.c:1.4 src/sys/arch/arm/broadcom/bcm53xx_board.c:1.5
--- src/sys/arch/arm/broadcom/bcm53xx_board.c:1.4 Wed Oct 3 19:18:40 2012
+++ src/sys/arch/arm/broadcom/bcm53xx_board.c Sun Oct 7 19:16:39 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: bcm53xx_board.c,v 1.4 2012/10/03 19:18:40 matt Exp $ */
+/* $NetBSD: bcm53xx_board.c,v 1.5 2012/10/07 19:16:39 matt Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -34,7 +34,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: bcm53xx_board.c,v 1.4 2012/10/03 19:18:40 matt Exp $");
+__KERNEL_RCSID(1, "$NetBSD: bcm53xx_board.c,v 1.5 2012/10/07 19:16:39 matt Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -67,6 +67,8 @@ bus_space_handle_t bcm53xx_armcore_bsh;
static struct cpu_softc cpu_softc;
static struct bcm53xx_clock_info clk_info;
+struct arm32_dma_range bcm53xx_dma_ranges[2];
+
struct arm32_bus_dma_tag bcm53xx_dma_tag = {
_BUS_DMAMAP_FUNCS,
_BUS_DMAMEM_FUNCS,
@@ -485,6 +487,26 @@ bcm53xx_bootstrap(vaddr_t iobase)
arml2cc_init(bcm53xx_armcore_bst, bcm53xx_armcore_bsh, ARMCORE_L2C_BASE);
}
+void
+bcm53xx_dma_bootstrap(psize_t memsize)
+{
+ if (memsize > 256*1024*1024) {
+ /*
+ * By setting up two ranges, bus_dmamem_alloc will always
+ * try to allocate from range 0 first resulting in allocations
+ * below 256MB which for PCI and GMAC are coherent.
+ */
+ bcm53xx_dma_ranges[0].dr_sysbase = 0x80000000;
+ bcm53xx_dma_ranges[0].dr_busbase = 0x80000000;
+ bcm53xx_dma_ranges[0].dr_len = 0x10000000;
+ bcm53xx_dma_ranges[1].dr_sysbase = 0x90000000;
+ bcm53xx_dma_ranges[1].dr_busbase = 0x90000000;
+ bcm53xx_dma_ranges[1].dr_len = memsize - 0x10000000;
+ bcm53xx_dma_tag._ranges = bcm53xx_dma_ranges;
+ bcm53xx_dma_tag._nranges = __arraycount(bcm53xx_dma_ranges);
+ }
+}
+
#ifdef MULTIPROCESSOR
void
bcm53xx_cpu_hatch(struct cpu_info *ci)
Index: src/sys/arch/arm/broadcom/bcm53xx_var.h
diff -u src/sys/arch/arm/broadcom/bcm53xx_var.h:1.2 src/sys/arch/arm/broadcom/bcm53xx_var.h:1.3
--- src/sys/arch/arm/broadcom/bcm53xx_var.h:1.2 Wed Oct 3 19:18:41 2012
+++ src/sys/arch/arm/broadcom/bcm53xx_var.h Sun Oct 7 19:16:39 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: bcm53xx_var.h,v 1.2 2012/10/03 19:18:41 matt Exp $ */
+/* $NetBSD: bcm53xx_var.h,v 1.3 2012/10/07 19:16:39 matt Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -106,6 +106,7 @@ bool bcm53xx_idm_device_init(const struc
bus_space_handle_t);
void bcm53xx_device_register(device_t, void *);
psize_t bcm53xx_memprobe(void);
+void bcm53xx_dma_bootstrap(psize_t);
void bcm53xx_print_clocks(void);
void bcm53xx_rng_start(bus_space_tag_t, bus_space_handle_t);
void bcm53xx_srab_init(void);