1 KERNEL_BASE = 0x80000000
3 @ Exception defs taken from ARM DDI 0406B
6 interrupt_vector_table:
9 b SyscallHandler @ SVC (SWI assume)
14 b . @ FIQ (Fast interrupt)
18 ldr r0, =kernel_table0-KERNEL_BASE
19 mcr p15, 0, r0, c2, c0, 1 @ Set TTBR1 to r0
20 mcr p15, 0, r0, c2, c0, 0 @ Set TTBR0 to r0 too (for identity)
23 mcr p15, 0, r0, c2, c0, 2 @ Set TTCR to 1 (50/50 split)
26 mcr p15, 0, r0, c3, c0, 0 @ Set Domain 0 to Manager
28 mrc p15, 0, r0, c1, c0, 0
31 mcr p15, 0, r0, c1, c0, 0
33 ldr sp, =stack+0x10000 @ Set up stack
36 1: b 1b @ Infinite loop
40 .comm stack, 0x10000 @ ; 64KiB Stack
48 .long 0x00000002 @ Identity map the first 1 MiB
52 .long 0x00000002 @ Map first 4 MiB to 2GiB
56 .rept 0xF00 - 0x800 - 4
59 .long hwmap_table_0 + 0x000 - KERNEL_BASE + 1
60 .long hwmap_table_0 + 0x400 - KERNEL_BASE + 1
61 .long hwmap_table_0 + 0x800 - KERNEL_BASE + 1
62 .long hwmap_table_0 + 0xC00 - KERNEL_BASE + 1
63 .rept 0xFF8 - 0xF00 - 4
67 .long kernel_table1_map + 0x000 - KERNEL_BASE + 1
68 .long kernel_table1_map + 0x400 - KERNEL_BASE + 1
69 .long kernel_table1_map + 0x800 - KERNEL_BASE + 1
70 .long kernel_table1_map + 0xC00 - KERNEL_BASE + 1
72 @.long kernel_table0 - KERNEL_BASE + 2 @ Only need 16KiB, but this maps 1MiB
73 .long 0 @ removed for alignment constraints, using the KERNEL_BASE ident mapping instead
74 .rept 0x1000 - 0xFF8 - 5
78 .globl kernel_table1_map
79 kernel_table1_map: @ Size = 4KiB
83 .long hwmap_table_0 - KERNEL_BASE + (1 << 4) + 3
84 .rept 0xFF8/4 - 0xF00/4 - 1
87 .long kernel_table1_map - KERNEL_BASE + (1 << 4) + 3
93 .long 0x10009000 + (1 << 4) + 3 @ UART0