Merge "a5ds: Add handler for when user tries to switch off secondary cores" into...
authorSoby Mathew <soby.mathew@arm.com>
Thu, 3 Oct 2019 10:22:06 +0000 (10:22 +0000)
committerTrustedFirmware Code Review <review@review.trustedfirmware.org>
Thu, 3 Oct 2019 10:22:06 +0000 (10:22 +0000)
bl32/sp_min/aarch32/entrypoint.S
docs/getting_started/user-guide.rst
include/arch/aarch32/arch.h
include/arch/aarch32/el3_common_macros.S
include/arch/aarch32/smccc_macros.S
include/lib/cpus/aarch64/cortex_a65.h [new file with mode: 0644]
include/lib/cpus/aarch64/cortex_hercules_ae.h [new file with mode: 0644]
lib/cpus/aarch64/cortex_a65.S [new file with mode: 0644]
lib/cpus/aarch64/cortex_hercules_ae.S [new file with mode: 0644]
lib/el3_runtime/aarch32/context_mgmt.c
plat/arm/board/fvp/platform.mk

index 2ffef6a2ee52f3f7b201c765d6893f1a1143de78..0a684754cef8b643ee7f94b794d9c74308198689 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -183,15 +183,6 @@ func sp_min_handle_smc
        stcopr  r0, SCR
        isb
 
