Module Name:    src
Committed By:   skrll
Date:           Sun Apr  6 12:43:19 UTC 2014

Modified Files:
        src/sys/arch/evbarm/conf: std.rpi
        src/sys/arch/evbarm/rpi: rpi.h rpi_machdep.c

Log Message:
Re-arrange RPI VM layout and enable __HAVE_MM_MD_DIRECT_MAPPED_PHYS.  RPI
kernels now boot again.

I'm not admitting defeat in why there are problems with the
non-__HAVE_MM_MD_DIRECT_MAPPED_PHYS case.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/evbarm/conf/std.rpi
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/evbarm/rpi/rpi.h
cvs rdiff -u -r1.40 -r1.41 src/sys/arch/evbarm/rpi/rpi_machdep.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/evbarm/conf/std.rpi
diff -u src/sys/arch/evbarm/conf/std.rpi:1.13 src/sys/arch/evbarm/conf/std.rpi:1.14
--- src/sys/arch/evbarm/conf/std.rpi:1.13	Tue Feb 25 19:37:30 2014
+++ src/sys/arch/evbarm/conf/std.rpi	Sun Apr  6 12:43:18 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: std.rpi,v 1.13 2014/02/25 19:37:30 skrll Exp $
+#	$NetBSD: std.rpi,v 1.14 2014/04/06 12:43:18 skrll Exp $
 #
 # standard NetBSD/evbarm for Raspberry Pi options
 
@@ -13,6 +13,7 @@ options 	ARM11_COMPAT_MMU
 options 	__HAVE_CPU_COUNTER
 options 	__HAVE_FAST_SOFTINTS		# should be in types.h
 options 	__HAVE_CPU_UAREA_ALLOC_IDLELWP
+options 	__HAVE_MM_MD_DIRECT_MAPPED_PHYS
 options 	TPIDRPRW_IS_CURCPU
 options 	ARM_HAS_VBAR
 options 	KERNEL_BASE_EXT=0xc0000000

Index: src/sys/arch/evbarm/rpi/rpi.h
diff -u src/sys/arch/evbarm/rpi/rpi.h:1.2 src/sys/arch/evbarm/rpi/rpi.h:1.3
--- src/sys/arch/evbarm/rpi/rpi.h:1.2	Thu Sep  5 07:09:33 2013
+++ src/sys/arch/evbarm/rpi/rpi.h	Sun Apr  6 12:43:19 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: rpi.h,v 1.2 2013/09/05 07:09:33 skrll Exp $	*/
+/*	$NetBSD: rpi.h,v 1.3 2014/04/06 12:43:19 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
 /*
  * Kernel VM space: KERNEL_VM_BASE to 0xf0000000
  */
-#define	KERNEL_VM_BASE		(KERNEL_BASE + 0x01000000)
+#define	KERNEL_VM_BASE		(KERNEL_BASE + 0x20000000)
 #define	KERNEL_VM_SIZE		(0xf0000000 - KERNEL_VM_BASE)
 
 /*

Index: src/sys/arch/evbarm/rpi/rpi_machdep.c
diff -u src/sys/arch/evbarm/rpi/rpi_machdep.c:1.40 src/sys/arch/evbarm/rpi/rpi_machdep.c:1.41
--- src/sys/arch/evbarm/rpi/rpi_machdep.c:1.40	Tue Apr  1 06:55:29 2014
+++ src/sys/arch/evbarm/rpi/rpi_machdep.c	Sun Apr  6 12:43:19 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: rpi_machdep.c,v 1.40 2014/04/01 06:55:29 skrll Exp $	*/
+/*	$NetBSD: rpi_machdep.c,v 1.41 2014/04/06 12:43:19 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rpi_machdep.c,v 1.40 2014/04/01 06:55:29 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rpi_machdep.c,v 1.41 2014/04/06 12:43:19 skrll Exp $");
 
 #include "opt_evbarm_boardtype.h"
 #include "opt_ddb.h"
@@ -537,11 +537,41 @@ initarm(void *arg)
 #ifdef VERBOSE_INIT_ARM
 	printf("initarm: Configuring system ...\n");
 #endif
-	arm32_bootmem_init(bootconfig.dram[0].address,
-	    bootconfig.dram[0].pages * PAGE_SIZE, (uintptr_t)KERNEL_BASE_phys);
+
+	psize_t ram_size = bootconfig.dram[0].pages * PAGE_SIZE;
+
+#ifdef __HAVE_MM_MD_DIRECT_MAPPED_PHYS
+	if (ram_size > KERNEL_VM_BASE - KERNEL_BASE) {
+		printf("%s: dropping RAM size from %luMB to %uMB\n",
+		    __func__, (unsigned long) (ram_size >> 20),
+		    (KERNEL_VM_BASE - KERNEL_BASE) >> 20);
+		ram_size = KERNEL_VM_BASE - KERNEL_BASE;
+	}
+#endif
+
+	/*
+	 * If MEMSIZE specified less than what we really have, limit ourselves
+	 * to that.
+	 */
+#ifdef MEMSIZE
+	if (ram_size == 0 || ram_size > (unsigned)MEMSIZE * 1024 * 1024)
+		ram_size = (unsigned)MEMSIZE * 1024 * 1024;
+#else
+	KASSERTMSG(ram_size > 0, "RAM size unknown and MEMSIZE undefined");
+#endif
+
+	arm32_bootmem_init(bootconfig.dram[0].address, ram_size,
+	    (uintptr_t)KERNEL_BASE_phys);
+
+#ifdef __HAVE_MM_MD_DIRECT_MAPPED_PHYS
+	const bool mapallmem_p = true;
+	KASSERT(ram_size <= KERNEL_VM_BASE - KERNEL_BASE);
+#else
+	const bool mapallmem_p = false;
+#endif
 
 	arm32_kernel_vm_init(KERNEL_VM_BASE, ARM_VECTORS_HIGH, 0, rpi_devmap,
-	    false);
+	    mapallmem_p);
 
 	cpu_reset_address = bcm2835_system_reset;
 

Reply via email to