#include <asm/cache.h>
#include <asm/tlb.h>
#include <cpu/mmu_context.h>
#include <cpu/registers.h>
#define MMUIR_TEXT_H 0x0000000000000003 | CONFIG_MEMORY_START
#define MMUIR_TEXT_L 0x000000000000009a | CONFIG_MEMORY_START
#define MMUDR_CACHED_H 0x0000000000000003 | CONFIG_MEMORY_START
#define MMUDR_CACHED_L 0x000000000000015a | CONFIG_MEMORY_START
#define ICCR0_INIT_VAL ICCR0_ON | ICCR0_ICI
#define ICCR1_INIT_VAL ICCR1_NOLOCK
#define OCCR0_INIT_VAL OCCR0_ON | OCCR0_OCI | OCCR0_WB
#define OCCR1_INIT_VAL OCCR1_NOLOCK
.text
.global startup
startup:
ptabs/u r63, tr0
ptabs/u r63, tr1
ptabs/u r63, tr2
ptabs/u r63, tr3
ptabs/u r63, tr4
ptabs/u r63, tr5
ptabs/u r63, tr6
ptabs/u r63, tr7
synci
pta 1f, tr1
movi ITLB_FIXED, r21
movi ITLB_LAST_VAR_UNRESTRICTED+TLB_STEP, r22
1: putcfg r21, 0, r63
addi r21, TLB_STEP, r21
bne r21, r22, tr1
pta 1f, tr1
movi DTLB_FIXED, r21
movi DTLB_LAST_VAR_UNRESTRICTED+TLB_STEP, r22
1: putcfg r21, 0, r63
addi r21, TLB_STEP, r21
bne r21, r22, tr1
movi ITLB_FIXED, r21
movi MMUIR_TEXT_L, r22
putcfg r21, 1, r22
movi MMUIR_TEXT_H, r22
putcfg r21, 0, r22
movi DTLB_FIXED, r21
movi MMUDR_CACHED_L, r22
putcfg r21, 1, r22
movi MMUDR_CACHED_H, r22
putcfg r21, 0, r22
movi ICCR_BASE, r21
movi ICCR0_INIT_VAL, r22
movi ICCR1_INIT_VAL, r23
putcfg r21, ICCR_REG0, r22
putcfg r21, ICCR_REG1, r23
synci
movi OCCR_BASE, r21
movi OCCR0_INIT_VAL, r22
movi OCCR1_INIT_VAL, r23
putcfg r21, OCCR_REG0, r22
putcfg r21, OCCR_REG1, r23
synco
movi SR_HARMLESS | SR_ENABLE_MMU, r22
putcon r22, SSR
movi 1f, r22
putcon r22, SPC
synco
rte
1:
movi datalabel stack_start, r0
ld.l r0, 0, r15
pt 1f, tr1
movi datalabel __bss_start, r22
movi datalabel _end, r23
1: st.l r22, 0, r63
addi r22, 4, r22
bne r22, r23, tr1
pt decompress_kernel, tr0
blink tr0, r18
movi SR_HARMLESS, r22
putcon r22, SSR
movi 1f, r22
putcon r22, SPC
synco
rte
1:
movi datalabel (CONFIG_MEMORY_START + 0x2000)+1, r19
ptabs r19, tr0
blink tr0, r18
pt 1f, tr0
1: blink tr0, r63