-       /*
-        * Set PMCR.DP to 1 to prohibit cycle counting whilst in Secure Mode.
-        * Also, the PMCR.LC field has an architecturally UNKNOWN value on reset
-        * and so set to 1 as ARM has deprecated use of PMCR.LC=0.
-        */
-       ldcopr  r0, PMCR
-       orr     r0, r0, #(PMCR_LC_BIT | PMCR_DP_BIT)
-       stcopr  r0, PMCR
-
        ldr     r0, [r2, #SMC_CTX_GPREG_R0]     /* smc_fid */
        /* Check whether an SMC64 is issued */
        tst     r0, #(FUNCID_CC_MASK << FUNCID_CC_SHIFT)
@@ -236,15 +227,6 @@ func sp_min_handle_fiq
        stcopr  r0, SCR
        isb
 
-       /*
-        * Set PMCR.DP to 1 to prohibit cycle counting whilst in Secure Mode.
-        * Also, the PMCR.LC field has an architecturally UNKNOWN value on reset
-        * and so set to 1 as ARM has deprecated use of PMCR.LC=0.
-        */
-       ldcopr  r0, PMCR
-       orr     r0, r0, #(PMCR_LC_BIT | PMCR_DP_BIT)
-       stcopr  r0, PMCR
-
        push    {r2, r3}
        bl      sp_min_fiq
        pop     {r0, r3}
index 44bfb7a33449d33a52ea3713c1e7a9abb79f3e54..6dad31058e37b198c6859fa012971ae71ef176cf 100644 (file)
@@ -9,7 +9,7 @@ is outside the scope of this document.
 
 This document assumes that the reader has previous experience running a fully
 bootable Linux software stack on Juno or FVP using the prebuilt binaries and
-filesystems provided by `Linaro`_. Further information may be found in the
+filesystems provided by Linaro. Further information may be found in the
 `Linaro instructions`_. It also assumes that the user understands the role of
 the different software components required to boot a Linux system:
 
@@ -48,15 +48,8 @@ Install the required packages to build TF-A with the following command:
 
     sudo apt-get install device-tree-compiler build-essential gcc make git libssl-dev
 
-TF-A has been tested with Linaro Release 18.04.
-
 Download and install the AArch32 (arm-eabi) or AArch64 little-endian
-(aarch64-linux-gnu) GCC cross compiler. If you would like to use the latest
-features available, download GCC 8.3-2019.03 compiler from
-`arm Developer page`_. Otherwise, the `Linaro Release Notes`_ documents which
-version of the compiler to use for a given Linaro Release. Also, these
-`Linaro instructions`_ provide further guidance and a script, which can be used
-to download Linaro deliverables automatically.
+(aarch64-linux-gnu) GCC 8.3-2019.03 cross compiler from `Arm Developer page`_.
 
 Optionally, TF-A can be built using clang version 4.0 or newer or Arm
 Compiler 6. See instructions below on how to switch the default compiler.
@@ -73,6 +66,10 @@ In addition, the following optional packages and tools may be needed:
    This tool can be found in most Linux distributions. Inkscape is needed to
    generate the actual \*.png files.
 
+TF-A has been tested with pre-built binaries and file systems from
+`Linaro Release 19.06`_. Alternatively, you can build the binaries from
+source using instructions provided at the `Arm Platforms User guide`_.
+
 Getting the TF-A source code
 ----------------------------
 
@@ -127,7 +124,7 @@ Building TF-A
 -------------
 
 -  Before building TF-A, the environment variable ``CROSS_COMPILE`` must point
-   to the Linaro cross compiler.
+   to the cross compiler.
 
    For AArch64:
 
@@ -1401,7 +1398,7 @@ a single FIP binary. It assumes that a `Linaro Release`_ has been installed.
    separately for AArch32.
 
    -  Before building BL32, the environment variable ``CROSS_COMPILE`` must point
-      to the AArch32 Linaro cross compiler.
+      to the AArch32 cross compiler.
 
       .. code:: shell
 
@@ -1422,7 +1419,7 @@ a single FIP binary. It assumes that a `Linaro Release`_ has been installed.
           make realclean
 
    -  Before building BL1 and BL2, the environment variable ``CROSS_COMPILE``
-      must point to the AArch64 Linaro cross compiler.
+      must point to the AArch64 cross compiler.
 
       .. code:: shell
 
@@ -2154,11 +2151,9 @@ Running the software on Juno
 
 This version of TF-A has been tested on variants r0, r1 and r2 of Juno.
 
-To execute the software stack on Juno, the version of the Juno board recovery
-image indicated in the `Linaro Release Notes`_ must be installed. If you have an
-earlier version installed or are unsure which version is installed, please
-re-install the recovery image by following the
-`Instructions for using Linaro's deliverables on Juno`_.
+To execute the software stack on Juno, installing the latest Arm Platforms
+software deliverables is recommended. Please install the deliverables by
+following the `Instructions for using Linaro's deliverables on Juno`_.
 
 Preparing TF-A images
 ~~~~~~~~~~~~~~~~~~~~~
@@ -2193,11 +2188,11 @@ wakeup interrupt from RTC.
 
 *Copyright (c) 2013-2019, Arm Limited and Contributors. All rights reserved.*
 
-.. _arm Developer page: https://developer.arm.com/open-source/gnu-toolchain/gnu-a/downloads
-.. _Linaro: `Linaro Release Notes`_
-.. _Linaro Release: `Linaro Release Notes`_
-.. _Linaro Release Notes: https://community.arm.com/dev-platforms/w/docs/226/old-release-notes
-.. _Linaro instructions: https://community.arm.com/dev-platforms/w/docs/304/arm-reference-platforms-deliverables
+.. _Arm Developer page: https://developer.arm.com/open-source/gnu-toolchain/gnu-a/downloads
+.. _Linaro Release: http://releases.linaro.org/members/arm/platforms
+.. _Linaro Release 19.06: http://releases.linaro.org/members/arm/platforms/19.06
+.. _Linaro instructions: https://git.linaro.org/landing-teams/working/arm/arm-reference-platforms.git/about
+.. _Arm Platforms User guide: https://git.linaro.org/landing-teams/working/arm/arm-reference-platforms.git/about/docs/user-guide.rst
 .. _Instructions for using Linaro's deliverables on Juno: https://community.arm.com/dev-platforms/w/docs/303/juno
 .. _Arm Platforms Portal: https://community.arm.com/dev-platforms/
 .. _Development Studio 5 (DS-5): https://developer.arm.com/products/software-development-tools/ds-5-development-studio
index 34036d78526d328e18224e6e7f1e24698f8eb69f..20175481f002f4fb0cfc781a8edbcff4e5125aea 100644 (file)
 #define SDCR_SPD_DISABLE       U(0x2)
 #define SDCR_SPD_ENABLE                U(0x3)
 #define SDCR_SCCD_BIT          (U(1) << 23)
+#define SDCR_SPME_BIT          (U(1) << 17)
 #define SDCR_RESET_VAL         U(0x0)
 
 /* HSCTLR definitions */
 #define VTTBR_BADDR_SHIFT      U(0)
 
 /* HDCR definitions */
+#define HDCR_HLP_BIT           (U(1) << 26)
+#define HDCR_HPME_BIT          (U(1) << 7)
 #define HDCR_RESET_VAL         U(0x0)
 
 /* HSTR definitions */
 #define PMCR_N_SHIFT           U(11)
 #define PMCR_N_MASK            U(0x1f)
 #define PMCR_N_BITS            (PMCR_N_MASK << PMCR_N_SHIFT)
+#define PMCR_LP_BIT            (U(1) << 7)
 #define PMCR_LC_BIT            (U(1) << 6)
 #define PMCR_DP_BIT            (U(1) << 5)
+#define        PMCR_RESET_VAL          U(0x0)
 
 /*******************************************************************************
  * Definitions of register offsets, fields and macros for CPU system
index 0bd8978145503342ad8974337b27c4d1ea01b795..c62d7d772d58f55ab6c78e071b8b692675faf0ab 100644 (file)
         * SDCR.SPD: Disable AArch32 privileged debug. Debug exceptions from
         *  Secure EL1 are disabled.
         *
-        * SDCR: Set to one so that cycle counting by PMCCNTR is prohibited in
-        *  Secure state. This bit is RES0 in versions of the architecture
+        * SDCR.SCCD: Set to one so that cycle counting by PMCCNTR is prohibited
+        *  in Secure state. This bit is RES0 in versions of the architecture
         *  earlier than ARMv8.5, setting it to 1 doesn't have any effect on
         *  them.
         * ---------------------------------------------------------------------
         */
        ldr     r0, =(SDCR_RESET_VAL | SDCR_SPD(SDCR_SPD_DISABLE) | SDCR_SCCD_BIT)
        stcopr  r0, SDCR
+
+       /* ---------------------------------------------------------------------
+        * Initialise PMCR, setting all fields rather than relying
+        * on hw. Some fields are architecturally UNKNOWN on reset.
+        *
+        * PMCR.LP: Set to one so that event counter overflow, that
+        *  is recorded in PMOVSCLR[0-30], occurs on the increment
+        *  that changes PMEVCNTR<n>[63] from 1 to 0, when ARMv8.5-PMU
+        *  is implemented. This bit is RES0 in versions of the architecture
+        *  earlier than ARMv8.5, setting it to 1 doesn't have any effect
+        *  on them.
+        *  This bit is Reserved, UNK/SBZP in ARMv7.
+        *
+        * PMCR.LC: Set to one so that cycle counter overflow, that
+        *  is recorded in PMOVSCLR[31], occurs on the increment
+        *  that changes PMCCNTR[63] from 1 to 0.
+        *  This bit is Reserved, UNK/SBZP in ARMv7.
+        *
+        * PMCR.DP: Set to one to prohibit cycle counting whilst in Secure mode.
+        * ---------------------------------------------------------------------
+        */
+       ldr     r0, =(PMCR_RESET_VAL | PMCR_DP_BIT | PMCR_LC_BIT | \
+                     PMCR_LP_BIT)
+#else
+       ldr     r0, =(PMCR_RESET_VAL | PMCR_DP_BIT)
 #endif
+       stcopr  r0, PMCR
 
        /*
         * If Data Independent Timing (DIT) functionality is implemented,
index 1fe6c64dcdc6757399e410162d0f98703f3958e9..4ec229218fdaa284a0dbabc39906b3327c3b95ad 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -58,7 +58,6 @@
        stm     r0!, {r2}
 
        stcopr  r4, SCR
-       isb
 #else
        /* Save the banked registers including the current SPSR and LR */
        mrs     r4, sp_usr
        /* lr_mon is already saved by caller */
 
        ldcopr  r4, SCR
+
+#if ARM_ARCH_MAJOR > 7
+       /*
+        * Check if earlier initialization of SDCR.SCCD to 1
+        * failed, meaning that ARMv8-PMU is not implemented,
+        * cycle counting is not disabled and PMCR should be
+        * saved in Non-secure context.
+        */
+       ldcopr  r5, SDCR
+       tst     r5, #SDCR_SCCD_BIT
+       bne     1f
+#endif
+       /* Secure Cycle Counter is not disabled */
 #endif
-       str     r4, [sp, #SMC_CTX_SCR]
-       ldcopr  r4, PMCR
-       str     r4, [sp, #SMC_CTX_PMCR]
+       ldcopr  r5, PMCR
+
+       /* Check caller's security state */
+       tst     r4, #SCR_NS_BIT
+       beq     2f
+
+       /* Save PMCR if called from Non-secure state */
+       str     r5, [sp, #SMC_CTX_PMCR]
+
+       /* Disable cycle counter when event counting is prohibited */
+2:     orr     r5, r5, #PMCR_DP_BIT
+       stcopr  r5, PMCR
+       isb
+1:     str     r4, [sp, #SMC_CTX_SCR]
        .endm
 
 /*
        stcopr  r1, SCR
        isb
 
+       /*
+        * Restore PMCR when returning to Non-secure state
+        */
+       tst     r1, #SCR_NS_BIT
+       beq     2f
+
+       /*
+        * Back to Non-secure state
+        */
+#if ARM_ARCH_MAJOR > 7
+       /*
+        * Check if earlier initialization SDCR.SCCD to 1
+        * failed, meaning that ARMv8-PMU is not implemented and
+        * PMCR should be restored from Non-secure context.
+        */
+       ldcopr  r1, SDCR
+       tst     r1, #SDCR_SCCD_BIT
+       bne     2f
+#endif
        /*
         * Restore the PMCR register.
         */
        ldr     r1, [r0, #SMC_CTX_PMCR]
        stcopr  r1, PMCR
-
+2:
        /* Restore the banked registers including the current SPSR */
        add     r1, r0, #SMC_CTX_SP_USR
 
diff --git a/include/lib/cpus/aarch64/cortex_a65.h b/include/lib/cpus/aarch64/cortex_a65.h
new file mode 100644 (file)
index 0000000..0df34c9
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2019, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef CORTEX_A65_H
+#define CORTEX_A65_H
+
+#include <lib/utils_def.h>
+
+#define CORTEX_A65_MIDR                        U(0x410FD060)
+
+/*******************************************************************************
+ * CPU Extended Control register specific definitions
+ ******************************************************************************/
+#define CORTEX_A65_ECTLR_EL1           S3_0_C15_C1_4
+
+/*******************************************************************************
+ * CPU Auxiliary Control register specific definitions
+ ******************************************************************************/
+#define CORTEX_A65_CPUACTLR_EL1                S3_0_C15_C1_0
+
+/*******************************************************************************
+ * CPU Power Control register specific definitions
+ ******************************************************************************/
+
+#define CORTEX_A65_CPUPWRCTLR_EL1      S3_0_C15_C2_7
+#define CORTEX_A65_CPUPWRCTLR_EL1_CORE_PWRDN_BIT       (U(1) << 0)
+
+#endif /* CORTEX_A65_H */
diff --git a/include/lib/cpus/aarch64/cortex_hercules_ae.h b/include/lib/cpus/aarch64/cortex_hercules_ae.h
new file mode 100644 (file)
index 0000000..795563b
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * Copyright (c) 2019, ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef CORTEX_HERCULES_AE_H
+#define CORTEX_HERCULES_AE_H
+
+#include <cortex_hercules.h>
+
+#define CORTEX_HERCULES_AE_MIDR U(0x410FD420)
+
+#endif /* CORTEX_HERCULES_AE_H */
diff --git a/lib/cpus/aarch64/cortex_a65.S b/lib/cpus/aarch64/cortex_a65.S
new file mode 100644 (file)
index 0000000..666324c
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2019, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+#include <arch.h>
+
+#include <asm_macros.S>
+#include <common/bl_common.h>
+#include <common/debug.h>
+#include <cortex_a65.h>
+#include <cpu_macros.S>
+#include <plat_macros.S>
+
+/* Hardware handled coherency */
+#if !HW_ASSISTED_COHERENCY
+#error "Cortex-A65 must be compiled with HW_ASSISTED_COHERENCY enabled"
+#endif
+
+/* 64-bit only core */
+#if CTX_INCLUDE_AARCH32_REGS
+#error "Cortex-A65 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
+#endif
+
+/* -------------------------------------------------
+ * The CPU Ops reset function for Cortex-A65.
+ * Shall clobber: x0-x19
+ * -------------------------------------------------
+ */
+func cortex_a65_reset_func
+       mov     x19, x30
+
+#if ERRATA_DSU_936184
+       bl      errata_dsu_936184_wa
+#endif
+
+       ret     x19
+endfunc cortex_a65_reset_func
+
+func cortex_a65_cpu_pwr_dwn
+       mrs     x0, CORTEX_A65_CPUPWRCTLR_EL1
+       orr     x0, x0, #CORTEX_A65_CPUPWRCTLR_EL1_CORE_PWRDN_BIT
+       msr     CORTEX_A65_CPUPWRCTLR_EL1, x0
+       isb
+       ret
+endfunc cortex_a65_cpu_pwr_dwn
+
+#if REPORT_ERRATA
+/*
+ * Errata printing function for Cortex-A65. Must follow AAPCS.
+ */
+func cortex_a65_errata_report
+       stp     x8, x30, [sp, #-16]!
+
+       bl      cpu_get_rev_var
+       mov     x8, x0
+
+       /*
+        * Report all errata. The revision-variant information is passed to
+        * checking functions of each errata.
+        */
+       report_errata ERRATA_DSU_936184, cortex_a65, dsu_936184
+
+       ldp     x8, x30, [sp], #16
+       ret
+endfunc cortex_a65_errata_report
+#endif
+
+.section .rodata.cortex_a65_regs, "aS"
+cortex_a65_regs:  /* The ascii list of register names to be reported */
+       .asciz  "cpuectlr_el1", ""
+
+func cortex_a65_cpu_reg_dump
+       adr     x6, cortex_a65_regs
+       mrs     x8, CORTEX_A65_ECTLR_EL1
+       ret
+endfunc cortex_a65_cpu_reg_dump
+
+declare_cpu_ops cortex_a65, CORTEX_A65_MIDR, \
+       cortex_a65_reset_func, \
+       cortex_a65_cpu_pwr_dwn
diff --git a/lib/cpus/aarch64/cortex_hercules_ae.S b/lib/cpus/aarch64/cortex_hercules_ae.S
new file mode 100644 (file)
index 0000000..c4a2163
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2019, ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <arch.h>
+#include <asm_macros.S>
+#include <common/bl_common.h>
+#include <cortex_hercules_ae.h>
+#include <cpu_macros.S>
+#include <plat_macros.S>
+
+/* Hardware handled coherency */
+#if HW_ASSISTED_COHERENCY == 0
+#error "cortex_hercules_ae must be compiled with HW_ASSISTED_COHERENCY enabled"
+#endif
+
+       /* -------------------------------------------------
+        * The CPU Ops reset function for Cortex-Hercules-AE
+        * -------------------------------------------------
+        */
+#if ENABLE_AMU
+func cortex_hercules_ae_reset_func
+       /* Make sure accesses from EL0/EL1 and EL2 are not trapped to EL3 */
+       mrs     x0, actlr_el3
+       bic     x0, x0, #CORTEX_HERCULES_ACTLR_TAM_BIT
+       msr     actlr_el3, x0
+
+       /* Make sure accesses from non-secure EL0/EL1 are not trapped to EL2 */
+       mrs     x0, actlr_el2
+       bic     x0, x0, #CORTEX_HERCULES_ACTLR_TAM_BIT
+       msr     actlr_el2, x0
+
+       /* Enable group0 counters */
+       mov     x0, #CORTEX_HERCULES_AMU_GROUP0_MASK
+       msr     CPUAMCNTENSET0_EL0, x0
+
+       /* Enable group1 counters */
+       mov     x0, #CORTEX_HERCULES_AMU_GROUP1_MASK
+       msr     CPUAMCNTENSET1_EL0, x0
+       isb
+
+       ret
+endfunc cortex_hercules_ae_reset_func
+#endif
+
+       /* -------------------------------------------------------
+        * HW will do the cache maintenance while powering down
+        * -------------------------------------------------------
+        */
+func cortex_hercules_ae_core_pwr_dwn
+       /* -------------------------------------------------------
+        * Enable CPU power down bit in power control register
+        * -------------------------------------------------------
+        */
+       mrs     x0, CORTEX_HERCULES_CPUPWRCTLR_EL1
+       orr     x0, x0, #CORTEX_HERCULES_CPUPWRCTLR_EL1_CORE_PWRDN_EN_BIT
+       msr     CORTEX_HERCULES_CPUPWRCTLR_EL1, x0
+       isb
+       ret
+endfunc cortex_hercules_ae_core_pwr_dwn
+
+       /*
+        * Errata printing function for cortex_hercules_ae. Must follow AAPCS.
+        */
+#if REPORT_ERRATA
+func cortex_hercules_ae_errata_report
+       ret
+endfunc cortex_hercules_ae_errata_report
+#endif
+
+       /* -------------------------------------------------------
+        * This function provides cortex_hercules_ae specific
+        * register information for crash reporting.
+        * It needs to return with x6 pointing to
+        * a list of register names in ascii and
+        * x8 - x15 having values of registers to be
+        * reported.
+        * -------------------------------------------------------
+        */
+.section .rodata.cortex_hercules_ae_regs, "aS"
+cortex_hercules_ae_regs:  /* The ascii list of register names to be reported */
+       .asciz  "cpuectlr_el1", ""
+
+func cortex_hercules_ae_cpu_reg_dump
+       adr     x6, cortex_hercules_ae_regs
+       mrs     x8, CORTEX_HERCULES_CPUECTLR_EL1
+       ret
+endfunc cortex_hercules_ae_cpu_reg_dump
+
+#if ENABLE_AMU
+#define HERCULES_AE_RESET_FUNC cortex_hercules_ae_reset_func
+#else
+#define HERCULES_AE_RESET_FUNC CPU_NO_RESET_FUNC
+#endif
+
+declare_cpu_ops cortex_hercules_ae, CORTEX_HERCULES_AE_MIDR, \
+       HERCULES_AE_RESET_FUNC, \
+       cortex_hercules_ae_core_pwr_dwn
index a4702fcc60f3d2eb7040f80c1089131c569667af..73d1e354d5f1eb798faa0cab44d78f3658ce936c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -281,10 +281,28 @@ void cm_prepare_el3_exit(uint32_t security_state)
                         *
                         * HDCR.HPMN: Set to value of PMCR.N which is the
                         *  architecturally-defined reset value.
+                        *
+                        * HDCR.HLP: Set to one so that event counter
+                        *  overflow, that is recorded in PMOVSCLR[0-30],
+                        *  occurs on the increment that changes
+                        *  PMEVCNTR<n>[63] from 1 to 0, when ARMv8.5-PMU is
+                        *  implemented. This bit is RES0 in versions of the
+                        *  architecture earlier than ARMv8.5, setting it to 1
+                        *  doesn't have any effect on them.
+                        *  This bit is Reserved, UNK/SBZP in ARMv7.
+                        *
+                        * HDCR.HPME: Set to zero to disable EL2 Event
+                        *  counters.
                         */
-                       write_hdcr(HDCR_RESET_VAL |
-                               ((read_pmcr() & PMCR_N_BITS) >> PMCR_N_SHIFT));
-
+#if (ARM_ARCH_MAJOR > 7)
+                       write_hdcr((HDCR_RESET_VAL | HDCR_HLP_BIT |
+                                  ((read_pmcr() & PMCR_N_BITS) >>
+                                   PMCR_N_SHIFT)) & ~HDCR_HPME_BIT);
+#else
+                       write_hdcr((HDCR_RESET_VAL |
+                                  ((read_pmcr() & PMCR_N_BITS) >>
+                                   PMCR_N_SHIFT)) & ~HDCR_HPME_BIT);
+#endif
                        /*
                         * Set HSTR to its architectural reset value so that
                         * access to system registers in the cproc=1111
index 1e7cfce5e7b86c0dd41817e5c64f831c6301f291..c8e2169c32b07b080fb0d93ee455ca2b1dc01b73 100644 (file)
@@ -115,7 +115,9 @@ else
                                        lib/cpus/aarch64/neoverse_n1.S          \
                                        lib/cpus/aarch64/neoverse_e1.S          \
                                        lib/cpus/aarch64/neoverse_zeus.S        \
-                                       lib/cpus/aarch64/cortex_hercules.S
+                                       lib/cpus/aarch64/cortex_hercules.S      \
+                                       lib/cpus/aarch64/cortex_hercules_ae.S   \
+                                       lib/cpus/aarch64/cortex_a65.S
        endif
        # AArch64/AArch32 cores
        FVP_CPU_LIBS    +=      lib/cpus/aarch64/cortex_a55.S           \