diff options
author | Soby Mathew <soby.mathew@arm.com> | 2019-05-03 13:35:38 +0000 |
---|---|---|
committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2019-05-03 13:35:38 +0000 |
commit | 854ca7daf9bbf4762d698128bfe030e0cebea956 (patch) | |
tree | 88258bb259ac6847ea95944add2f4c9ac0c832df | |
parent | b9c1d185bbd8778835017560da916daa39709e78 (diff) | |
parent | 076b5f02e2747ef1b5a55f1c5d368df16f046b1c (diff) |
Merge "Add compile-time errors for HW_ASSISTED_COHERENCY flag" into integration
-rw-r--r-- | docs/user-guide.rst | 22 | ||||
-rw-r--r-- | lib/cpus/aarch64/cortex_a55.S | 5 | ||||
-rw-r--r-- | lib/cpus/aarch64/cortex_a75.S | 5 | ||||
-rw-r--r-- | lib/cpus/aarch64/cortex_a76.S | 5 | ||||
-rw-r--r-- | lib/cpus/aarch64/cortex_a76ae.S | 5 | ||||
-rw-r--r-- | lib/cpus/aarch64/cortex_deimos.S | 7 | ||||
-rw-r--r-- | lib/cpus/aarch64/neoverse_e1.S | 5 | ||||
-rw-r--r-- | lib/cpus/aarch64/neoverse_n1.S | 5 | ||||
-rw-r--r-- | lib/cpus/aarch64/neoverse_zeus.S | 5 | ||||
-rw-r--r-- | plat/arm/board/fvp/platform.mk | 22 |
10 files changed, 72 insertions, 14 deletions
diff --git a/docs/user-guide.rst b/docs/user-guide.rst index 2a21bd21..4068c9a3 100644 --- a/docs/user-guide.rst +++ b/docs/user-guide.rst @@ -534,13 +534,21 @@ Common build options - ``HW_ASSISTED_COHERENCY``: On most Arm systems to-date, platform-specific software operations are required for CPUs to enter and exit coherency. - However, there exists newer systems where CPUs' entry to and exit from - coherency is managed in hardware. Such systems require software to only - initiate the operations, and the rest is managed in hardware, minimizing - active software management. In such systems, this boolean option enables - TF-A to carry out build and run-time optimizations during boot and power - management operations. This option defaults to 0 and if it is enabled, - then it implies ``WARMBOOT_ENABLE_DCACHE_EARLY`` is also enabled. + However, newer systems exist where CPUs' entry to and exit from coherency + is managed in hardware. Such systems require software to only initiate these + operations, and the rest is managed in hardware, minimizing active software + management. In such systems, this boolean option enables TF-A to carry out + build and run-time optimizations during boot and power management operations. + This option defaults to 0 and if it is enabled, then it implies + ``WARMBOOT_ENABLE_DCACHE_EARLY`` is also enabled. + + If this flag is disabled while the platform which TF-A is compiled for + includes cores that manage coherency in hardware, then a compilation error is + generated. This is based on the fact that a system cannot have, at the same + time, cores that manage coherency in hardware and cores that don't. In other + words, a platform cannot have, at the same time, cores that require + ``HW_ASSISTED_COHERENCY=1`` and cores that require + ``HW_ASSISTED_COHERENCY=0``. Note that, when ``HW_ASSISTED_COHERENCY`` is enabled, version 2 of translation library (xlat tables v2) must be used; version 1 of translation diff --git a/lib/cpus/aarch64/cortex_a55.S b/lib/cpus/aarch64/cortex_a55.S index b9a3f365..0ef373a0 100644 --- a/lib/cpus/aarch64/cortex_a55.S +++ b/lib/cpus/aarch64/cortex_a55.S @@ -11,6 +11,11 @@ #include <cpu_macros.S> #include <plat_macros.S> +/* Hardware handled coherency */ +#if HW_ASSISTED_COHERENCY == 0 +#error "Cortex-A55 must be compiled with HW_ASSISTED_COHERENCY enabled" +#endif + /* -------------------------------------------------- * Errata Workaround for Cortex A55 Errata #768277. * This applies only to revision r0p0 of Cortex A55. diff --git a/lib/cpus/aarch64/cortex_a75.S b/lib/cpus/aarch64/cortex_a75.S index fda1aecb..657457ee 100644 --- a/lib/cpus/aarch64/cortex_a75.S +++ b/lib/cpus/aarch64/cortex_a75.S @@ -10,6 +10,11 @@ #include <cpuamu.h> #include <cpu_macros.S> +/* Hardware handled coherency */ +#if HW_ASSISTED_COHERENCY == 0 +#error "Cortex-A75 must be compiled with HW_ASSISTED_COHERENCY enabled" +#endif + /* -------------------------------------------------- * Errata Workaround for Cortex A75 Errata #764081. * This applies only to revision r0p0 of Cortex A75. diff --git a/lib/cpus/aarch64/cortex_a76.S b/lib/cpus/aarch64/cortex_a76.S index 4bf6e77a..6fe6afe3 100644 --- a/lib/cpus/aarch64/cortex_a76.S +++ b/lib/cpus/aarch64/cortex_a76.S @@ -13,6 +13,11 @@ #include <plat_macros.S> #include <services/arm_arch_svc.h> +/* Hardware handled coherency */ +#if HW_ASSISTED_COHERENCY == 0 +#error "Cortex-A76 must be compiled with HW_ASSISTED_COHERENCY enabled" +#endif + #define ESR_EL3_A64_SMC0 0x5e000000 #define ESR_EL3_A32_SMC0 0x4e000000 diff --git a/lib/cpus/aarch64/cortex_a76ae.S b/lib/cpus/aarch64/cortex_a76ae.S index 1ba8e9a7..46e9450f 100644 --- a/lib/cpus/aarch64/cortex_a76ae.S +++ b/lib/cpus/aarch64/cortex_a76ae.S @@ -8,6 +8,11 @@ #include <cortex_a76ae.h> #include <cpu_macros.S> +/* Hardware handled coherency */ +#if HW_ASSISTED_COHERENCY == 0 +#error "Cortex-A76AE must be compiled with HW_ASSISTED_COHERENCY enabled" +#endif + /* --------------------------------------------- * HW will do the cache maintenance while powering down * --------------------------------------------- diff --git a/lib/cpus/aarch64/cortex_deimos.S b/lib/cpus/aarch64/cortex_deimos.S index 0e72fba5..e73e89f7 100644 --- a/lib/cpus/aarch64/cortex_deimos.S +++ b/lib/cpus/aarch64/cortex_deimos.S @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -11,6 +11,11 @@ #include <cpu_macros.S> #include <plat_macros.S> +/* Hardware handled coherency */ +#if HW_ASSISTED_COHERENCY == 0 +#error "Deimos must be compiled with HW_ASSISTED_COHERENCY enabled" +#endif + /* --------------------------------------------- * HW will do the cache maintenance while powering down * --------------------------------------------- diff --git a/lib/cpus/aarch64/neoverse_e1.S b/lib/cpus/aarch64/neoverse_e1.S index 8e403062..71e7b517 100644 --- a/lib/cpus/aarch64/neoverse_e1.S +++ b/lib/cpus/aarch64/neoverse_e1.S @@ -11,6 +11,11 @@ #include <cpu_macros.S> #include <plat_macros.S> +/* Hardware handled coherency */ +#if HW_ASSISTED_COHERENCY == 0 +#error "Neoverse E1 must be compiled with HW_ASSISTED_COHERENCY enabled" +#endif + func neoverse_e1_cpu_pwr_dwn mrs x0, NEOVERSE_E1_CPUPWRCTLR_EL1 orr x0, x0, #NEOVERSE_E1_CPUPWRCTLR_EL1_CORE_PWRDN_BIT diff --git a/lib/cpus/aarch64/neoverse_n1.S b/lib/cpus/aarch64/neoverse_n1.S index ce63899a..2038f318 100644 --- a/lib/cpus/aarch64/neoverse_n1.S +++ b/lib/cpus/aarch64/neoverse_n1.S @@ -10,6 +10,11 @@ #include <cpuamu.h> #include <cpu_macros.S> +/* Hardware handled coherency */ +#if HW_ASSISTED_COHERENCY == 0 +#error "Neoverse N1 must be compiled with HW_ASSISTED_COHERENCY enabled" +#endif + /* -------------------------------------------------- * Errata Workaround for Neoverse N1 Errata * This applies to revision r0p0 and r1p0 of Neoverse N1. diff --git a/lib/cpus/aarch64/neoverse_zeus.S b/lib/cpus/aarch64/neoverse_zeus.S index 79c8b2fd..c5241afa 100644 --- a/lib/cpus/aarch64/neoverse_zeus.S +++ b/lib/cpus/aarch64/neoverse_zeus.S @@ -11,6 +11,11 @@ #include <cpu_macros.S> #include <plat_macros.S> +/* Hardware handled coherency */ +#if HW_ASSISTED_COHERENCY == 0 +#error "Neoverse Zeus must be compiled with HW_ASSISTED_COHERENCY enabled" +#endif + /* --------------------------------------------- * HW will do the cache maintenance while powering down * --------------------------------------------- diff --git a/plat/arm/board/fvp/platform.mk b/plat/arm/board/fvp/platform.mk index c11d848e..9b128a56 100644 --- a/plat/arm/board/fvp/platform.mk +++ b/plat/arm/board/fvp/platform.mk @@ -95,18 +95,25 @@ PLAT_BL_COMMON_SOURCES := plat/arm/board/fvp/fvp_common.c FVP_CPU_LIBS := lib/cpus/${ARCH}/aem_generic.S ifeq (${ARCH}, aarch64) -FVP_CPU_LIBS += lib/cpus/aarch64/cortex_a35.S \ + +# select a different set of CPU files, depending on whether we compile with +# hardware assisted coherency configurations or not +ifeq (${HW_ASSISTED_COHERENCY}, 0) + FVP_CPU_LIBS += lib/cpus/aarch64/cortex_a35.S \ lib/cpus/aarch64/cortex_a53.S \ - lib/cpus/aarch64/cortex_a55.S \ lib/cpus/aarch64/cortex_a57.S \ lib/cpus/aarch64/cortex_a72.S \ - lib/cpus/aarch64/cortex_a73.S \ + lib/cpus/aarch64/cortex_a73.S +else + FVP_CPU_LIBS += lib/cpus/aarch64/cortex_a55.S \ lib/cpus/aarch64/cortex_a75.S \ lib/cpus/aarch64/cortex_a76.S \ lib/cpus/aarch64/cortex_a76ae.S \ lib/cpus/aarch64/neoverse_n1.S \ + lib/cpus/aarch64/neoverse_e1.S \ lib/cpus/aarch64/cortex_deimos.S \ lib/cpus/aarch64/neoverse_zeus.S +endif else FVP_CPU_LIBS += lib/cpus/aarch32/cortex_a32.S @@ -217,10 +224,13 @@ ENABLE_PIE := 1 endif ifeq (${ENABLE_AMU},1) -BL31_SOURCES += lib/cpus/aarch64/cortex_a75_pubsub.c \ - lib/cpus/aarch64/neoverse_n1_pubsub.c \ - lib/cpus/aarch64/cpuamu.c \ +BL31_SOURCES += lib/cpus/aarch64/cpuamu.c \ lib/cpus/aarch64/cpuamu_helpers.S + +ifeq (${HW_ASSISTED_COHERENCY}, 1) +BL31_SOURCES += lib/cpus/aarch64/cortex_a75_pubsub.c \ + lib/cpus/aarch64/neoverse_n1_pubsub.c +endif endif ifeq (${RAS_EXTENSION},1) |