Merge "Add compile-time errors for HW_ASSISTED_COHERENCY flag" into integration
This commit is contained in:
commit
854ca7daf9
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
* ---------------------------------------------
|
||||
|
|
|
@ -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
|
||||
* ---------------------------------------------
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
* ---------------------------------------------
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue