diff --git a/Makefile b/Makefile index 22f1fd6..9131f1c 100644 --- a/Makefile +++ b/Makefile @@ -75,7 +75,6 @@ common/debug.c \ lib/aarch64/cache_helpers.S \ lib/aarch64/misc_helpers.S \ - lib/aarch64/tlb_helpers.S \ lib/aarch64/xlat_helpers.c \ lib/stdlib/std.c \ lib/io_storage.c \ diff --git a/drivers/arm/gic/aarch64/gic_v3_sysregs.S b/drivers/arm/gic/aarch64/gic_v3_sysregs.S deleted file mode 100644 index ddf85a8..0000000 --- a/drivers/arm/gic/aarch64/gic_v3_sysregs.S +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 - - .globl read_icc_sre_el1 - .globl read_icc_sre_el2 - .globl read_icc_sre_el3 - .globl write_icc_sre_el1 - .globl write_icc_sre_el2 - .globl write_icc_sre_el3 - .globl write_icc_pmr_el1 - - -/* - * Register definitions used by GCC for GICv3 access. - * These are defined by ARMCC, so keep them in the GCC specific code for now. - */ -#define ICC_SRE_EL1 S3_0_C12_C12_5 -#define ICC_SRE_EL2 S3_4_C12_C9_5 -#define ICC_SRE_EL3 S3_6_C12_C12_5 -#define ICC_CTLR_EL1 S3_0_C12_C12_4 -#define ICC_CTLR_EL3 S3_6_C12_C12_4 -#define ICC_PMR_EL1 S3_0_C4_C6_0 - -func read_icc_sre_el1 - mrs x0, ICC_SRE_EL1 - ret - - -func read_icc_sre_el2 - mrs x0, ICC_SRE_EL2 - ret - - -func read_icc_sre_el3 - mrs x0, ICC_SRE_EL3 - ret - - -func write_icc_sre_el1 - msr ICC_SRE_EL1, x0 - ret - - -func write_icc_sre_el2 - msr ICC_SRE_EL2, x0 - ret - - -func write_icc_sre_el3 - msr ICC_SRE_EL3, x0 - ret - - -func write_icc_pmr_el1 - msr ICC_PMR_EL1, x0 - ret diff --git a/include/drivers/arm/gic_v3.h b/include/drivers/arm/gic_v3.h index 0f99994..c410626 100644 --- a/include/drivers/arm/gic_v3.h +++ b/include/drivers/arm/gic_v3.h @@ -68,14 +68,6 @@ ******************************************************************************/ uintptr_t gicv3_get_rdist(uintptr_t gicr_base, uint64_t mpidr); -unsigned int read_icc_sre_el1(void); -unsigned int read_icc_sre_el2(void); -unsigned int read_icc_sre_el3(void); -void write_icc_sre_el1(unsigned int); -void write_icc_sre_el2(unsigned int); -void write_icc_sre_el3(unsigned int); -void write_icc_pmr_el1(unsigned int); - /******************************************************************************* * GIC Redistributor interface accessors ******************************************************************************/ diff --git a/include/lib/aarch64/arch.h b/include/lib/aarch64/arch.h index d89b4fe..0bfbd66 100644 --- a/include/lib/aarch64/arch.h +++ b/include/lib/aarch64/arch.h @@ -65,6 +65,16 @@ #define FIRST_MPIDR 0 /******************************************************************************* + * Definitions for CPU system register interface to GICv3 + ******************************************************************************/ +#define ICC_SRE_EL1 S3_0_C12_C12_5 +#define ICC_SRE_EL2 S3_4_C12_C9_5 +#define ICC_SRE_EL3 S3_6_C12_C12_5 +#define ICC_CTLR_EL1 S3_0_C12_C12_4 +#define ICC_CTLR_EL3 S3_6_C12_C12_4 +#define ICC_PMR_EL1 S3_0_C4_C6_0 + +/******************************************************************************* * Implementation defined sysreg encodings ******************************************************************************/ #define CPUECTLR_EL1 S3_1_C15_C2_1 diff --git a/include/lib/aarch64/arch_helpers.h b/include/lib/aarch64/arch_helpers.h index f16c4b5..1ca3350 100644 --- a/include/lib/aarch64/arch_helpers.h +++ b/include/lib/aarch64/arch_helpers.h @@ -31,52 +31,115 @@ #ifndef __ARCH_HELPERS_H__ #define __ARCH_HELPERS_H__ -#include /* For __dead2 */ +#include /* for additional register definitions */ +#include /* For __dead2 */ +#include +/********************************************************************** + * Macros which create inline functions to read or write CPU system + * registers + *********************************************************************/ + +#define _DEFINE_SYSREG_READ_FUNC(_name, _reg_name) \ +static inline uint64_t read_ ## _name(void) \ +{ \ + uint64_t v; \ + __asm__ ("mrs %0, " #_reg_name : "=r" (v)); \ + return v; \ +} + +#define _DEFINE_SYSREG_WRITE_FUNC(_name, _reg_name) \ +static inline void write_ ## _name(uint64_t v) \ +{ \ + __asm__ ("msr " #_reg_name ", %0" : : "r" (v)); \ +} + +#define _DEFINE_SYSREG_WRITE_CONST_FUNC(_name, _reg_name) \ +static inline void write_ ## _name(const uint64_t v) \ +{ \ + __asm__ ("msr " #_reg_name ", %0" : : "i" (v)); \ +} + +/* Define read function for system register */ +#define DEFINE_SYSREG_READ_FUNC(_name) \ + _DEFINE_SYSREG_READ_FUNC(_name, _name) + +/* Define read & write function for system register */ +#define DEFINE_SYSREG_RW_FUNCS(_name) \ + _DEFINE_SYSREG_READ_FUNC(_name, _name) \ + _DEFINE_SYSREG_WRITE_FUNC(_name, _name) + +/* Define read & write function for renamed system register */ +#define DEFINE_RENAME_SYSREG_RW_FUNCS(_name, _reg_name) \ + _DEFINE_SYSREG_READ_FUNC(_name, _reg_name) \ + _DEFINE_SYSREG_WRITE_FUNC(_name, _reg_name) + +/* Define write function for special system registers */ +#define DEFINE_SYSREG_WRITE_CONST_FUNC(_name) \ + _DEFINE_SYSREG_WRITE_CONST_FUNC(_name, _name) + + +/********************************************************************** + * Macros to create inline functions for system instructions + *********************************************************************/ + +/* Define function for simple system instruction */ +#define DEFINE_SYSOP_FUNC(_op) \ +static inline void _op() \ +{ \ + __asm__ (#_op); \ +} + +/* Define function for system instruction with type specifier */ +#define DEFINE_SYSOP_TYPE_FUNC(_op, _type) \ +static inline void _op ## _type() \ +{ \ + __asm__ (#_op " " #_type); \ +} + +/* Define function for system instruction with register parameter */ +#define DEFINE_SYSOP_TYPE_PARAM_FUNC(_op, _type) \ +static inline void _op ## _type(uint64_t v) \ +{ \ + __asm__ (#_op " " #_type ", %0" : : "r" (v)); \ +} /******************************************************************************* * Aarch64 translation tables manipulation helper prototypes - ******************************************************************************/ -unsigned long create_table_desc(unsigned long *next_table_ptr); -unsigned long create_block_desc(unsigned long desc, - unsigned long addr, - unsigned int level); -unsigned long create_device_block(unsigned long output_addr, - unsigned int level, - unsigned int ns); -unsigned long create_romem_block(unsigned long output_addr, - unsigned int level, - unsigned int ns); -unsigned long create_rwmem_block(unsigned long output_addr, - unsigned int level, - unsigned int ns); +******************************************************************************/ +uint64_t create_table_desc(uint64_t *next_table_ptr); +uint64_t create_block_desc(uint64_t desc, uint64_t addr, uint32_t level); +uint64_t create_device_block(uint64_t output_addr, uint32_t level, uint32_t ns); +uint64_t create_romem_block(uint64_t output_addr, uint32_t level, uint32_t ns); +uint64_t create_rwmem_block(uint64_t output_addr, uint32_t level, uint32_t ns); /******************************************************************************* * TLB maintenance accessor prototypes ******************************************************************************/ -void tlbialle1(void); -void tlbialle1is(void); -void tlbialle2(void); -void tlbialle2is(void); -void tlbialle3(void); -void tlbialle3is(void); -void tlbivmalle1(void); +DEFINE_SYSOP_TYPE_FUNC(tlbi, alle1) +DEFINE_SYSOP_TYPE_FUNC(tlbi, alle1is) +DEFINE_SYSOP_TYPE_FUNC(tlbi, alle2) +DEFINE_SYSOP_TYPE_FUNC(tlbi, alle2is) +DEFINE_SYSOP_TYPE_FUNC(tlbi, alle3) +DEFINE_SYSOP_TYPE_FUNC(tlbi, alle3is) +DEFINE_SYSOP_TYPE_FUNC(tlbi, vmalle1) /******************************************************************************* * Cache maintenance accessor prototypes ******************************************************************************/ -void dcisw(unsigned long); -void dccisw(unsigned long); -void dccsw(unsigned long); -void dccvac(unsigned long); -void dcivac(unsigned long); -void dccivac(unsigned long); -void dccvau(unsigned long); -void dczva(unsigned long); -void flush_dcache_range(unsigned long, unsigned long); -void inv_dcache_range(unsigned long, unsigned long); -void dcsw_op_louis(unsigned int); -void dcsw_op_all(unsigned int); +DEFINE_SYSOP_TYPE_PARAM_FUNC(dc, isw) +DEFINE_SYSOP_TYPE_PARAM_FUNC(dc, cisw) +DEFINE_SYSOP_TYPE_PARAM_FUNC(dc, csw) +DEFINE_SYSOP_TYPE_PARAM_FUNC(dc, cvac) +DEFINE_SYSOP_TYPE_PARAM_FUNC(dc, ivac) +DEFINE_SYSOP_TYPE_PARAM_FUNC(dc, civac) +DEFINE_SYSOP_TYPE_PARAM_FUNC(dc, cvau) +DEFINE_SYSOP_TYPE_PARAM_FUNC(dc, zva) + +void flush_dcache_range(uint64_t, uint64_t); +void inv_dcache_range(uint64_t, uint64_t); +void dcsw_op_louis(uint32_t); +void dcsw_op_all(uint32_t); void disable_mmu_el3(void); void disable_mmu_icache_el3(void); @@ -84,202 +147,159 @@ /******************************************************************************* * Misc. accessor prototypes ******************************************************************************/ -void enable_irq(void); -void enable_fiq(void); -void enable_serror(void); -void enable_debug_exceptions(void); -void disable_irq(void); -void disable_fiq(void); -void disable_serror(void); -void disable_debug_exceptions(void); +DEFINE_SYSREG_WRITE_CONST_FUNC(daifset) +DEFINE_SYSREG_WRITE_CONST_FUNC(daifclr) -unsigned long read_id_pfr1_el1(void); -unsigned long read_id_aa64pfr0_el1(void); -unsigned long read_current_el(void); -unsigned long read_daif(void); -unsigned long read_spsr_el1(void); -unsigned long read_spsr_el2(void); -unsigned long read_spsr_el3(void); -unsigned long read_elr_el1(void); -unsigned long read_elr_el2(void); -unsigned long read_elr_el3(void); +#define enable_irq() write_daifclr(DAIF_IRQ_BIT) +#define enable_fiq() write_daifclr(DAIF_FIQ_BIT) +#define enable_serror() write_daifclr(DAIF_ABT_BIT) +#define enable_debug_exceptions() write_daifclr(DAIF_DBG_BIT) +#define disable_irq() write_daifset(DAIF_IRQ_BIT) +#define disable_fiq() write_daifset(DAIF_FIQ_BIT) +#define disable_serror() write_daifset(DAIF_ABT_BIT) +#define disable_debug_exceptions() write_daifset(DAIF_DBG_BIT) -void write_daif(unsigned long); -void write_spsr_el1(unsigned long); -void write_spsr_el2(unsigned long); -void write_spsr_el3(unsigned long); -void write_elr_el1(unsigned long); -void write_elr_el2(unsigned long); -void write_elr_el3(unsigned long); +DEFINE_SYSREG_READ_FUNC(id_pfr1_el1) +DEFINE_SYSREG_READ_FUNC(id_aa64pfr0_el1) +DEFINE_SYSREG_READ_FUNC(CurrentEl) +DEFINE_SYSREG_RW_FUNCS(daif) +DEFINE_SYSREG_RW_FUNCS(spsr_el1) +DEFINE_SYSREG_RW_FUNCS(spsr_el2) +DEFINE_SYSREG_RW_FUNCS(spsr_el3) +DEFINE_SYSREG_RW_FUNCS(elr_el1) +DEFINE_SYSREG_RW_FUNCS(elr_el2) +DEFINE_SYSREG_RW_FUNCS(elr_el3) -void wfi(void); -void wfe(void); -void rfe(void); -void sev(void); -void dsb(void); -void isb(void); +DEFINE_SYSOP_FUNC(wfi) +DEFINE_SYSOP_FUNC(wfe) +DEFINE_SYSOP_FUNC(sev) +DEFINE_SYSOP_TYPE_FUNC(dsb, sy) +DEFINE_SYSOP_FUNC(isb) -unsigned int get_afflvl_shift(unsigned int); -unsigned int mpidr_mask_lower_afflvls(unsigned long, unsigned int); +uint32_t get_afflvl_shift(uint32_t); +uint32_t mpidr_mask_lower_afflvls(uint64_t, uint32_t); -void __dead2 eret(unsigned long, unsigned long, - unsigned long, unsigned long, - unsigned long, unsigned long, - unsigned long, unsigned long); -void __dead2 smc(unsigned long, unsigned long, - unsigned long, unsigned long, - unsigned long, unsigned long, - unsigned long, unsigned long); +void __dead2 eret(uint64_t x0, uint64_t x1, uint64_t x2, uint64_t x3, + uint64_t x4, uint64_t x5, uint64_t x6, uint64_t x7); +void __dead2 smc(uint64_t x0, uint64_t x1, uint64_t x2, uint64_t x3, + uint64_t x4, uint64_t x5, uint64_t x6, uint64_t x7); /******************************************************************************* * System register accessor prototypes ******************************************************************************/ -unsigned long read_midr(void); -unsigned long read_mpidr(void); +DEFINE_SYSREG_READ_FUNC(midr_el1) +DEFINE_SYSREG_READ_FUNC(mpidr_el1) -unsigned long read_scr(void); -unsigned long read_hcr(void); +DEFINE_SYSREG_RW_FUNCS(scr_el3) +DEFINE_SYSREG_RW_FUNCS(hcr_el2) -unsigned long read_vbar_el1(void); -unsigned long read_vbar_el2(void); -unsigned long read_vbar_el3(void); +DEFINE_SYSREG_RW_FUNCS(vbar_el1) +DEFINE_SYSREG_RW_FUNCS(vbar_el2) +DEFINE_SYSREG_RW_FUNCS(vbar_el3) -unsigned long read_sctlr_el1(void); -unsigned long read_sctlr_el2(void); -unsigned long read_sctlr_el3(void); +DEFINE_SYSREG_RW_FUNCS(sctlr_el1) +DEFINE_SYSREG_RW_FUNCS(sctlr_el2) +DEFINE_SYSREG_RW_FUNCS(sctlr_el3) -unsigned long read_actlr_el1(void); -unsigned long read_actlr_el2(void); -unsigned long read_actlr_el3(void); +DEFINE_SYSREG_RW_FUNCS(actlr_el1) +DEFINE_SYSREG_RW_FUNCS(actlr_el2) +DEFINE_SYSREG_RW_FUNCS(actlr_el3) -unsigned long read_esr_el1(void); -unsigned long read_esr_el2(void); -unsigned long read_esr_el3(void); +DEFINE_SYSREG_RW_FUNCS(esr_el1) +DEFINE_SYSREG_RW_FUNCS(esr_el2) +DEFINE_SYSREG_RW_FUNCS(esr_el3) -unsigned long read_afsr0_el1(void); -unsigned long read_afsr0_el2(void); -unsigned long read_afsr0_el3(void); +DEFINE_SYSREG_RW_FUNCS(afsr0_el1) +DEFINE_SYSREG_RW_FUNCS(afsr0_el2) +DEFINE_SYSREG_RW_FUNCS(afsr0_el3) -unsigned long read_afsr1_el1(void); -unsigned long read_afsr1_el2(void); -unsigned long read_afsr1_el3(void); +DEFINE_SYSREG_RW_FUNCS(afsr1_el1) +DEFINE_SYSREG_RW_FUNCS(afsr1_el2) +DEFINE_SYSREG_RW_FUNCS(afsr1_el3) -unsigned long read_far_el1(void); -unsigned long read_far_el2(void); -unsigned long read_far_el3(void); +DEFINE_SYSREG_RW_FUNCS(far_el1) +DEFINE_SYSREG_RW_FUNCS(far_el2) +DEFINE_SYSREG_RW_FUNCS(far_el3) -unsigned long read_mair_el1(void); -unsigned long read_mair_el2(void); -unsigned long read_mair_el3(void); +DEFINE_SYSREG_RW_FUNCS(mair_el1) +DEFINE_SYSREG_RW_FUNCS(mair_el2) +DEFINE_SYSREG_RW_FUNCS(mair_el3) -unsigned long read_amair_el1(void); -unsigned long read_amair_el2(void); -unsigned long read_amair_el3(void); +DEFINE_SYSREG_RW_FUNCS(amair_el1) +DEFINE_SYSREG_RW_FUNCS(amair_el2) +DEFINE_SYSREG_RW_FUNCS(amair_el3) -unsigned long read_rvbar_el1(void); -unsigned long read_rvbar_el2(void); -unsigned long read_rvbar_el3(void); +DEFINE_SYSREG_READ_FUNC(rvbar_el1) +DEFINE_SYSREG_READ_FUNC(rvbar_el2) +DEFINE_SYSREG_READ_FUNC(rvbar_el3) -unsigned long read_rmr_el1(void); -unsigned long read_rmr_el2(void); -unsigned long read_rmr_el3(void); +DEFINE_SYSREG_RW_FUNCS(rmr_el1) +DEFINE_SYSREG_RW_FUNCS(rmr_el2) +DEFINE_SYSREG_RW_FUNCS(rmr_el3) -unsigned long read_tcr_el1(void); -unsigned long read_tcr_el2(void); -unsigned long read_tcr_el3(void); +DEFINE_SYSREG_RW_FUNCS(tcr_el1) +DEFINE_SYSREG_RW_FUNCS(tcr_el2) +DEFINE_SYSREG_RW_FUNCS(tcr_el3) -unsigned long read_ttbr0_el1(void); -unsigned long read_ttbr0_el2(void); -unsigned long read_ttbr0_el3(void); +DEFINE_SYSREG_RW_FUNCS(ttbr0_el1) +DEFINE_SYSREG_RW_FUNCS(ttbr0_el2) +DEFINE_SYSREG_RW_FUNCS(ttbr0_el3) -unsigned long read_ttbr1_el1(void); +DEFINE_SYSREG_RW_FUNCS(ttbr1_el1) -unsigned long read_cptr_el2(void); -unsigned long read_cptr_el3(void); +DEFINE_SYSREG_RW_FUNCS(cptr_el2) +DEFINE_SYSREG_RW_FUNCS(cptr_el3) -unsigned long read_cpacr(void); -unsigned long read_cpuectlr(void); -unsigned int read_cntfrq_el0(void); -unsigned int read_cntps_ctl_el1(void); -unsigned int read_cntps_tval_el1(void); -unsigned long read_cntps_cval_el1(void); -unsigned long read_cntpct_el0(void); -unsigned long read_cnthctl_el2(void); +DEFINE_SYSREG_RW_FUNCS(cpacr_el1) +DEFINE_SYSREG_RW_FUNCS(cntfrq_el0) +DEFINE_SYSREG_RW_FUNCS(cntps_ctl_el1) +DEFINE_SYSREG_RW_FUNCS(cntps_tval_el1) +DEFINE_SYSREG_RW_FUNCS(cntps_cval_el1) +DEFINE_SYSREG_READ_FUNC(cntpct_el0) +DEFINE_SYSREG_RW_FUNCS(cnthctl_el2) -unsigned long read_tpidr_el3(void); +DEFINE_SYSREG_RW_FUNCS(tpidr_el3) -void write_scr(unsigned long); -void write_hcr(unsigned long); -void write_cpacr(unsigned long); -void write_cntfrq_el0(unsigned int); -void write_cntps_ctl_el1(unsigned int); -void write_cntps_tval_el1(unsigned int); -void write_cntps_cval_el1(unsigned long); -void write_cnthctl_el2(unsigned long); +/* Implementation specific registers */ -void write_vbar_el1(unsigned long); -void write_vbar_el2(unsigned long); -void write_vbar_el3(unsigned long); +DEFINE_RENAME_SYSREG_RW_FUNCS(cpuectlr_el1, CPUECTLR_EL1) -void write_sctlr_el1(unsigned long); -void write_sctlr_el2(unsigned long); -void write_sctlr_el3(unsigned long); +/* GICv3 System Registers */ -void write_actlr_el1(unsigned long); -void write_actlr_el2(unsigned long); -void write_actlr_el3(unsigned long); +DEFINE_RENAME_SYSREG_RW_FUNCS(icc_sre_el1, ICC_SRE_EL1) +DEFINE_RENAME_SYSREG_RW_FUNCS(icc_sre_el2, ICC_SRE_EL2) +DEFINE_RENAME_SYSREG_RW_FUNCS(icc_sre_el3, ICC_SRE_EL3) +DEFINE_RENAME_SYSREG_RW_FUNCS(icc_pmr_el1, ICC_PMR_EL1) -void write_esr_el1(unsigned long); -void write_esr_el2(unsigned long); -void write_esr_el3(unsigned long); - -void write_afsr0_el1(unsigned long); -void write_afsr0_el2(unsigned long); -void write_afsr0_el3(unsigned long); - -void write_afsr1_el1(unsigned long); -void write_afsr1_el2(unsigned long); -void write_afsr1_el3(unsigned long); - -void write_far_el1(unsigned long); -void write_far_el2(unsigned long); -void write_far_el3(unsigned long); - -void write_mair_el1(unsigned long); -void write_mair_el2(unsigned long); -void write_mair_el3(unsigned long); - -void write_amair_el1(unsigned long); -void write_amair_el2(unsigned long); -void write_amair_el3(unsigned long); - -void write_rmr_el1(unsigned long); -void write_rmr_el2(unsigned long); -void write_rmr_el3(unsigned long); - -void write_tcr_el1(unsigned long); -void write_tcr_el2(unsigned long); -void write_tcr_el3(unsigned long); - -void write_ttbr0_el1(unsigned long); -void write_ttbr0_el2(unsigned long); -void write_ttbr0_el3(unsigned long); - -void write_ttbr1_el1(unsigned long); - -void write_cpuectlr(unsigned long); -void write_cptr_el2(unsigned long); -void write_cptr_el3(unsigned long); - -void write_tpidr_el3(unsigned long); #define IS_IN_EL(x) \ - (GET_EL(read_current_el()) == MODE_EL##x) + (GET_EL(read_CurrentEl()) == MODE_EL##x) #define IS_IN_EL1() IS_IN_EL(1) #define IS_IN_EL3() IS_IN_EL(3) +/* Previously defined accesor functions with incomplete register names */ + +#define read_current_el() read_CurrentEl() + +#define dsb() dsbsy() + +#define read_midr() read_midr_el1() + +#define read_mpidr() read_mpidr_el1() + +#define read_scr() read_scr_el3() +#define write_scr(_v) write_scr_el3(_v) + +#define read_hcr() read_hcr_el2() +#define write_hcr(_v) write_hcr_el2(_v) + +#define read_cpuectlr() read_cpuectlr_el1() +#define write_cpuectlr(_v) write_cpuectlr_el1(_v) + +#define read_cpacr() read_cpacr_el1() +#define write_cpacr(_v) write_cpacr_el1(_v) #endif /* __ARCH_HELPERS_H__ */ diff --git a/lib/aarch64/cache_helpers.S b/lib/aarch64/cache_helpers.S index a5b918c..1c80550 100644 --- a/lib/aarch64/cache_helpers.S +++ b/lib/aarch64/cache_helpers.S @@ -31,59 +31,11 @@ #include #include - .globl dcisw - .globl dccisw - .globl dccsw - .globl dccvac - .globl dcivac - .globl dccivac - .globl dccvau - .globl dczva .globl flush_dcache_range .globl inv_dcache_range .globl dcsw_op_louis .globl dcsw_op_all -func dcisw - dc isw, x0 - ret - - -func dccisw - dc cisw, x0 - ret - - -func dccsw - dc csw, x0 - ret - - -func dccvac - dc cvac, x0 - ret - - -func dcivac - dc ivac, x0 - ret - - -func dccivac - dc civac, x0 - ret - - -func dccvau - dc cvau, x0 - ret - - -func dczva - dc zva, x0 - ret - - /* ------------------------------------------ * Clean+Invalidate from base address till * size. 'x0' = addr, 'x1' = size diff --git a/lib/aarch64/misc_helpers.S b/lib/aarch64/misc_helpers.S index e7ee015..439ca28 100644 --- a/lib/aarch64/misc_helpers.S +++ b/lib/aarch64/misc_helpers.S @@ -31,44 +31,8 @@ #include #include - .globl enable_irq - .globl disable_irq - - .globl enable_fiq - .globl disable_fiq - - .globl enable_serror - .globl disable_serror - - .globl enable_debug_exceptions - .globl disable_debug_exceptions - - .globl read_daif - .globl write_daif - - .globl read_spsr_el1 - .globl read_spsr_el2 - .globl read_spsr_el3 - - .globl write_spsr_el1 - .globl write_spsr_el2 - .globl write_spsr_el3 - - .globl read_elr_el1 - .globl read_elr_el2 - .globl read_elr_el3 - - .globl write_elr_el1 - .globl write_elr_el2 - .globl write_elr_el3 - .globl get_afflvl_shift .globl mpidr_mask_lower_afflvls - .globl dsb - .globl isb - .globl sev - .globl wfe - .globl wfi .globl eret .globl smc @@ -78,6 +42,10 @@ .globl disable_mmu_el3 .globl disable_mmu_icache_el3 +#if SUPPORT_VFP + .globl enable_vfp +#endif + func get_afflvl_shift cmp x0, #3 @@ -95,144 +63,6 @@ lsl x0, x0, x2 ret - /* ----------------------------------------------------- - * Asynchronous exception manipulation accessors - * ----------------------------------------------------- - */ -func enable_irq - msr daifclr, #DAIF_IRQ_BIT - ret - - -func enable_fiq - msr daifclr, #DAIF_FIQ_BIT - ret - - -func enable_serror - msr daifclr, #DAIF_ABT_BIT - ret - - -func enable_debug_exceptions - msr daifclr, #DAIF_DBG_BIT - ret - - -func disable_irq - msr daifset, #DAIF_IRQ_BIT - ret - - -func disable_fiq - msr daifset, #DAIF_FIQ_BIT - ret - - -func disable_serror - msr daifset, #DAIF_ABT_BIT - ret - - -func disable_debug_exceptions - msr daifset, #DAIF_DBG_BIT - ret - - -func read_daif - mrs x0, daif - ret - - -func write_daif - msr daif, x0 - ret - - -func read_spsr_el1 - mrs x0, spsr_el1 - ret - - -func read_spsr_el2 - mrs x0, spsr_el2 - ret - - -func read_spsr_el3 - mrs x0, spsr_el3 - ret - - -func write_spsr_el1 - msr spsr_el1, x0 - ret - - -func write_spsr_el2 - msr spsr_el2, x0 - ret - - -func write_spsr_el3 - msr spsr_el3, x0 - ret - - -func read_elr_el1 - mrs x0, elr_el1 - ret - - -func read_elr_el2 - mrs x0, elr_el2 - ret - - -func read_elr_el3 - mrs x0, elr_el3 - ret - - -func write_elr_el1 - msr elr_el1, x0 - ret - - -func write_elr_el2 - msr elr_el2, x0 - ret - - -func write_elr_el3 - msr elr_el3, x0 - ret - - -func dsb - dsb sy - ret - - -func isb - isb - ret - - -func sev - sev - ret - - -func wfe - wfe - ret - - -func wfi - wfi - ret - func eret eret @@ -315,3 +145,20 @@ mov x1, #(SCTLR_M_BIT | SCTLR_C_BIT | SCTLR_I_BIT) b do_disable_mmu + +/* --------------------------------------------------------------------------- + * Enable the use of VFP at EL3 + * --------------------------------------------------------------------------- + */ +#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 + isb + ret +#endif diff --git a/lib/aarch64/sysreg_helpers.S b/lib/aarch64/sysreg_helpers.S deleted file mode 100644 index 925e93e..0000000 --- a/lib/aarch64/sysreg_helpers.S +++ /dev/null @@ -1,782 +0,0 @@ -/* - * 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 write_ttbr1_el1 - - .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_cntps_ctl_el1 - .globl write_cntps_ctl_el1 - - .globl read_cntps_cval_el1 - .globl write_cntps_cval_el1 - - .globl read_cntps_tval_el1 - .globl write_cntps_tval_el1 - - .globl read_scr - .globl write_scr - - .globl read_hcr - .globl write_hcr - - .globl read_midr - .globl read_mpidr - - .globl read_cntpct_el0 - .globl read_current_el - .globl read_id_pfr1_el1 - .globl read_id_aa64pfr0_el1 - - .globl write_tpidr_el3 - .globl read_tpidr_el3 - -#if SUPPORT_VFP - .globl enable_vfp -#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 - ret - - -func write_vbar_el2 - msr vbar_el2, x0 - ret - - -func write_vbar_el3 - msr vbar_el3, x0 - 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 - ret - - -func write_afsr0_el2 - msr afsr0_el2, x0 - ret - - -func write_afsr0_el3 - msr afsr0_el3, x0 - 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 - ret - - -func write_far_el2 - msr far_el2, x0 - ret - - -func write_far_el3 - msr far_el3, x0 - 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 - ret - - -func write_mair_el2 - msr mair_el2, x0 - ret - - -func write_mair_el3 - msr mair_el3, x0 - 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 - ret - - -func write_amair_el2 - msr amair_el2, x0 - ret - - -func write_amair_el3 - msr amair_el3, x0 - 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 - ret - - -func write_rmr_el2 - msr rmr_el2, x0 - ret - - -func write_rmr_el3 - msr rmr_el3, x0 - 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 - ret - - -func write_afsr1_el2 - msr afsr1_el2, x0 - ret - - -func write_afsr1_el3 - msr afsr1_el3, x0 - 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 - ret - - -func write_sctlr_el2 - msr sctlr_el2, x0 - ret - - -func write_sctlr_el3 - msr sctlr_el3, x0 - 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 - ret - - -func write_actlr_el2 - msr actlr_el2, x0 - ret - - -func write_actlr_el3 - msr actlr_el3, x0 - 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 - ret - - -func write_esr_el2 - msr esr_el2, x0 - ret - - -func write_esr_el3 - msr esr_el3, x0 - 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 - ret - - -func write_tcr_el2 - msr tcr_el2, x0 - ret - - -func write_tcr_el3 - msr tcr_el3, x0 - ret - - - /* ----------------------------------------------------- - * CPTR accessors - * ----------------------------------------------------- - */ -func read_cptr_el2 - mrs x0, cptr_el2 - ret - - -func read_cptr_el3 - mrs x0, cptr_el3 - ret - - -func write_cptr_el2 - msr cptr_el2, x0 - ret - - -func write_cptr_el3 - msr cptr_el3, x0 - 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 - ret - - -func write_ttbr0_el2 - msr ttbr0_el2, x0 - ret - - -func write_ttbr0_el3 - msr ttbr0_el3, x0 - ret - - - /* ----------------------------------------------------- - * TTBR1 accessors - * ----------------------------------------------------- - */ -func read_ttbr1_el1 - mrs x0, ttbr1_el1 - ret - - -func write_ttbr1_el1 - msr ttbr1_el1, x0 - ret - - -func read_hcr - mrs x0, hcr_el2 - ret - - -func write_hcr - msr hcr_el2, x0 - 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_cntps_ctl_el1 - mrs x0, cntps_ctl_el1 - ret - -func write_cntps_ctl_el1 - msr cntps_ctl_el1, x0 - ret - -func read_cntps_cval_el1 - mrs x0, cntps_cval_el1 - ret - -func write_cntps_cval_el1 - msr cntps_cval_el1, x0 - ret - -func read_cntps_tval_el1 - mrs x0, cntps_tval_el1 - ret - -func write_cntps_tval_el1 - msr cntps_tval_el1, x0 - ret - -func read_cntpct_el0 - mrs x0, cntpct_el0 - ret - -func read_cpuectlr - mrs x0, CPUECTLR_EL1 - ret - - -func write_cpuectlr - msr CPUECTLR_EL1, x0 - 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 - 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 - -func write_tpidr_el3 - msr tpidr_el3, x0 - ret - -func read_tpidr_el3 - mrs x0, tpidr_el3 - 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 - isb - ret - -#endif diff --git a/lib/aarch64/tlb_helpers.S b/lib/aarch64/tlb_helpers.S deleted file mode 100644 index 8dfae12..0000000 --- a/lib/aarch64/tlb_helpers.S +++ /dev/null @@ -1,73 +0,0 @@ -/* - * 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 - - .globl tlbialle1 - .globl tlbialle1is - .globl tlbialle2 - .globl tlbialle2is - .globl tlbialle3 - .globl tlbialle3is - .globl tlbivmalle1 - - -func tlbialle1 - tlbi alle1 - ret - - -func tlbialle1is - tlbi alle1is - ret - - -func tlbialle2 - tlbi alle2 - ret - - -func tlbialle2is - tlbi alle2is - ret - - -func tlbialle3 - tlbi alle3 - ret - - -func tlbialle3is - tlbi alle3is - ret - -func tlbivmalle1 - tlbi vmalle1 - ret diff --git a/plat/fvp/platform.mk b/plat/fvp/platform.mk index 4cc4d1e..450529b 100644 --- a/plat/fvp/platform.mk +++ b/plat/fvp/platform.mk @@ -51,7 +51,6 @@ drivers/io/io_memmap.c \ drivers/io/io_semihosting.c \ lib/mmio.c \ - lib/aarch64/sysreg_helpers.S \ lib/aarch64/xlat_tables.c \ lib/semihosting/semihosting.c \ lib/semihosting/aarch64/semihosting_call.S \ @@ -72,7 +71,6 @@ BL31_SOURCES += drivers/arm/gic/gic_v2.c \ drivers/arm/gic/gic_v3.c \ - drivers/arm/gic/aarch64/gic_v3_sysregs.S \ drivers/arm/cci400/cci400.c \ plat/common/aarch64/platform_mp_stack.S \ plat/fvp/bl31_fvp_setup.c \