mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-26 23:04:50 +00:00
Initialise cpu ops after enabling data cache
The cpu-ops pointer was initialized before enabling the data cache in the cold and warm boot paths. This required a DCIVAC cache maintenance operation to invalidate any stale cache lines resident in other cpus. This patch moves this initialization to the bl31_arch_setup() function which is always called after the data cache and MMU has been enabled. This change removes the need: 1. for the DCIVAC cache maintenance operation. 2. to initialise the CPU ops upon resumption from a PSCI CPU_SUSPEND call since memory contents are always preserved in this case. Change-Id: Ibb2fa2f7460d1a1f1e721242025e382734c204c6
This commit is contained in:
parent
5930eadbe5
commit
12e7c4ab0b
5 changed files with 7 additions and 25 deletions
|
@ -33,6 +33,7 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <bl_common.h>
|
#include <bl_common.h>
|
||||||
#include <bl31.h>
|
#include <bl31.h>
|
||||||
|
#include <cpu_data.h>
|
||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
@ -47,4 +48,7 @@ void bl31_arch_setup(void)
|
||||||
|
|
||||||
/* Program the counter frequency */
|
/* Program the counter frequency */
|
||||||
write_cntfrq_el0(plat_get_syscnt_freq());
|
write_cntfrq_el0(plat_get_syscnt_freq());
|
||||||
|
|
||||||
|
/* Initialize the cpu_ops pointer. */
|
||||||
|
init_cpu_ops();
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,12 +161,6 @@ func bl31_entrypoint
|
||||||
bl zeromem16
|
bl zeromem16
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ---------------------------------------------
|
|
||||||
* Initialize the cpu_ops pointer.
|
|
||||||
* ---------------------------------------------
|
|
||||||
*/
|
|
||||||
bl init_cpu_ops
|
|
||||||
|
|
||||||
/* ---------------------------------------------
|
/* ---------------------------------------------
|
||||||
* Use SP_EL0 for the C runtime stack.
|
* Use SP_EL0 for the C runtime stack.
|
||||||
* ---------------------------------------------
|
* ---------------------------------------------
|
||||||
|
|
|
@ -117,6 +117,7 @@ static inline struct cpu_data *_cpu_data(void)
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
void init_cpu_data_ptr(void);
|
void init_cpu_data_ptr(void);
|
||||||
|
void init_cpu_ops(void);
|
||||||
|
|
||||||
#define get_cpu_data(_m) _cpu_data()->_m
|
#define get_cpu_data(_m) _cpu_data()->_m
|
||||||
#define set_cpu_data(_m, _v) _cpu_data()->_m = _v
|
#define set_cpu_data(_m, _v) _cpu_data()->_m = _v
|
||||||
|
|
|
@ -110,7 +110,8 @@ func prepare_cluster_pwr_dwn
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initializes the cpu_ops_ptr if not already initialized
|
* Initializes the cpu_ops_ptr if not already initialized
|
||||||
* in cpu_data. This can be called without a runtime stack.
|
* in cpu_data. This can be called without a runtime stack, but may
|
||||||
|
* only be called after the MMU is enabled.
|
||||||
* clobbers: x0 - x6, x10
|
* clobbers: x0 - x6, x10
|
||||||
*/
|
*/
|
||||||
.globl init_cpu_ops
|
.globl init_cpu_ops
|
||||||
|
@ -125,18 +126,6 @@ func init_cpu_ops
|
||||||
ASM_ASSERT(ne)
|
ASM_ASSERT(ne)
|
||||||
#endif
|
#endif
|
||||||
str x0, [x6, #CPU_DATA_CPU_OPS_PTR]!
|
str x0, [x6, #CPU_DATA_CPU_OPS_PTR]!
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure that any pre-fetched cache copies are invalidated.
|
|
||||||
* Ensure that we are running with cache disable else we
|
|
||||||
* invalidate our own update.
|
|
||||||
*/
|
|
||||||
#if ASM_ASSERTION
|
|
||||||
mrs x1, sctlr_el3
|
|
||||||
tst x1, #SCTLR_C_BIT
|
|
||||||
ASM_ASSERT(eq)
|
|
||||||
#endif
|
|
||||||
dc ivac, x6
|
|
||||||
mov x30, x10
|
mov x30, x10
|
||||||
1:
|
1:
|
||||||
ret
|
ret
|
||||||
|
|
|
@ -86,12 +86,6 @@ psci_aff_common_finish_entry:
|
||||||
*/
|
*/
|
||||||
bl init_cpu_data_ptr
|
bl init_cpu_data_ptr
|
||||||
|
|
||||||
/* ---------------------------------------------
|
|
||||||
* Initialize the cpu_ops pointer.
|
|
||||||
* ---------------------------------------------
|
|
||||||
*/
|
|
||||||
bl init_cpu_ops
|
|
||||||
|
|
||||||
/* ---------------------------------------------
|
/* ---------------------------------------------
|
||||||
* Set the exception vectors
|
* Set the exception vectors
|
||||||
* ---------------------------------------------
|
* ---------------------------------------------
|
||||||
|
|
Loading…
Add table
Reference in a new issue