Mon Jun 17 04:39:49 2013 UTC ()
Use <arm/cortex/a9_mpsubr.S> for the PANDABOARD as well as using
its cpuinit and l1pt init routines.
Add support for printing progress chars.


(matt)
diff -r1.15 -r1.16 src/sys/arch/evbarm/beagle/beagle_start.S
diff -r0 -r1.1 src/sys/arch/evbarm/beagle/genassym.cf

cvs diff -r1.15 -r1.16 src/sys/arch/evbarm/beagle/Attic/beagle_start.S (expand / switch to context diff)
--- src/sys/arch/evbarm/beagle/Attic/beagle_start.S 2013/06/16 17:57:21 1.15
+++ src/sys/arch/evbarm/beagle/Attic/beagle_start.S 2013/06/17 04:39:48 1.16
@@ -84,25 +84,36 @@
 
 #include "opt_omap.h"
 #include "opt_com.h"
+#include "opt_cpuoptions.h"
+#include "opt_cputypes.h"
+#include "opt_multiprocessor.h"
 
-#include <machine/asm.h>
+#include <arm/asm.h>
 #include <arm/armreg.h>
 #include "assym.h"
 
 #include <arm/omap/omap2_obioreg.h>
 #include <evbarm/beagle/beagle.h>  
 
-#ifdef MEMSIZE
-#define INIT_MEMSIZE	MEMSIZE
-#else
-#define INIT_MEMSIZE	128
+#ifdef CPU_CORTEXA9
+#include <arm/cortex/a9tmr_reg.h>
 #endif
 
-RCSID("$NetBSD: beagle_start.S,v 1.15 2013/06/16 17:57:21 matt Exp $")
+RCSID("$NetBSD: beagle_start.S,v 1.16 2013/06/17 04:39:48 matt Exp $")
 
-#define Invalidate_I_cache(reg) \
-	mcr	p15, 0, reg, c7, c5, 0	/* Invalidate Entire I cache */
+#undef VERBOSE_INIT_ARM
+#define VERBOSE_INIT_ARM
+#if defined(VERBOSE_INIT_ARM)
+#define	XPUTC(n)	mov r0, n; bl xputc
+#define COM_MULT	4
+#define XPUTC_COM	1
+#else
+#define	XPUTC(n)
+#endif
 
+#define INIT_MEMSIZE	128
+#define	TEMP_L1_TABLE	(0x80000000 + INIT_MEMSIZE * 0x100000 - L1_TABLE_SIZE)
+
 /*
  * Kernel start routine for BEAGLEBOARD boards.
  * At this point, this code has been loaded into SDRAM
@@ -115,106 +126,41 @@
 	/* Move into supervisor mode and disable IRQs/FIQs. */
 	cpsid	if, #PSR_SVC32_MODE
 
-	ldr	r4, .Luboot_args
+	/*
+	 * Save any arguments passed to us.
+	 */
+	movw	r4, #:lower16:uboot_args
+	movt	r4, #:upper16:uboot_args
 	stmia	r4, {r0-r3}
 
+#ifdef CPU_CORTEXA9
 	/*
-	 * Set up a preliminary mapping in the MMU to allow us to run
-	 * at KERNEL_BASE with caches on.
+	 * Turn on the SCU if we are on a Cortex-A9
 	 */
