Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 23 Feb 2014 22:55:07 +0000 (UTC)
From:      Andrew Turner <andrew@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r262412 - in projects/arm64/sys/arm64: arm64 include
Message-ID:  <201402232255.s1NMt7mm076047@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: andrew
Date: Sun Feb 23 22:55:07 2014
New Revision: 262412
URL: http://svnweb.freebsd.org/changeset/base/262412

Log:
  Start running C code:
   * Map 32MiB of kernel space in
   * Provice an initial stack
   * Add an initarm function to call

Modified:
  projects/arm64/sys/arm64/arm64/locore.S
  projects/arm64/sys/arm64/arm64/machdep.c
  projects/arm64/sys/arm64/include/pte.h

Modified: projects/arm64/sys/arm64/arm64/locore.S
==============================================================================
--- projects/arm64/sys/arm64/arm64/locore.S	Sun Feb 23 22:52:48 2014	(r262411)
+++ projects/arm64/sys/arm64/arm64/locore.S	Sun Feb 23 22:55:07 2014	(r262412)
@@ -73,12 +73,12 @@ _start:
 	br	x29
 
 virtdone:
-	/* Load the address of the fvp UART */
-	mov	x0, 0x1c090000
-	/* Load 'B' */
-	mov	x1, 0x42
-	/* Print 'B' */
-	str	x1, [x0]
+	/* Set up the stack */
+	adr	x29, initstack
+	mov	sp, x29
+
+	/* Branch to C code */
+	bl	initarm
 
 1:	b	1b
 
@@ -227,6 +227,7 @@ create_pagetables:
 	mov	x7, #1
 	mov	x8, #(KERNBASE & L2_BLOCK_MASK)
 	mov	x9, x28
+	mov	x10, #16 /* 32MiB. TODO: Make this depend on the kernel size */
 	bl	build_block_pagetable
 
 	/* Move to the l1 table */
@@ -345,12 +346,22 @@ build_block_pagetable:
 
 	/* Only use the output address bits */
 	lsr	x9, x9, #L2_SHIFT
-	orr	x12, x12, x9, lsl #L2_SHIFT
+
+	/* Set the physical address for this virtual address */
+1:	orr	x12, x12, x9, lsl #L2_SHIFT
 
 	/* Store the entry */
 	str	x12, [x6, x11, lsl #3]
 
-	ret
+	/* Clear the address bits */
+	and	x12, x12, #ATTR_MASK_L
+
+	sub	x10, x10, #1
+	add	x11, x11, #1
+	add	x9, x9, #1
+	cbnz	x10, 1b
+
+2:	ret
 
 start_mmu:
 	dsb	sy
@@ -408,3 +419,6 @@ abort:
 	.align 12 /* 4KiB aligned */
 pagetable:
 	.space	(PAGE_SIZE * 3) /* 3 tables */
+
+initstack:
+	.space	(PAGE_SIZE * 4)

Modified: projects/arm64/sys/arm64/arm64/machdep.c
==============================================================================
--- projects/arm64/sys/arm64/arm64/machdep.c	Sun Feb 23 22:52:48 2014	(r262411)
+++ projects/arm64/sys/arm64/arm64/machdep.c	Sun Feb 23 22:55:07 2014	(r262412)
@@ -252,3 +252,19 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, 
 
 	panic("sendsig");
 }
+
+void initarm(void);
+
+void
+initarm(void)
+{
+	const char str[] = "FreeBSD\r\n";
+	volatile uint32_t *uart;
+	int i;
+
+	uart = (uint32_t*)0x1c090000;
+	for (i = 0; i < sizeof(str); i++) {
+		*uart = str[i];
+	}
+}
+

Modified: projects/arm64/sys/arm64/include/pte.h
==============================================================================
--- projects/arm64/sys/arm64/include/pte.h	Sun Feb 23 22:52:48 2014	(r262411)
+++ projects/arm64/sys/arm64/include/pte.h	Sun Feb 23 22:55:07 2014	(r262412)
@@ -44,6 +44,7 @@ typedef	uint64_t	pt_entry_t;		/* page ta
 
 /* Block and Page attributes */
 /* TODO: Add the upper attributes */
+#define	ATTR_MASK_L	0xfff
 #define	ATTR_nG		(1 << 11)
 #define	ATTR_AF		(1 << 10)
 #define	ATTR_SH(x)	((x) << 8)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402232255.s1NMt7mm076047>