X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=inline;f=Kernel%2Farch%2Farmv7%2Fstart.S;h=3f53cc2cd997a5d55af1682d07e1c35412896bea;hb=72e1657f992d917aee5c0b5ca17bf730537629d1;hp=3c0779fb8ce4afc73bbf5c8f7619850451617cb3;hpb=1389dd6a77cfe0f01ae941f6f696bd5eda22e959;p=tpg%2Facess2.git diff --git a/Kernel/arch/armv7/start.S b/Kernel/arch/armv7/start.S index 3c0779fb..3f53cc2c 100644 --- a/Kernel/arch/armv7/start.S +++ b/Kernel/arch/armv7/start.S @@ -18,26 +18,46 @@ ivt_fiq: b . @ 0x1C FIQ (Fast interrupt) .globl _start _start: + ldr r2, =UART0_PADDR + mov r1, #'A' + str r1, [r2] + 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 r1, #'c' + str r1, [r2] + mov r0, #1 mcr p15, 0, r0, c2, c0, 2 @ Set TTCR to 1 (50/50 split) + + mov r1, #'e' + str r1, [r2] mov r0, #3 mcr p15, 0, r0, c3, c0, 0 @ Set Domain 0 to Manager + mov r1, #'s' + str r1, [r2] + @ Enable VMSA mrc p15, 0, r0, c1, c0, 0 orr r0, r0, #1 orr r0, r0, #1 << 23 mcr p15, 0, r0, c1, c0, 0 + ldr r2, =0xF1000000 + mov r1, #'s' + str r1, [r2] + @ Enable access faults on domains 0 & 1 mov r0, #0x55 @ 01010101b mcr p15, 0, r0, c3, c0, 0 + mov r1, #'2' + str r1, [r2] + @ @ Check for security extensions @ @@ -51,6 +71,8 @@ _start: orreq r0, #0x2000 mcreq p15, 0, r0, c1, c0, 0 + mov r1, #'-' + str r1, [r2] @ Prepare for interrupts cps #18 @ IRQ Mode @@ -59,12 +81,33 @@ _start: ldr sp, =abortstack+0x1000 cps #19 - ldr sp, =0x80000000-4 @ Set up stack (top of user range) + mov r1, #'a' + str r1, [r2] + mov r1, #'r' + str r1, [r2] + mov r1, #'m' + str r1, [r2] + mov r1, #13 + str r1, [r2] + mov r1, #10 + str r1, [r2] + +.extern bss_start +.extern bss_size_div_4 +.zero_bss: + ldr r0, =bss_start + ldr r1, =bss_end + mov r3, #0 +.zero_bss_loop: + str r3, [r0],#4 + cmp r0, r1 + bls .zero_bss_loop + +.goto_c: + ldr sp, =0x80000000-8 @ Set up stack (top of user range) ldr r0, =kmain mov pc, r0 1: b 1b @ Infinite loop -_ptr_kmain: - .long kmain .comm irqstack, 0x1000 @ ; 4KiB Stack .comm abortstack, 0x1000 @ ; 4KiB Stack @@ -89,10 +132,10 @@ SVC_Handler: ldr r4, =SyscallHandler blx r4 - ldr r0, =csSyscallPrintRetAddr - ldr r1, [sp,#9*4+5*4] - ldr r4, =Log - blx r4 +@ ldr r0, =csSyscallPrintRetAddr +@ ldr r1, [sp,#9*4+5*4] +@ ldr r4, =Log +@ blx r4 pop {r2} @ errno pop {r0,r1} @ Ret/RetHi @@ -125,10 +168,10 @@ IRQHandler: PUSH_GPRS - ldr r0, =csIRQ_Tag - ldr r1, =csIRQ_Fmt - ldr r4, =Log_Debug - blx r4 +@ ldr r0, =csIRQ_Tag +@ ldr r1, =csIRQ_Fmt +@ ldr r4, =Log_Debug +@ blx r4 @ Call the registered handler ldr r0, gpIRQHandler @@ -270,7 +313,7 @@ kernel_table1_map: @ Size = 4KiB .rept (0xF00+16)/4 .long 0 .endr - .long hwmap_table_0 - KERNEL_BASE + (1 << 4) + 3 + .long hwmap_table_0 - KERNEL_BASE + 0x13 .rept 0xFF8/4 - (0xF00+16)/4 - 1 .long 0 .endr @@ -295,11 +338,15 @@ kernel_exception_map: .long 0 .endr .long 0x212 @ Map first page for exceptions (Kernel RO, Execute) - .rept 15 + .rept 16-1-2 .long 0 .endr + .long gUsertextPhysStart + 0x22 @ User .text (User RO, Kernel RW, because both is COW) + .long 0 .section .padata stack: .space MM_KSTACK_SIZE, 0 @ Original kernel stack +// vim: ts=8, ft=armv7 +