mirror of
https://github.com/iceHtwoO/novaOS.git
synced 2026-04-19 05:32:27 +00:00
feat: Implement a basic MMU configuration
This commit is contained in:
52
src/vector.S
52
src/vector.S
@@ -1,5 +1,5 @@
|
||||
|
||||
.global vector_table
|
||||
.global v_table
|
||||
.extern irq_handler
|
||||
|
||||
.macro ventry label
|
||||
@@ -7,7 +7,7 @@
|
||||
b \label
|
||||
.endm
|
||||
|
||||
.section .vector_table, "ax"
|
||||
.section .vector_table , "ax"
|
||||
vector_table:
|
||||
ventry .
|
||||
ventry .
|
||||
@@ -21,12 +21,18 @@ vector_table:
|
||||
|
||||
ventry synchronous_interrupt_imm_lower_aarch64
|
||||
ventry irq_handler
|
||||
ventry .
|
||||
ventry .
|
||||
|
||||
ventry .
|
||||
ventry .
|
||||
ventry .
|
||||
ventry .
|
||||
|
||||
|
||||
.align 4
|
||||
.global el2_to_el1
|
||||
el2_to_el1:
|
||||
|
||||
mov x0, #(1 << 31)
|
||||
msr HCR_EL2, x0
|
||||
|
||||
@@ -46,9 +52,13 @@ el2_to_el1:
|
||||
adr x0, vector_table
|
||||
msr VBAR_EL1, x0
|
||||
|
||||
// Disable MMU
|
||||
ldr x0, =SCTLR_EL1_CONF
|
||||
msr sctlr_el1, x0
|
||||
isb
|
||||
|
||||
adrp x0, SCTLR_EL1_CONF
|
||||
ldr x1, [x0, :lo12:SCTLR_EL1_CONF]
|
||||
msr SCTLR_EL1, x0
|
||||
|
||||
isb
|
||||
|
||||
// SIMD should not be trapped
|
||||
mrs x0, CPACR_EL1
|
||||
@@ -56,9 +66,37 @@ el2_to_el1:
|
||||
orr x0,x0, x1
|
||||
msr CPACR_EL1,x0
|
||||
|
||||
isb
|
||||
|
||||
// Return to EL1
|
||||
eret
|
||||
|
||||
.align 4
|
||||
.global configure_mmu_el1
|
||||
configure_mmu_el1:
|
||||
// Configure MMU
|
||||
adrp x0, TCR_EL1_CONF
|
||||
ldr x1, [x0, :lo12:TCR_EL1_CONF]
|
||||
msr TCR_EL1, x0
|
||||
isb
|
||||
|
||||
// MAIR0: Normal Mem.
|
||||
// MAIR1: Device Mem.
|
||||
mov x0, #0x04FF
|
||||
msr MAIR_EL1, x0
|
||||
isb
|
||||
|
||||
// Configure translation table
|
||||
ldr x0, =__translation_table_l1_start
|
||||
msr TTBR0_EL1, x0
|
||||
msr TTBR1_EL1, x0
|
||||
|
||||
tlbi vmalle1
|
||||
dsb ish
|
||||
isb
|
||||
|
||||
ret
|
||||
|
||||
.align 4
|
||||
.global el1_to_el0
|
||||
el1_to_el0:
|
||||
@@ -75,6 +113,8 @@ el1_to_el0:
|
||||
ldr x0, =__stack_end_el0
|
||||
msr SP_EL0, x0
|
||||
|
||||
isb
|
||||
|
||||
// Return to EL0
|
||||
eret
|
||||
|
||||
|
||||
Reference in New Issue
Block a user