diff options
Diffstat (limited to 'bootwrapper/helpers.S')
-rw-r--r-- | bootwrapper/helpers.S | 512 |
1 files changed, 256 insertions, 256 deletions
diff --git a/bootwrapper/helpers.S b/bootwrapper/helpers.S index bf08be0..261d0c6 100644 --- a/bootwrapper/helpers.S +++ b/bootwrapper/helpers.S @@ -1,47 +1,47 @@ ; ; Copyright (c) 2012, ARM Limited. All rights reserved. - ; + ; ; Redistribution and use in source and binary forms, with ; or without modification, are permitted provided that the ; following conditions are met: - ; + ; ; Redistributions of source code must retain the above - ; copyright notice, this list of conditions and the + ; copyright notice, this list of conditions and the ; following disclaimer. ; ; Redistributions in binary form must reproduce the - ; above copyright notice, this list of conditions and - ; the following disclaimer in the documentation + ; above copyright notice, this list of conditions and + ; the following disclaimer in the documentation ; and/or other materials provided with the distribution. - ; + ; ; Neither the name of ARM nor the names of its ; contributors may be used to endorse or promote products ; derived from this software without specific prior written - ; permission. - ; - + ; permission. + ; + EXPORT wfi EXPORT wfe - EXPORT sev + EXPORT sev EXPORT dmb EXPORT dsb - EXPORT isb + EXPORT isb EXPORT smc EXPORT dcisw - EXPORT dccsw - EXPORT dccisw + EXPORT dccsw + EXPORT dccisw EXPORT read_dacr - EXPORT read_ttbr0 - EXPORT read_cpacr + EXPORT read_ttbr0 + EXPORT read_cpacr EXPORT read_scr EXPORT read_cpsr EXPORT read_midr - EXPORT read_mpidr - EXPORT read_cntpct - EXPORT read_cntfrq + EXPORT read_mpidr + EXPORT read_cntpct + EXPORT read_cntfrq EXPORT read_vmpidr - EXPORT read_vmidr + EXPORT read_vmidr EXPORT read_id_pfr0 EXPORT read_id_pfr1 EXPORT read_id_dfr0 @@ -49,20 +49,20 @@ EXPORT read_id_mmfr0 EXPORT read_id_mmfr1 EXPORT read_id_mmfr2 - EXPORT read_id_mmfr3 + EXPORT read_id_mmfr3 EXPORT read_id_isar0 EXPORT read_id_isar1 EXPORT read_id_isar2 EXPORT read_id_isar3 EXPORT read_id_isar4 - EXPORT read_id_isar5 + EXPORT read_id_isar5 EXPORT read_cpuid - EXPORT read_aidr + EXPORT read_aidr EXPORT read_ctr EXPORT read_tcmtr EXPORT read_tlbtr - EXPORT read_clusterid - EXPORT read_sctlr + EXPORT read_clusterid + EXPORT read_sctlr EXPORT read_hsctlr EXPORT read_hdfar EXPORT read_hpfar @@ -70,26 +70,26 @@ EXPORT read_hcr EXPORT read_hdcr EXPORT read_hcptr - EXPORT read_hstr + EXPORT read_hstr EXPORT read_cnthctl - EXPORT read_cntkctl + EXPORT read_cntkctl EXPORT read_cntp_ctl - EXPORT read_cntp_tval + EXPORT read_cntp_tval EXPORT read_cnthp_ctl EXPORT read_cnthp_tval - EXPORT read_cnthp_cval + EXPORT read_cnthp_cval EXPORT read_ttbcr - EXPORT read_clidr - EXPORT read_lr + EXPORT read_clidr + EXPORT read_lr EXPORT read_sp EXPORT read_actlr EXPORT read_nsacr - EXPORT read_clidr + EXPORT read_clidr EXPORT read_csselr EXPORT read_ccsidr EXPORT read_nmrr EXPORT read_prrr - EXPORT read_mvbar + EXPORT read_mvbar EXPORT read_vbar EXPORT read_hsr EXPORT read_dfar @@ -97,22 +97,22 @@ EXPORT read_dfsr EXPORT read_ifsr EXPORT read_adfsr - EXPORT read_aifsr + EXPORT read_aifsr EXPORT write_dacr EXPORT write_prrr - EXPORT write_nmrr + EXPORT write_nmrr EXPORT write_ttbr0 EXPORT write_cpacr EXPORT write_nsacr - EXPORT write_cpsr + EXPORT write_cpsr EXPORT write_scr EXPORT write_mvbar EXPORT write_vbar - EXPORT write_hvbar + EXPORT write_hvbar EXPORT write_vmpidr - EXPORT write_vmidr - EXPORT write_csselr + EXPORT write_vmidr + EXPORT write_csselr EXPORT write_hcr EXPORT write_hdcr EXPORT write_hcptr @@ -122,64 +122,64 @@ EXPORT write_sp EXPORT write_lr EXPORT write_ttbcr - EXPORT write_cntfrq + EXPORT write_cntfrq EXPORT write_cnthctl - EXPORT write_cntkctl + EXPORT write_cntkctl EXPORT write_cntp_ctl - EXPORT write_cntp_tval + EXPORT write_cntp_tval EXPORT write_cnthp_ctl EXPORT write_cnthp_tval - EXPORT write_cnthp_cval + EXPORT write_cnthp_cval EXPORT write_hsctlr EXPORT write_httbr - EXPORT write_vttbr + EXPORT write_vttbr EXPORT write_htcr - EXPORT write_vtcr - EXPORT write_hmair0 + EXPORT write_vtcr + EXPORT write_hmair0 EXPORT write_hmair1 EXPORT write_dfar EXPORT write_ifar EXPORT write_dfsr EXPORT write_ifsr EXPORT write_adfsr - EXPORT write_aifsr - + EXPORT write_aifsr + EXPORT panic EXPORT spin_lock - EXPORT spin_trylock - EXPORT spin_unlock - EXPORT copy_words + EXPORT spin_trylock + EXPORT spin_unlock + EXPORT copy_words EXPORT virt_memset EXPORT disable_gic_dist - EXPORT enable_gic_dist + EXPORT enable_gic_dist EXPORT switcher_exit EXPORT hyp_save EXPORT num_secondaries EXPORT virt_dead - EXPORT get_sp + EXPORT get_sp EXPORT disable_coherency EXPORT enable_coherency EXPORT inv_tlb_all - EXPORT inv_icache_all + EXPORT inv_icache_all EXPORT inv_bpred_is EXPORT inv_bpred_all EXPORT inv_icache_mva_pou EXPORT inv_dcache_mva_poc EXPORT cln_dcache_mva_pou - EXPORT cln_dcache_mva_poc + EXPORT cln_dcache_mva_poc EXPORT enable_user_perfmon_access EXPORT enable_perfmon EXPORT enable_swp EXPORT cache_maint_op EXPORT enter_monitor_mode EXPORT enter_nonsecure_world - EXPORT enable_pmu + EXPORT enable_pmu ; Cache maintenance op types INV EQU 0x0 CLN EQU 0x1 CLN_INV EQU 0x2 - + AREA |.text|, CODE read_cntfrq FUNCTION @@ -191,29 +191,29 @@ write_cntfrq FUNCTION mcr p15, 0, r0, c14, c0, 0 bx lr ENDFUNC - + read_cntpct FUNCTION mrrc p15, 0, r2, r3, c14 str r2, [r0] - str r3, [r1] + str r3, [r1] bx lr ENDFUNC - + dcisw FUNCTION mcr p15, 0, r0, c7, c6, 2 bx lr - ENDFUNC + ENDFUNC dccsw FUNCTION mcr p15, 0, r0, c7, c10, 2 bx lr - ENDFUNC - + ENDFUNC + dccisw FUNCTION mcr p15, 0, r0, c7, c14, 2 bx lr - ENDFUNC - + ENDFUNC + virt_dead FUNCTION b virt_dead ENDFUNC @@ -224,28 +224,28 @@ disable_gic_dist FUNCTION str r2, [r0] mov r2, #0 str r2, [r1] - dsb - pop {pc} + dsb + pop {pc} ENDFUNC enable_gic_dist FUNCTION push {lr} str r0, [r1] - dsb - pop {pc} - ENDFUNC - + dsb + pop {pc} + ENDFUNC + smc FUNCTION push {r4-r12, lr} smc #0 pop {r4-r12, pc} ENDFUNC - + dmb FUNCTION dmb bx lr ENDFUNC - + wfi FUNCTION wfi bx lr @@ -269,7 +269,7 @@ switcher_exit FUNCTION hyp_save FUNCTION hvc #2 bx lr - ENDFUNC + ENDFUNC ; This function takes three arguments ; r0: Destination start address (must be word aligned) @@ -284,7 +284,7 @@ copy_words FUNCTION stmia r0!, {r3, r4, r5, r12} sub r2, r2, #4 b %b0 - + 1 cmp r2, #0 beq %f3 2 ldr r3, [r1], #4 @@ -295,8 +295,8 @@ copy_words FUNCTION 3 pop {r4, r5} bx lr ENDFUNC - - + + virt_memcpy FUNCTION cmp r2, #0 bxeq lr @@ -320,7 +320,7 @@ virt_memset FUNCTION ; Functions we need in the runtime entry point, i.e. before we switch pagetables, ; are placed in this area. - + dsb FUNCTION dsb bx lr @@ -329,7 +329,7 @@ dsb FUNCTION isb FUNCTION isb bx lr - ENDFUNC + ENDFUNC num_secondaries FUNCTION mrc p15, 1, r0, c9, c0, 2 @@ -342,11 +342,11 @@ read_vmpidr FUNCTION mrc p15, 4, r0, c0, c0, 5 bx lr ENDFUNC - + read_vmidr FUNCTION mrc p15, 4, r0, c0, c0, 0 bx lr - ENDFUNC + ENDFUNC read_id_pfr0 FUNCTION mrc p15, 0, r0, c0, c1, 0 @@ -362,12 +362,12 @@ read_id_dfr0 FUNCTION mrc p15, 0, r0, c0, c1, 2 bx lr ENDFUNC - + read_id_afr0 FUNCTION mrc p15, 0, r0, c0, c1, 3 bx lr ENDFUNC - + read_id_mmfr0 FUNCTION mrc p15, 0, r0, c0, c1, 4 bx lr @@ -377,17 +377,17 @@ read_id_mmfr1 FUNCTION mrc p15, 0, r0, c0, c1, 5 bx lr ENDFUNC - + read_id_mmfr2 FUNCTION mrc p15, 0, r0, c0, c1, 6 bx lr - ENDFUNC + ENDFUNC read_id_mmfr3 FUNCTION mrc p15, 0, r0, c0, c1, 7 bx lr ENDFUNC - + read_id_isar0 FUNCTION mrc p15, 0, r0, c0, c2, 0 bx lr @@ -397,17 +397,17 @@ read_id_isar1 FUNCTION mrc p15, 0, r0, c0, c2, 1 bx lr ENDFUNC - + read_id_isar2 FUNCTION mrc p15, 0, r0, c0, c2, 2 bx lr ENDFUNC - + read_id_isar3 FUNCTION mrc p15, 0, r0, c0, c2, 3 bx lr ENDFUNC - + read_id_isar4 FUNCTION mrc p15, 0, r0, c0, c2, 4 bx lr @@ -416,8 +416,8 @@ read_id_isar4 FUNCTION read_id_isar5 FUNCTION mrc p15, 0, r0, c0, c2, 5 bx lr - ENDFUNC - + ENDFUNC + read_ctr FUNCTION mrc p15, 0, r0, c0, c0, 1 bx lr @@ -431,12 +431,12 @@ read_tcmtr FUNCTION read_tlbtr FUNCTION mrc p15, 0, r0, c0, c0, 3 bx lr - ENDFUNC - + ENDFUNC + read_aidr FUNCTION mrc p15, 1, r0, c0, c0, 7 bx lr - ENDFUNC + ENDFUNC va_to_pa FUNCTION ; Note: assumes conversion will be successful! mov r1, r0 @@ -458,7 +458,7 @@ read_ttbr0 FUNCTION dsb bx lr ENDFUNC - + write_dacr FUNCTION mcr p15, 0, r0, c3, c0, 0 isb @@ -469,7 +469,7 @@ read_cpacr FUNCTION mrc p15, 0, r0, c1, c0, 2 bx lr ENDFUNC - + write_cpacr FUNCTION mcr p15, 0, r0, c1, c0, 2 bx lr @@ -493,7 +493,7 @@ read_scr FUNCTION write_scr FUNCTION mcr p15, 0, r0, c1, c1, 0 isb - dsb + dsb bx lr ENDFUNC @@ -512,7 +512,7 @@ read_cpsr FUNCTION write_cpsr FUNCTION msr CPSR_c, r0 bx lr - ENDFUNC + ENDFUNC write_mvbar FUNCTION mcr p15, 0, r0, c12, c0, 1 @@ -520,32 +520,32 @@ write_mvbar FUNCTION ENDFUNC write_vbar FUNCTION - mcr p15, 0, r0, c12, c0, 0 + mcr p15, 0, r0, c12, c0, 0 bx lr ENDFUNC write_hvbar FUNCTION - mcr p15, 4, r0, c12, c0, 0 + mcr p15, 4, r0, c12, c0, 0 bx lr - ENDFUNC + ENDFUNC read_mvbar FUNCTION mrc p15, 0, r0, c12, c0, 1 bx lr ENDFUNC - + read_vbar FUNCTION - mrc p15, 0, r0, c12, c0, 0 + mrc p15, 0, r0, c12, c0, 0 bx lr ENDFUNC - + read_cpuid FUNCTION mrc p15, 0, r0, c0, c0, 5 ands r0, r0, #0xf bx lr ENDFUNC -read_clusterid FUNCTION +read_clusterid FUNCTION mrc p15, 0, r0, c0, c0, 5 lsr r0, r0, #0x8 ands r0, r0, #0xf @@ -557,32 +557,32 @@ write_ttbr0 FUNCTION mcr p15, 0, r0, c7, c5, 6 mcr p15, 0, r0, c8, c7, 0 isb - dsb + dsb bx lr ENDFUNC read_ttbcr FUNCTION mrc p15, 0, r0, c2, c0, 2 bx lr - ENDFUNC - + ENDFUNC + write_ttbcr FUNCTION mcr p15, 0, r0, c2, c0, 2 bx lr - ENDFUNC + ENDFUNC write_vmpidr FUNCTION mcr p15, 4, r0, c0, c0, 5 isb bx lr ENDFUNC - + write_vmidr FUNCTION mcr p15, 4, r0, c0, c0, 0 isb bx lr - ENDFUNC - + ENDFUNC + read_vtcr FUNCTION mrc p15, 4, r0, c2, c1, 2 bx lr @@ -597,34 +597,34 @@ read_hdcr FUNCTION mrc p15, 4, r0, c1, c1, 1 bx lr ENDFUNC - + read_hcptr FUNCTION mrc p15, 4, r0, c1, c1, 2 bx lr ENDFUNC - + read_hstr FUNCTION mrc p15, 4, r0, c1, c1, 3 bx lr - ENDFUNC + ENDFUNC write_hcr FUNCTION mcr p15, 4, r0, c1, c1, 0 isb - dsb + dsb bx lr ENDFUNC write_hdcr FUNCTION mcr p15, 4, r0, c1, c1, 1 bx lr - ENDFUNC - + ENDFUNC + write_hcptr FUNCTION mcr p15, 4, r0, c1, c1, 2 bx lr - ENDFUNC - + ENDFUNC + write_hstr FUNCTION mcr p15, 4, r0, c1, c1, 3 bx lr @@ -635,7 +635,7 @@ write_httbr FUNCTION mcr p15, 0, r0, c7, c5, 6 mcr p15, 0, r0, c8, c7, 0 isb - dsb + dsb bx lr ENDFUNC @@ -644,10 +644,10 @@ write_vttbr FUNCTION mcr p15, 0, r0, c7, c5, 6 mcr p15, 0, r0, c8, c7, 0 isb - dsb + dsb bx lr - ENDFUNC - + ENDFUNC + write_htcr FUNCTION mcr p15, 4, r0, c2, c0, 2 bx lr @@ -656,7 +656,7 @@ write_htcr FUNCTION write_vtcr FUNCTION mcr p15, 4, r0, c2, c1, 2 bx lr - ENDFUNC + ENDFUNC write_hmair0 FUNCTION mcr p15, 4, r0, c10, c2, 0 @@ -666,14 +666,14 @@ write_hmair0 FUNCTION write_hmair1 FUNCTION mcr p15, 4, r0, c10, c2, 1 bx lr - ENDFUNC - + ENDFUNC + read_nsacr FUNCTION mrc p15, 0, r0, c1, c1, 2 bx lr ENDFUNC - -read_sctlr FUNCTION + +read_sctlr FUNCTION mrc p15, 0, r0, c1, c0, 0 bx lr ENDFUNC @@ -681,22 +681,22 @@ read_sctlr FUNCTION write_sctlr FUNCTION mcr p15, 0, r0, c1, c0, 0 isb - dsb + dsb bx lr ENDFUNC -read_hsctlr FUNCTION +read_hsctlr FUNCTION mrc p15, 4, r0, c1, c0, 0 bx lr ENDFUNC read_hdfar FUNCTION - mrc p15, 4, r0, c6, c0, 0 + mrc p15, 4, r0, c6, c0, 0 bx lr ENDFUNC - + read_hpfar FUNCTION - mrc p15, 4, r0, c6, c0, 4 + mrc p15, 4, r0, c6, c0, 4 bx lr ENDFUNC @@ -708,10 +708,10 @@ read_hsr FUNCTION write_hsctlr FUNCTION mcr p15, 4, r0, c1, c0, 0 isb - dsb + dsb bx lr ENDFUNC - + read_cnthctl FUNCTION mrc p15, 4, r0, c14, c1, 0 bx lr @@ -720,7 +720,7 @@ read_cnthctl FUNCTION read_cntkctl FUNCTION mrc p15, 0, r0, c14, c1, 0 bx lr - ENDFUNC + ENDFUNC read_cnthp_cval FUNCTION mrrc p15, 6, r0, r1, c14 @@ -736,84 +736,84 @@ read_cntp_tval FUNCTION mrc p15, 0, r0, c14, c2, 0 bx lr ENDFUNC - + read_cntp_ctl FUNCTION mrc p15, 0, r0, c14, c2, 1 bx lr - ENDFUNC - + ENDFUNC + read_cnthp_ctl FUNCTION mrc p15, 4, r0, c14, c2, 1 bx lr - ENDFUNC + ENDFUNC write_cnthctl FUNCTION mcr p15, 4, r0, c14, c1, 0 bx lr - ENDFUNC + ENDFUNC write_cntkctl FUNCTION mcr p15, 0, r0, c14, c1, 0 bx lr - ENDFUNC - + ENDFUNC + write_cntp_tval FUNCTION mcr p15, 0, r0, c14, c2, 0 isb bx lr - ENDFUNC - + ENDFUNC + write_cntp_ctl FUNCTION mcr p15, 0, r0, c14, c2, 1 isb - dsb + dsb bx lr - ENDFUNC - + ENDFUNC + write_cnthp_cval FUNCTION mcrr p15, 6, r0, r1, c14 isb - dsb + dsb bx lr ENDFUNC write_cnthp_tval FUNCTION mcr p15, 4, r0, c14, c2, 0 isb - dsb + dsb bx lr ENDFUNC - + write_cnthp_ctl FUNCTION mcr p15, 4, r0, c14, c2, 1 isb - dsb + dsb bx lr - ENDFUNC - -read_clidr FUNCTION + ENDFUNC + +read_clidr FUNCTION mrc p15, 1, r0, c0, c0, 1 ; read clidr bx lr ENDFUNC -read_ccsidr FUNCTION +read_ccsidr FUNCTION mrc p15, 1, r0, c0, c0, 0 ; read ccsidr bx lr ENDFUNC -read_csselr FUNCTION +read_csselr FUNCTION mrc p15, 2, r0, c0, c0, 0 ; read csselr bx lr - ENDFUNC - -write_csselr FUNCTION + ENDFUNC + +write_csselr FUNCTION mcr p15, 2, r0, c0, c0, 0 ; read csselr isb - dsb + dsb bx lr - ENDFUNC - -read_actlr FUNCTION + ENDFUNC + +read_actlr FUNCTION mrc p15, 0, r0, c1, c0, 1 bx lr ENDFUNC @@ -821,64 +821,64 @@ read_actlr FUNCTION write_actlr FUNCTION mcr p15, 0, r0, c1, c0, 1 isb - dsb + dsb bx lr ENDFUNC -read_prrr FUNCTION +read_prrr FUNCTION mrc p15, 0, r0, c10, c2, 0 bx lr ENDFUNC -read_nmrr FUNCTION +read_nmrr FUNCTION mrc p15, 0, r0, c10, c2, 1 bx lr ENDFUNC -write_prrr FUNCTION +write_prrr FUNCTION mcr p15, 0, r0, c10, c2, 0 isb - dsb + dsb bx lr ENDFUNC -write_nmrr FUNCTION +write_nmrr FUNCTION mcr p15, 0, r0, c10, c2, 1 isb - dsb + dsb bx lr - ENDFUNC + ENDFUNC read_dfar FUNCTION mrc p15, 0, r0, c6, c0, 0 bx lr ENDFUNC - + read_ifar FUNCTION - mrc p15, 0, r0, c6, c0, 2 + mrc p15, 0, r0, c6, c0, 2 bx lr ENDFUNC - + read_dfsr FUNCTION - mrc p15, 0, r0, c5, c0, 0 + mrc p15, 0, r0, c5, c0, 0 bx lr ENDFUNC - + read_ifsr FUNCTION - mrc p15, 0, r0, c5, c0, 1 + mrc p15, 0, r0, c5, c0, 1 bx lr ENDFUNC - + read_adfsr FUNCTION mrc p15, 0, r0, c5, c1, 0 bx lr ENDFUNC - + read_aifsr FUNCTION - mrc p15, 0, r0, c5, c1, 1 + mrc p15, 0, r0, c5, c1, 1 bx lr ENDFUNC - + write_dfar FUNCTION mcr p15, 0, r0, c6, c0, 0 isb @@ -889,40 +889,40 @@ write_dfar FUNCTION write_ifar FUNCTION mcr p15, 0, r0, c6, c0, 2 isb - dsb + dsb bx lr ENDFUNC write_dfsr FUNCTION mcr p15, 0, r0, c5, c0, 0 isb - dsb + dsb bx lr ENDFUNC write_ifsr FUNCTION mcr p15, 0, r0, c5, c0, 1 isb - dsb + dsb bx lr ENDFUNC - + write_adfsr FUNCTION mcr p15, 0, r0, c5, c1, 0 isb - dsb + dsb bx lr ENDFUNC - + write_aifsr FUNCTION mcr p15, 0, r0, c5, c1, 1 isb - dsb + dsb bx lr ENDFUNC - + read_lr FUNCTION - ; Save r1 + ; Save r1 push {r1} and r0, r0, #0x1f ; Read the current cpsr @@ -931,18 +931,18 @@ read_lr FUNCTION ; Check if the desired lr is of the current mode cmp r0, r1 moveq r0, LR - beq read_lr_out + beq read_lr_out ; Check if desired lr is of user mode cmp r0, #0x10 mrseq r0, LR_usr beq read_lr_out - ; Check if desired lr is of supervisor mode + ; Check if desired lr is of supervisor mode cmp r0, #0x13 mrseq r0, LR_svc read_lr_out pop {r1} bx lr - ENDFUNC + ENDFUNC write_lr FUNCTION ; Save r2 @@ -954,12 +954,12 @@ write_lr FUNCTION ; Check if the lr is of the current mode cmp r0, r2 moveq LR, r1 - beq write_lr_out + beq write_lr_out ; Check if the lr is of user mode cmp r0, #0x10 msreq LR_usr, r1 beq write_lr_out - ; Check if the lr is of supervisor mode + ; Check if the lr is of supervisor mode cmp r0, #0x13 msreq LR_svc, r1 write_lr_out @@ -968,7 +968,7 @@ write_lr_out ENDFUNC read_sp FUNCTION - ; Save r1 + ; Save r1 push {r1} and r0, r0, #0x1f ; Read the current cpsr @@ -977,30 +977,30 @@ read_sp FUNCTION ; Check if the desired sp is of the current mode cmp r0, r1 moveq r0, SP - beq read_sp_out + beq read_sp_out ; Check if desired sp is of user mode cmp r0, #0x10 mrseq r0, SP_usr beq read_sp_out - ; Check if desired sp is of supervisor mode + ; Check if desired sp is of supervisor mode cmp r0, #0x13 mrseq r0, SP_svc beq read_sp_out - ; Check if desired sp is of irq mode + ; Check if desired sp is of irq mode cmp r0, #0x12 mrseq r0, SP_irq - beq read_sp_out - ; Check if desired sp is of supervisor mode + beq read_sp_out + ; Check if desired sp is of supervisor mode cmp r0, #0x1a mrseq r0, SP_hyp beq read_sp_out - ; Check if desired sp is of monitor mode + ; Check if desired sp is of monitor mode cmp r0, #0x16 - mrseq r0, SP_mon + mrseq r0, SP_mon read_sp_out pop {r1} bx lr - ENDFUNC + ENDFUNC write_sp FUNCTION ; Save r2 @@ -1012,32 +1012,32 @@ write_sp FUNCTION ; Check if the sp is of the current mode cmp r0, r2 moveq SP, r1 - beq write_sp_out + beq write_sp_out ; Check if the sp is of user mode cmp r0, #0x10 msreq SP_usr, r1 beq write_sp_out - ; Check if the sp is of supervisor mode + ; Check if the sp is of supervisor mode cmp r0, #0x13 msreq SP_svc, r1 beq write_sp_out - ; Check if the sp is of irq mode + ; Check if the sp is of irq mode cmp r0, #0x12 msreq SP_irq, r1 - beq write_sp_out - ; Check if the sp is of hyp mode + beq write_sp_out + ; Check if the sp is of hyp mode cmp r0, #0x1a msreq SP_hyp, r1 beq write_sp_out - ; Check if the sp is of monitor mode + ; Check if the sp is of monitor mode cmp r0, #0x16 - msreq SP_mon, r1 + msreq SP_mon, r1 write_sp_out pop {r2} bx lr - ENDFUNC + ENDFUNC - ALIGN 4 + ALIGN 4 ;-------------------------------------------------------- ; spin_lock @@ -1053,7 +1053,7 @@ sl_tryloop MCR p15, 0, r0, c7, c10, 4 bx lr ENDFUNC - + ;-------------------------------------------------------- ; spin_lock ;-------------------------------------------------------- @@ -1064,10 +1064,10 @@ spin_trylock FUNCTION STREXEQ r1, r2, [r0] MOV r0, r1 MCR p15, 0, r0, c7, c10, 4 - bx lr + bx lr ENDFUNC - - ALIGN 4 + + ALIGN 4 ;-------------------------------------------------------- ; spin_unlock @@ -1076,28 +1076,28 @@ spin_unlock FUNCTION MOV r1, #0 STR r1, [r0] MCR p15, 0, r0, c7, c10, 4 - bx lr + bx lr ENDFUNC - - ALIGN 4 + + ALIGN 4 ;-------------------------------------------------------- ; panic ;-------------------------------------------------------- panic FUNCTION isb - dsb + dsb CPSID aif - B panic + B panic ENDFUNC ;-------------------------------------------------------------- ; Utility function that takes a pointer (r0), stack size (r1). -; It returns the pointer to the stack offset for the asked cpu -;-------------------------------------------------------------- +; It returns the pointer to the stack offset for the asked cpu +;-------------------------------------------------------------- get_sp FUNCTION ldr r2, =0x2c001800 - ldr r2, [r2] + ldr r2, [r2] and r2, r2, #0xff clz r2, r2 mov r3, #32 @@ -1105,7 +1105,7 @@ get_sp FUNCTION mul r2, r2, r1 add r0, r0, r2 bx lr - ENDFUNC + ENDFUNC disable_coherency FUNCTION push {lr} @@ -1113,81 +1113,81 @@ disable_coherency FUNCTION bic r0, r0, #0x40 bl write_actlr isb - dsb + dsb pop {lr} bx lr ENDFUNC - + enable_coherency FUNCTION push {lr} bl read_actlr orr r0, r0, #0x40 bl write_actlr isb - dsb + dsb pop {lr} - bx lr + bx lr ENDFUNC inv_bpred_is FUNCTION mcr p15, 0, r0, c7, c1, 6 bx lr ENDFUNC - + inv_bpred_all FUNCTION mcr p15, 0, r0, c7, c5, 6 bx lr ENDFUNC - + inv_tlb_all FUNCTION mcr p15, 0, r0, c8, c7, 0 isb - dsb + dsb bx lr ENDFUNC - + inv_icache_all FUNCTION mcr p15, 0, r10, c7, c5, 0 ; invalidate I cache isb dsb bx lr ENDFUNC - + inv_icache_mva_pou FUNCTION mcr p15, 0, r0, c7, c5, 1 isb dsb bx lr ENDFUNC - + cln_dcache_mva_pou FUNCTION mcr p15, 0, r0, c7, c11, 1 isb dsb bx lr ENDFUNC - + cln_dcache_mva_poc FUNCTION mcr p15, 0, r0, c7, c10, 1 isb dsb - bx lr + bx lr ENDFUNC inv_dcache_mva_poc FUNCTION mcr p15, 0, r0, c7, c6, 1 isb dsb - bx lr - ENDFUNC - + bx lr + ENDFUNC + ; Clean/Invalidate/Clean and invalidate a specified cache level. ; Ignore if the level does not exist. cache_maint_op FUNCTION push {r4-r11} dsb lsl r10, r0, #1 ; start clean at specified cache level - mrc p15, 1, r0, c0, c0, 1 ; read clidr + mrc p15, 1, r0, c0, c0, 1 ; read clidr 10 add r2, r10, r10, lsr #1 ; work out 3x current cache level mov r3, r0, lsr r2 ; extract cache type bits from clidr @@ -1206,12 +1206,12 @@ cache_maint_op FUNCTION ands r7, r7, r3, lsr #13 ; extract max number of the index size 20 mov r9, r4 ; create working copy of max way size -30 +30 orr r11, r10, r9, lsl r5 ; factor way and cache number into r11 - lsl r6, r9, r5 + lsl r6, r9, r5 orr r11, r10, r6 ; factor way and cache number into r11 orr r11, r11, r7, lsl r2 ; factor index number into r11 - lsl r6, r7, r2 + lsl r6, r7, r2 orr r11, r11, r6 ; factor index number into r11 cmp r1, #INV mcreq p15, 0, r11, c7, c6, 2 ; invalidate by set/way @@ -1221,7 +1221,7 @@ cache_maint_op FUNCTION beq %f40 mcr p15, 0, r11, c7, c14, 2 ; clean & invalidate by set/way ; nop ; nop -40 +40 subs r9, r9, #1 ; decrement the way bge %b30 subs r7, r7, #1 ; decrement the index @@ -1231,9 +1231,9 @@ cache_maint_op FUNCTION mcr p15, 2, r10, c0, c0, 0 ; select current cache level in cssr dsb isb - pop {r4-r11} + pop {r4-r11} bx lr - ENDFUNC + ENDFUNC enable_user_perfmon_access FUNCTION ; V7 and above mov r0, #1 @@ -1269,7 +1269,7 @@ enter_monitor_mode FUNCTION bx lr ENDFUNC -enter_nonsecure_world FUNCTION +enter_nonsecure_world FUNCTION push {r4-r7} mov r4, sp ; Save current sp mov r5, lr ; Save current lr @@ -1282,9 +1282,9 @@ enter_nonsecure_world FUNCTION hyp_entry ; We are now in HYP mode ; Set the HYP spsr to itself, so that the entry point ; does not see the difference between a function call - ; and an exception return. - msr spsr_cxsf, r7 - blx r0 + ; and an exception return. + msr spsr_cxsf, r7 + blx r0 msr spsr_cxsf, r6 ; Setup SPSR to jump to NS SVC mode adr r7, ns_svc_entry msr elr_hyp, r7 @@ -1294,7 +1294,7 @@ ns_svc_entry mov lr, r5 pop {r4-r7} bx lr - ENDFUNC + ENDFUNC enable_pmu FUNCTION mov r0, #0x0000003f @@ -1311,10 +1311,10 @@ enable_pmu FUNCTION mcr p15, 0, r1, c9, c12, 1 ; Enable counters isb mov r0, #0x3 - mrc p15, 0, r1, c9, c12, 0 ; + mrc p15, 0, r1, c9, c12, 0 ; orr r1, r1, r0 mcr p15, 0, r1, c9, c12, 0 ; Reset and Master Enable counters bx lr ENDFUNC - + END |