Kernel/arm7 - Removed debug statement from VMM
[tpg/acess2.git] / Kernel / arch / arm7 / start.s
index 4fb371b..606dbb7 100644 (file)
@@ -1,24 +1,97 @@
+KERNEL_BASE =  0x80000000
+@
+@ Exception defs taken from ARM DDI 0406B
+@ 
+.section .init
 interrupt_vector_table:
-       b . @ Reset
-       b .
-       b SyscallHandler @ SWI instruction
-       b . 
-       b .
-       b .
-       b .
-       b .
-
-.comm stack, 0x10000   @ ; 64KiB Stack
+       b _start @ Reset
+       b .     @ #UD
+       b SyscallHandler @ SVC (SWI assume)
+       b .     @ Prefetch abort
+       b .     @ Data abort
+       b .     @ Not Used
+       b .     @ IRQ
+       b .     @ FIQ (Fast interrupt)
 
 .globl _start
 _start:
+       ldr r0, =kernel_table0-KERNEL_BASE
+       mcr p15, 0, r0, c2, c0, 1       @ Set TTBR1 to r0
+       mcr p15, 0, r0, c2, c0, 0       @ Set TTBR0 to r0 too (for identity)
+
+       mov r0, #1
+       mcr p15, 0, r0, c2, c0, 2       @ Set TTCR to 1 (50/50 split)
+       
+       mov r0, #3
+       mcr p15, 0, r0, c3, c0, 0       @ Set Domain 0 to Manager
+
+       mrc p15, 0, r0, c1, c0, 0
+       orr r0, r0, #1
+       orr r0, r0, #1 << 23
+       mcr p15, 0, r0, c1, c0, 0
+
        ldr sp, =stack+0x10000  @ Set up stack
-       bl main
+       ldr r0, =kmain
+       mov pc, r0
 1:     b 1b    @ Infinite loop
+_ptr_kmain:
+       .long kmain
+
+.comm stack, 0x10000   @ ; 64KiB Stack
 
 SyscallHandler:
-       
+       b .
 .section .padata
 .globl kernel_table0
 
+kernel_table0:
+       .long 0x00000002        @ Identity map the first 1 MiB
+       .rept 0x800 - 1
+               .long 0
+       .endr
+       .long 0x00000002        @ Map first 4 MiB to 2GiB
+       .long 0x00100002        @ 
+       .long 0x00200002        @ 
+       .long 0x00300002        @ 
+       .rept 0xF00 - 0x800 - 4
+               .long 0
+       .endr
+       .long hwmap_table_0 + 0x000 - KERNEL_BASE + 1
+       .long hwmap_table_0 + 0x400 - KERNEL_BASE + 1
+       .long hwmap_table_0 + 0x800 - KERNEL_BASE + 1
+       .long hwmap_table_0 + 0xC00 - KERNEL_BASE + 1
+       .rept 0xFF8 - 0xF00 - 4
+               .long 0
+       .endr
+       @ Page fractals
+       .long kernel_table1_map + 0x000 - KERNEL_BASE + 1
+       .long kernel_table1_map + 0x400 - KERNEL_BASE + 1
+       .long kernel_table1_map + 0x800 - KERNEL_BASE + 1
+       .long kernel_table1_map + 0xC00 - KERNEL_BASE + 1
+       @ Top level fractals
+       @.long kernel_table0 - KERNEL_BASE + 2  @ Only need 16KiB, but this maps 1MiB
+       .long 0         @ removed for alignment constraints, using the KERNEL_BASE ident mapping instead
+       .rept 0x1000 - 0xFF8 - 5
+               .long 0
+       .endr
 
+.globl kernel_table1_map
+kernel_table1_map:     @ Size = 4KiB
+       .rept 0xF00/4
+               .long 0
+       .endr
+       .long hwmap_table_0 - KERNEL_BASE + (1 << 4) + 3
+       .rept 0xFF8/4 - 0xF00/4 - 1
+               .long 0
+       .endr
+       .long kernel_table1_map - KERNEL_BASE + (1 << 4) + 3
+       .long 0
+
+@ Hardware mappings 
+.globl hwmap_table_0
+hwmap_table_0:
+       .long 0x10009000 + (1 << 4) + 3 @ UART0
+       .rept 1024 - 1
+               .long 0
+       .endr
+       

UCC git Repository :: git.ucc.asn.au