orr r7, #CPU_CONTROL_AFLT_ENABLE
orr r7, #CPU_CONTROL_VECRELOC
mcr CP15_SCTLR(r7)
+ DSB
ISB
bl dcache_inv_poc_all
mcr CP15_ICIALLU
+ DSB
ISB
/*
adr r0, Lpagetable
bl translate_va_to_pa
+ /* Clear boot page table */
+ mov r1, r0
+ mov r2, L1_TABLE_SIZE
+ mov r3,#0
+1: str r3, [r1], #4
+ subs r2, #4
+ bgt 1b
+
/*
* Map PA == VA
*/
bl build_pagetables
#if defined(SOCDEV_PA) && defined(SOCDEV_VA)
- /* Create the custom map used for early_printf(). */
+ /* Create the custom map (1MB) used for early_printf(). */
ldr r1, =SOCDEV_PA
ldr r2, =SOCDEV_VA
+ mov r3, #1
bl build_pagetables
#endif
bl init_mmu
ISB
mcr CP15_TLBIALL /* Flush TLB */
mcr CP15_BPIALL /* Flush Branch predictor */
+ DSB
ISB
+
mov pc, lr
END(init_mmu)
bl dcache_inv_pou_all
#endif
mcr CP15_ICIALLU
+ DSB
ISB
/* Set auxiliary register */
eor r8, r8, r6 /* Set bits */
teq r7, r8
mcrne CP15_ACTLR(r8)
+ DSB
ISB
/* Enable caches. */
DSB
ISB
- /* Flush all TLBs */
- mcr CP15_TLBIALL
+ mcr CP15_TLBIALL /* Flush TLB */
+ mcr CP15_BPIALL /* Flush Branch predictor */
DSB
ISB
bl dcache_inv_pou_all
#endif
mcr CP15_ICIALLU
+ DSB
ISB
pop {r4-r11, pc}
orr r0, #CPU_CONTROL_AFLT_ENABLE
orr r0, #CPU_CONTROL_VECRELOC
mcr CP15_SCTLR(r0)
+ DSB
ISB
/* Invalidate L1 cache I+D cache */
bl dcache_inv_pou_all
mcr CP15_ICIALLU
+ DSB
ISB
/* Find the delta between VA and PA */