/*
 * 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 <arch_helpers.h>
#include <asm_macros.S>

	.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
