/* * Copyright (c) 2013-2014, ARM Limited and Contributors. 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 following disclaimer. * * Redistributions in binary form must reproduce the 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. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include #include .globl read_vbar_el1 .globl read_vbar_el2 .globl read_vbar_el3 .globl write_vbar_el1 .globl write_vbar_el2 .globl write_vbar_el3 .globl read_sctlr_el1 .globl read_sctlr_el2 .globl read_sctlr_el3 .globl write_sctlr_el1 .globl write_sctlr_el2 .globl write_sctlr_el3 .globl read_actlr_el1 .globl read_actlr_el2 .globl read_actlr_el3 .globl write_actlr_el1 .globl write_actlr_el2 .globl write_actlr_el3 .globl read_esr_el1 .globl read_esr_el2 .globl read_esr_el3 .globl write_esr_el1 .globl write_esr_el2 .globl write_esr_el3 .globl read_afsr0_el1 .globl read_afsr0_el2 .globl read_afsr0_el3 .globl write_afsr0_el1 .globl write_afsr0_el2 .globl write_afsr0_el3 .globl read_afsr1_el1 .globl read_afsr1_el2 .globl read_afsr1_el3 .globl write_afsr1_el1 .globl write_afsr1_el2 .globl write_afsr1_el3 .globl read_far_el1 .globl read_far_el2 .globl read_far_el3 .globl write_far_el1 .globl write_far_el2 .globl write_far_el3 .globl read_mair_el1 .globl read_mair_el2 .globl read_mair_el3 .globl write_mair_el1 .globl write_mair_el2 .globl write_mair_el3 .globl read_amair_el1 .globl read_amair_el2 .globl read_amair_el3 .globl write_amair_el1 .globl write_amair_el2 .globl write_amair_el3 .globl read_rvbar_el1 .globl read_rvbar_el2 .globl read_rvbar_el3 .globl read_rmr_el1 .globl read_rmr_el2 .globl read_rmr_el3 .globl write_rmr_el1 .globl write_rmr_el2 .globl write_rmr_el3 .globl read_tcr_el1 .globl read_tcr_el2 .globl read_tcr_el3 .globl write_tcr_el1 .globl write_tcr_el2 .globl write_tcr_el3 .globl read_cptr_el2 .globl read_cptr_el3 .globl write_cptr_el2 .globl write_cptr_el3 .globl read_ttbr0_el1 .globl read_ttbr0_el2 .globl read_ttbr0_el3 .globl write_ttbr0_el1 .globl write_ttbr0_el2 .globl write_ttbr0_el3 .globl read_ttbr1_el1 .globl read_ttbr1_el2 .globl write_ttbr1 .globl write_ttbr1_el1 .globl write_ttbr1_el2 .globl read_cpacr .globl write_cpacr .globl read_cntfrq .globl write_cntfrq .globl read_cpuectlr .globl write_cpuectlr .globl read_cnthctl_el2 .globl write_cnthctl_el2 .globl read_cntfrq_el0 .globl write_cntfrq_el0 .globl read_scr .globl write_scr .globl read_hcr .globl write_hcr .globl read_midr .globl read_mpidr .globl read_current_el .globl read_id_pfr1_el1 .globl read_id_aa64pfr0_el1 #if SUPPORT_VFP .globl enable_vfp .globl read_fpexc .globl write_fpexc #endif func read_current_el mrs x0, CurrentEl ret func read_id_pfr1_el1 mrs x0, id_pfr1_el1 ret func read_id_aa64pfr0_el1 mrs x0, id_aa64pfr0_el1 ret /* ----------------------------------------------------- * VBAR accessors * ----------------------------------------------------- */ func read_vbar_el1 mrs x0, vbar_el1 ret func read_vbar_el2 mrs x0, vbar_el2 ret func read_vbar_el3 mrs x0, vbar_el3 ret func write_vbar_el1 msr vbar_el1, x0 isb ret func write_vbar_el2 msr vbar_el2, x0 isb ret func write_vbar_el3 msr vbar_el3, x0 isb ret /* ----------------------------------------------------- * AFSR0 accessors * ----------------------------------------------------- */ func read_afsr0_el1 mrs x0, afsr0_el1 ret func read_afsr0_el2 mrs x0, afsr0_el2 ret func read_afsr0_el3 mrs x0, afsr0_el3 ret func write_afsr0_el1 msr afsr0_el1, x0 isb ret func write_afsr0_el2 msr afsr0_el2, x0 isb ret func write_afsr0_el3 msr afsr0_el3, x0 isb ret /* ----------------------------------------------------- * FAR accessors * ----------------------------------------------------- */ func read_far_el1 mrs x0, far_el1 ret func read_far_el2 mrs x0, far_el2 ret func read_far_el3 mrs x0, far_el3 ret func write_far_el1 msr far_el1, x0 isb ret func write_far_el2 msr far_el2, x0 isb ret func write_far_el3 msr far_el3, x0 isb ret /* ----------------------------------------------------- * MAIR accessors * ----------------------------------------------------- */ func read_mair_el1 mrs x0, mair_el1 ret func read_mair_el2 mrs x0, mair_el2 ret func read_mair_el3 mrs x0, mair_el3 ret func write_mair_el1 msr mair_el1, x0 isb ret func write_mair_el2 msr mair_el2, x0 isb ret func write_mair_el3 msr mair_el3, x0 isb ret /* ----------------------------------------------------- * AMAIR accessors * ----------------------------------------------------- */ func read_amair_el1 mrs x0, amair_el1 ret func read_amair_el2 mrs x0, amair_el2 ret func read_amair_el3 mrs x0, amair_el3 ret func write_amair_el1 msr amair_el1, x0 isb ret func write_amair_el2 msr amair_el2, x0 isb ret func write_amair_el3 msr amair_el3, x0 isb ret /* ----------------------------------------------------- * RVBAR accessors * ----------------------------------------------------- */ func read_rvbar_el1 mrs x0, rvbar_el1 ret func read_rvbar_el2 mrs x0, rvbar_el2 ret func read_rvbar_el3 mrs x0, rvbar_el3 ret /* ----------------------------------------------------- * RMR accessors * ----------------------------------------------------- */ func read_rmr_el1 mrs x0, rmr_el1 ret func read_rmr_el2 mrs x0, rmr_el2 ret func read_rmr_el3 mrs x0, rmr_el3 ret func write_rmr_el1 msr rmr_el1, x0 isb ret func write_rmr_el2 msr rmr_el2, x0 isb ret func write_rmr_el3 msr rmr_el3, x0 isb ret /* ----------------------------------------------------- * AFSR1 accessors * ----------------------------------------------------- */ func read_afsr1_el1 mrs x0, afsr1_el1 ret func read_afsr1_el2 mrs x0, afsr1_el2 ret func read_afsr1_el3 mrs x0, afsr1_el3 ret func write_afsr1_el1 msr afsr1_el1, x0 isb ret func write_afsr1_el2 msr afsr1_el2, x0 isb ret func write_afsr1_el3 msr afsr1_el3, x0 isb ret /* ----------------------------------------------------- * SCTLR accessors * ----------------------------------------------------- */ func read_sctlr_el1 mrs x0, sctlr_el1 ret func read_sctlr_el2 mrs x0, sctlr_el2 ret func read_sctlr_el3 mrs x0, sctlr_el3 ret func write_sctlr_el1 msr sctlr_el1, x0 dsb sy isb ret func write_sctlr_el2 msr sctlr_el2, x0 dsb sy isb ret func write_sctlr_el3 msr sctlr_el3, x0 dsb sy isb ret /* ----------------------------------------------------- * ACTLR accessors * ----------------------------------------------------- */ func read_actlr_el1 mrs x0, actlr_el1 ret func read_actlr_el2 mrs x0, actlr_el2 ret func read_actlr_el3 mrs x0, actlr_el3 ret func write_actlr_el1 msr actlr_el1, x0 dsb sy isb ret func write_actlr_el2 msr actlr_el2, x0 dsb sy isb ret func write_actlr_el3 msr actlr_el3, x0 dsb sy isb ret /* ----------------------------------------------------- * ESR accessors * ----------------------------------------------------- */ func read_esr_el1 mrs x0, esr_el1 ret func read_esr_el2 mrs x0, esr_el2 ret func read_esr_el3 mrs x0, esr_el3 ret func write_esr_el1 msr esr_el1, x0 dsb sy isb ret func write_esr_el2 msr esr_el2, x0 dsb sy isb ret func write_esr_el3 msr esr_el3, x0 dsb sy isb ret /* ----------------------------------------------------- * TCR accessors * ----------------------------------------------------- */ func read_tcr_el1 mrs x0, tcr_el1 ret func read_tcr_el2 mrs x0, tcr_el2 ret func read_tcr_el3 mrs x0, tcr_el3 ret func write_tcr_el1 msr tcr_el1, x0 dsb sy isb ret func write_tcr_el2 msr tcr_el2, x0 dsb sy isb ret func write_tcr_el3 msr tcr_el3, x0 dsb sy isb ret /* ----------------------------------------------------- * CPTR accessors * ----------------------------------------------------- */ func read_cptr_el1 b read_cptr_el1 ret func read_cptr_el2 mrs x0, cptr_el2 ret func read_cptr_el3 mrs x0, cptr_el3 ret func write_cptr_el1 b write_cptr_el1 func write_cptr_el2 msr cptr_el2, x0 dsb sy isb ret func write_cptr_el3 msr cptr_el3, x0 dsb sy isb ret /* ----------------------------------------------------- * TTBR0 accessors * ----------------------------------------------------- */ func read_ttbr0_el1 mrs x0, ttbr0_el1 ret func read_ttbr0_el2 mrs x0, ttbr0_el2 ret func read_ttbr0_el3 mrs x0, ttbr0_el3 ret func write_ttbr0_el1 msr ttbr0_el1, x0 isb ret func write_ttbr0_el2 msr ttbr0_el2, x0 isb ret func write_ttbr0_el3 msr ttbr0_el3, x0 isb ret /* ----------------------------------------------------- * TTBR1 accessors * ----------------------------------------------------- */ func read_ttbr1_el1 mrs x0, ttbr1_el1 ret func read_ttbr1_el2 b read_ttbr1_el2 func read_ttbr1_el3 b read_ttbr1_el3 func write_ttbr1_el1 msr ttbr1_el1, x0 isb ret func write_ttbr1_el2 b write_ttbr1_el2 func write_ttbr1_el3 b write_ttbr1_el3 func read_hcr mrs x0, hcr_el2 ret func write_hcr msr hcr_el2, x0 dsb sy isb ret func read_cpacr mrs x0, cpacr_el1 ret func write_cpacr msr cpacr_el1, x0 ret func read_cntfrq_el0 mrs x0, cntfrq_el0 ret func write_cntfrq_el0 msr cntfrq_el0, x0 ret func read_cpuectlr mrs x0, CPUECTLR_EL1 ret func write_cpuectlr msr CPUECTLR_EL1, x0 dsb sy isb ret func read_cnthctl_el2 mrs x0, cnthctl_el2 ret func write_cnthctl_el2 msr cnthctl_el2, x0 ret func read_cntfrq mrs x0, cntfrq_el0 ret func write_cntfrq msr cntfrq_el0, x0 ret func write_scr msr scr_el3, x0 dsb sy isb ret func read_scr mrs x0, scr_el3 ret func read_midr mrs x0, midr_el1 ret func read_mpidr mrs x0, mpidr_el1 ret #if SUPPORT_VFP func enable_vfp mrs x0, cpacr_el1 orr x0, x0, #CPACR_VFP_BITS msr cpacr_el1, x0 mrs x0, cptr_el3 mov x1, #AARCH64_CPTR_TFP bic x0, x0, x1 msr cptr_el3, x0 ret func read_fpexc b read_fpexc ret func write_fpexc b write_fpexc ret #endif