-	/* Build page table from scratch */
-	ldr	r0, Ltemp_l1_table
-	mov	r1, r0			/* Save the page table address. */
-	/* Zero the entire table so all virtual addresses are invalid. */
-	mov	r2, #L1_TABLE_SIZE	/* in bytes */
-	mov	r3, #0
-	mov	r4, r3
-	mov	r5, r3
-	mov	r6, r3
-	mov	r7, r3
-	mov	r8, r3
-	mov	r10, r3
-	mov	r11, r3
-1:	stmia	r1!, {r3-r8,r10-r11}
-	stmia	r1!, {r3-r8,r10-r11}
-	stmia	r1!, {r3-r8,r10-r11}
-	stmia	r1!, {r3-r8,r10-r11}
-	subs	r2, r2, #(4 * 4 * 8)	/* bytes per loop */
-	bne	1b
+	bl	a9_start
+	XPUTC(#67)
+#endif
 
-	/* Now create our entries per the mmu_init_table. */
-	l1table	.req r0
-	va	.req r1
-	pa	.req r2
-	n_sec	.req r3
-	attr	.req r4
-	itable	.req r5
-	l1sfrm	.req r6
-	adr	itable, mmu_init_table
-	ldr	l1sfrm, Ll1_s_frame
-	b	3f
-2:	str	pa, [l1table, va, lsl #2]
-	add	va, va, #1
-	add	pa, pa, #(L1_S_SIZE)
-	adds	n_sec, n_sec, #-1
-	bhi	2b
-3:	ldmia	itable!, {va,pa,n_sec,attr}
-	/* Convert va to l1 offset:	va = 4 * (va >> L1_S_SHIFT)	*/
-	lsr	va, va, #L1_S_SHIFT
-	/* Convert pa to l1 entry:	pa = (pa & L1_S_FRAME) | attr	*/
-	and	pa, pa, l1sfrm
-	orr	pa, pa, attr
-	cmp	n_sec, #0
-	bne	2b
-	.unreq	va
-	.unreq	pa
-	.unreq	n_sec
-	.unreq	attr
-	.unreq	itable
-	.unreq	l1table
-	.unreq	l1sfrm
-
 	/*
-	 * In theory, because the MMU is off, we shouldn't need all of this,
-	 * but let's not take any chances and do a typical sequence to set
-	 * the Translation Table Base.
+	 * Set up a preliminary mapping in the MMU to allow us to run
+	 * at KERNEL_BASE with caches on.
 	 */
+	movw	r0, #:lower16:TEMP_L1_TABLE
+	movt	r0, #:upper16:TEMP_L1_TABLE
+	adr	r1, .Lmmu_init_table
+	bl	arm_boot_l1pt_init
 
-	Invalidate_I_cache(r0)
+	XPUTC(#68)
 
-        ldr     r2, Lctl_ID_dis		/* Disable I+D caches */
-	mrc	p15, 0, r1, c1, c0, 0	/*  "       "   "     */
-	and	r1, r1, r2		/*  "       "   "     */
-	mcr	p15, 0, r1, c1, c0, 0	/*  "       "   "     */
-
-	mcr	p15, 0, r0, c7, c10, 4	/* Drain the write buffers. */
-	mcr	p15, 0, r0, c2, c0, 0	/* Set Translation Table Base */
-	mcr	p15, 0, r0, c8, c7, 0	/* Invalidate TLBs */
-
-	/* Set the Domain Access register.  Very important! */
-        mov     r0, #((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2)) | DOMAIN_CLIENT)
-	mcr	p15, 0, r0, c3, c0, 0
-
 	/*
-	 * Enable the MMU, etc.
+	 * Turn on the MMU, Caches, etc.
 	 */
-	mrc     p15, 0, r0, c1, c0, 0
-	ldr     r1, Lcontrol_wax
-	and	r0, r0, r1
-	ldr     r1, Lcontrol_clr
-	mvn	r1, r1
-	and	r0, r0, r1
-	ldr     r1, Lcontrol_set
-	orr	r0, r0, r1
-	mcr     p15, 0, r0, c1, c0, 0
+	movw	r0, #:lower16:TEMP_L1_TABLE
+	movt	r0, #:upper16:TEMP_L1_TABLE
+	bl	arm_cpuinit
+	XPUTC(#90)
 
 	/*
-	 * Ensure that the coprocessor has finished turning on the MMU.
-	 */
-	mrc	p15, 0, r0, c2, c0, 0	/* Read an arbitrary value. */
-	mov	r0, r0			/* Stall until read completes. */
-
-	/*
 	 * Jump to start in locore.S, which in turn will call initarm and main.
 	 */
 	b	start		/* Jump to start (flushes pipeline). */
@@ -225,59 +171,13 @@
 	
 	/* NOTREACHED */
 
-.Luboot_args:
-	.word	uboot_args
-Ll1_s_frame:
-	.word	L1_S_FRAME
-Ltemp_l1_table:
-	/* Put the temporary L1 translation table at the end of SDRAM. */
-	.word	0x80000000 + INIT_MEMSIZE * 0x100000 - L1_TABLE_SIZE
+#include <arm/cortex/a9_mpsubr.S>
 
-/*
- * Coprocessor register initialization values
- */
-# define CPU_AUXCTL_CZ	(1 << 6)		/* Restrict Cache Size */
-
-	/* bits to set in the Control Register */
-Lcontrol_set:
-	.word CPU_CONTROL_MMU_ENABLE  | \
-	      CPU_CONTROL_AFLT_ENABLE | \
-	      CPU_CONTROL_DC_ENABLE   | \
-	      CPU_CONTROL_IC_ENABLE   | \
-	      CPU_CONTROL_BPRD_ENABLE
-
-	/* bits to clear in the Control Register */
-Lcontrol_clr:
-	.word	0
-
-	/* bits to "write as existing" in the Control Register */
-Lcontrol_wax:
-	.word	(1 << 31) | \
-		(1 << 26) | \
-		(0x7ff << 14) | \
-		(0xff << 3)
-		
-	/* bits to disable the caches */
-Lctl_ID_dis:
-	.word	~(CPU_CONTROL_IC_ENABLE|CPU_CONTROL_DC_ENABLE)
-
-	/* bit to restrict cache size */
-Lauxctl_CZ_restrict:
-	.word	CPU_AUXCTL_CZ
-
-
-/* We'll modify va and pa at run time so we can use relocatable addresses. */
-#define MMU_INIT(va,pa,n_sec,attr) \
-	.word	va					    ; \
-	.word	pa					    ; \
-	.word	n_sec					    ; \
-	.word	attr					    ;
-
-mmu_init_table:
-	/* Map KERNEL_BASE VA to SDRAM PA, write-back cacheable */
+.Lmmu_init_table:
+	/* Map KERNEL_BASE VA to SDRAM PA, write-back cacheable, shareable */
 	MMU_INIT(KERNEL_BASE, KERNEL_BASE,
 		(INIT_MEMSIZE * L1_S_SIZE + L1_S_SIZE - 1) / L1_S_SIZE,
-		L1_S_PROTO | L1_S_APv7_KRW | L1_S_B | L1_S_C)
+		L1_S_PROTO | L1_S_APv7_KRW | L1_S_B | L1_S_C | L1_S_V6_S)
 
 	/* Map first 1MB of L4 CORE (so console will work) */
 	MMU_INIT(OMAP_L4_CORE_VBASE, OMAP_L4_CORE_BASE,

File Added: src/sys/arch/evbarm/beagle/Attic/genassym.cf
# $NetBSD: genassym.cf,v 1.1 2013/06/17 04:39:48 matt Exp $

#-
# Copyright (c) 2013 The NetBSD Foundation, Inc.
# All rights reserved.
#
# This code is derived from software contributed to The NetBSD Foundation
# by Matt Thomas of 3am Software Foundry.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#

include <dev/ic/ns16550reg.h>
include <dev/ic/comreg.h>

define	LSR_TXRDY		LSR_TXRDY
define	LSR_TSRE		LSR_TSRE
define	COM_DATA		com_data
define	COM_LSR			com_lsr