Files
2025-12-24 17:21:08 +09:00

166 lines
2.7 KiB
ArmAsm

/*
* Copyright (c) 2018 Renesas Electronics Corporation. All rights reserved.
*/
;# W0-W30 : 32bit Register (W30=Link Register)
;# X0-X30 : 64bit Register (X30=Link Register)
;# WZR : 32bit Zero Register
;# XZR : 64bit Zero Register
;# WSP : 32bit Stack Pointer
;# SP : 64bit Stack Pointer
.INCLUDE "boot_mon.h"
.ALIGN 4
;# Initialize registers
Register_init:
LDR X0, =0
LDR X1, =0
LDR X2, =0
LDR X3, =0
LDR X4, =0
LDR X5, =0
LDR X6, =0
LDR X7, =0
LDR X8, =0
LDR X9, =0
LDR X10, =0
LDR X11, =0
LDR X12, =0
LDR X13, =0
LDR X14, =0
LDR X15, =0
LDR X16, =0
LDR X17, =0
LDR X18, =0
LDR X19, =0
LDR X20, =0
LDR X21, =0
LDR X22, =0
LDR X23, =0
LDR X24, =0
LDR X25, =0
LDR X26, =0
LDR X27, =0
LDR X28, =0
LDR X29, =0
LDR X30, =0
Set_EnableRAM:
;# LDR X0, =0xE67F0018
;# LDR W1, =0x00000001 ;#Enable DRAM/SECRAM/PUBRAM
;# STR W1, [X0]
MRS X0, CurrentEL
CMP X0, #0x0000000C
BEQ current_EL3
current_EL1:
;# Loader
LDR x0, =__STACKS_END__
;# MSR SP_EL0,x0
;# MSR SP_EL1,x0
;# MSR SP_EL2,x0
MOV sp,x0
MOV x0, #0x50000000
MSR ELR_EL1,x0
;# MSR ELR_EL2,x0
;# MSR ELR_EL3,x0
MOV x0, #0x03C5
MSR SPSR_EL1,x0
;# MSR SPSR_EL2,x0
;# MSR SPSR_EL3,x0
;# Enable cache
;# mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT)
mrs x0, sctlr_el1
orr x0, x0, #(0x1 << 12)
orr x0, x0, #(0x1 << 1)
orr x0, x0, #(0x1 << 3)
msr sctlr_el1, x0
isb
b bss_clr
current_EL3:
;# Loader
LDR x0, =__STACKS_END__
;# MSR SP_EL0,x0
;# MSR SP_EL1,x0
;# MSR SP_EL2,x0
MOV sp,x0
MOV x0, #0xE38
MSR SCR_EL3, x0
MOV x0, #0x44100000
;# MSR ELR_EL1,x0
;# MSR ELR_EL2,x0
MSR ELR_EL3,x0
MOV x0, #0x03C5
;# MSR SPSR_EL1,x0
;# MSR SPSR_EL2,x0
MSR SPSR_EL3,x0
;# Board Initialize
.ifdef Area0Boot
Init_set_WDT:
LDR W0, =RWDT_RWTCSRA
LDR W1, =0xA5A5A500 ;#Timer disabled
STR W1, [X0]
Init_set_SYSWDT:
LDR W0, =SYSWDT_WTCSRA
LDR W1, =0xA5A5A500 ;#Timer disabled (Enable -> disabled)
STR W1, [X0]
.endif
;# Enable cache
;# mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT)
mrs x0, sctlr_el3
orr x0, x0, #(0x1 << 12)
orr x0, x0, #(0x1 << 1)
orr x0, x0, #(0x1 << 3)
msr sctlr_el3, x0
isb
/* clear bss section */
bss_clr:
mov X0, #0x0
ldr X1, =__BSS_START__
ldr X2, =__BSS_SIZE__
bss_loop:
subs X2, X2, #4
bcc bss_end
str W0, [X1, X2]
b bss_loop
bss_end:
.ifdef Area0Boot
/* copy data section */
ldr X0, =__DATA_COPY_START__
ldr X1, =__DATA_START__
ldr X2, =__DATA_SIZE__
data_loop:
subs X2, X2, #4
bcc data_end
ldr W3, [X0, X2]
str W3, [X1, X2]
b data_loop
.endif
data_end:
;# BL InitScif
BL Main
mov X1, #0x50000000
BR X1
.END