From 04c7303b9c3d2215eebc3d59431519990abe03d0 Mon Sep 17 00:00:00 2001 From: Okash Khawaja Date: Fri, 4 Nov 2022 12:38:01 +0000 Subject: feat(cpus): make cache ops conditional When a core is in debug recovery mode its caches are not invalidated upon reset, so the L1 and L2 cache contents from before reset are observable after reset. Similarly, debug recovery mode of DynamIQ cluster ensures that contents of the shared L3 cache are also not invalidated upon transition to On mode. Booting cores in debug recovery mode means booting with caches disabled and preserving the caches until a point where software can dump the caches and retrieve their contents. TF-A however unconditionally cleans and invalidates caches at multiple points during boot. This can lead to memory corruption as well as loss of cache contents to be used for debugging. This patch fixes this by calling a platform hook before performing CMOs in helper routines in cache_helpers.S. The platform hook plat_can_cmo is an assembly routine which must not clobber x2 and x3, and avoid using stack. The whole checking is conditional upon `CONDITIONAL_CMO` which can be set at compile time. Signed-off-by: Okash Khawaja Change-Id: I172e999e4acd0f872c24056e647cc947ee54b193 --- Makefile | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 70d5338eb..b664ac0af 100644 --- a/Makefile +++ b/Makefile @@ -1080,6 +1080,7 @@ $(eval $(call assert_booleans,\ SIMICS_BUILD \ FEATURE_DETECTION \ TRNG_SUPPORT \ + CONDITIONAL_CMO \ ))) $(eval $(call assert_numerics,\ @@ -1241,6 +1242,7 @@ $(eval $(call add_defines,\ FEATURE_DETECTION \ TWED_DELAY \ ENABLE_FEAT_TWED \ + CONDITIONAL_CMO \ ))) ifeq (${SANITIZE_UB},trap) -- cgit v1.2.1