view kernel/arch/qemu_vexpress/startup_a9.asm @ 381:6df89163e114

Fix section and ldr pseudo instruction
author Windel Bouwman
date Sat, 26 Apr 2014 17:41:56 +0200
parents kernel/startup_a9.asm@9667d78ba79e
children d056b552d3f4
line wrap: on
line source


section code

interrupt_vector_table:
ivt_reset: B start  ; 0x0 reset
ivt_undef: B undef_handler  ; 0x4 undefined instruction
ivt_svc: B undef_handler  ; 0x08 Supervisor call
ivt_prefetch: B undef_handler ; 0x0C prefetch abort
ivt_data: B undef_handler  ; 0x10 data abort
ivt_hyptrap: B undef_handler ; 0x14 not used
ivt_irq: B undef_handler  ; 0x18 IRQ
ivt_fiq: B undef_handler  ; 0x18 FIQ


start:

; Setup TTBR1 (translation table base register)

ldr r0, =kernel_table0    ; pseudo instruction which loads the value of the symbol
; -KERNEL_BASE
mcr p15, 0, r0, c2, c0, 1 ; TTBR1
mcr p15, 0, r0, c2, c0, 0 ; TTBR0

; Prepare the TTBCR (translation table base control register)
mov r0, 0x1  ; TBD: why set this to 1?
mcr p15, 0, r0, c2, c0, 2

; Enable the VMSA (Virtual memory system architecture):
mrc p15, 0, r0, c1, c0, 0
; TODO:
; orr r0, r0, 0x1
mcr p15, 0, r0, c1, c0, 0

; Setup stack:
mov sp, 0x30000
BL kernel_start          ; Branch to main (this is actually in the interrupt vector)
local_loop:
B local_loop


; Interrupt handlers:

undef_handler:
B undef_handler


; Assembly language helpers:
; Called to identify the proc:
arch_pfr0:
mrc p15, 0, r0, c0, c1, 0
mov pc, lr

arch_pfr1:
mrc p15, 0, r0, c0, c1, 1
mov pc, lr

arch_mmfr0:
mrc p15, 0, r0, c0, c1, 4
mov pc, lr


arch_mpuir:
mrc p15, 0, r0, c0, c0, 4
mov pc, lr


; Memory map tables:

section mem_tables

kernel_table0:
 dcd 0x000402