mirror of
https://github.com/CTCaer/switch-l4t-atf.git
synced 2025-02-04 00:56:25 +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
@ -33,6 +33,7 @@
|
||||
#include <assert.h>
|
||||
#include <bl_common.h>
|
||||
#include <bl31.h>
|
||||
#include <cpu_data.h>
|
||||
#include <platform.h>
|
||||
|
||||
/*******************************************************************************
|
||||
@ -47,4 +48,7 @@ void bl31_arch_setup(void)
|
||||
|
||||
/* Program the counter frequency */
|
||||
write_cntfrq_el0(plat_get_syscnt_freq());
|
||||
|
||||
/* Initialize the cpu_ops pointer. */
|
||||
init_cpu_ops();
|
||||
}
|
||||
|
@ -161,12 +161,6 @@ func bl31_entrypoint
|
||||
bl zeromem16
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Initialize the cpu_ops pointer.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl init_cpu_ops
|
||||
|
||||
/* ---------------------------------------------
|
||||
* 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_ops(void);
|
||||
|
||||
#define get_cpu_data(_m) _cpu_data()->_m
|
||||
#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
|
||||
* 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
|
||||
*/
|
||||
.globl init_cpu_ops
|
||||
@ -125,18 +126,6 @@ func init_cpu_ops
|
||||
ASM_ASSERT(ne)
|
||||
#endif
|
||||
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
|
||||
1:
|
||||
ret
|
||||
|
@ -86,12 +86,6 @@ psci_aff_common_finish_entry:
|
||||
*/
|
||||
bl init_cpu_data_ptr
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Initialize the cpu_ops pointer.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl init_cpu_ops
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Set the exception vectors
|
||||
* ---------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user