Commit 04fb777f authored by Paul Beesley's avatar Paul Beesley Committed by TrustedFirmware Code Review
Browse files

Merge "FVP_Base_AEMv8A platform: Fix cache maintenance operations" into integration

parents 300df53b ef430ff4
...@@ -112,6 +112,7 @@ ...@@ -112,6 +112,7 @@
/* CLIDR definitions */ /* CLIDR definitions */
#define LOUIS_SHIFT U(21) #define LOUIS_SHIFT U(21)
#define LOC_SHIFT U(24) #define LOC_SHIFT U(24)
#define CTYPE_SHIFT(n) U(3 * (n - 1))
#define CLIDR_FIELD_WIDTH U(3) #define CLIDR_FIELD_WIDTH U(3)
/* CSSELR definitions */ /* CSSELR definitions */
......
/* /*
* Copyright (c) 2014-2015, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2014-2019, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
...@@ -18,15 +18,43 @@ func aem_generic_core_pwr_dwn ...@@ -18,15 +18,43 @@ func aem_generic_core_pwr_dwn
msr sctlr_el3, x1 msr sctlr_el3, x1
isb isb
/* ---------------------------------------------
* AEM model supports L3 caches in which case L2
* will be private per core caches and flush
* from L1 to L2 is not sufficient.
* ---------------------------------------------
*/
mrs x1, clidr_el1
/* ---------------------------------------------
* Check if L3 cache is implemented.
* ---------------------------------------------
*/
tst x1, ((1 << CLIDR_FIELD_WIDTH) - 1) << CTYPE_SHIFT(3)
/* ---------------------------------------------
* There is no L3 cache, flush L1 to L2 only.
* ---------------------------------------------
*/
mov x0, #DCCISW mov x0, #DCCISW
b.eq dcsw_op_level1
mov x18, x30
/* --------------------------------------------- /* ---------------------------------------------
* Flush L1 cache to PoU. * Flush L1 cache to L2.
* --------------------------------------------- * ---------------------------------------------
*/ */
b dcsw_op_louis bl dcsw_op_level1
endfunc aem_generic_core_pwr_dwn mov x30, x18
/* ---------------------------------------------
* Flush L2 cache to L3.
* ---------------------------------------------
*/
mov x0, #DCCISW
b dcsw_op_level2
endfunc aem_generic_core_pwr_dwn
func aem_generic_cluster_pwr_dwn func aem_generic_cluster_pwr_dwn
/* --------------------------------------------- /* ---------------------------------------------
...@@ -39,7 +67,7 @@ func aem_generic_cluster_pwr_dwn ...@@ -39,7 +67,7 @@ func aem_generic_cluster_pwr_dwn
isb isb
/* --------------------------------------------- /* ---------------------------------------------
* Flush L1 and L2 caches to PoC. * Flush all caches to PoC.
* --------------------------------------------- * ---------------------------------------------
*/ */
mov x0, #DCCISW mov x0, #DCCISW
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment