diff options
Diffstat (limited to 'arch/arm/include/asm/virt.h')
| -rw-r--r-- | arch/arm/include/asm/virt.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/arm/include/asm/virt.h b/arch/arm/include/asm/virt.h index 50af92bac737..4371f45c5784 100644 --- a/arch/arm/include/asm/virt.h +++ b/arch/arm/include/asm/virt.h | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #define BOOT_CPU_MODE_MISMATCH PSR_N_BIT | 29 | #define BOOT_CPU_MODE_MISMATCH PSR_N_BIT |
| 30 | 30 | ||
| 31 | #ifndef __ASSEMBLY__ | 31 | #ifndef __ASSEMBLY__ |
| 32 | #include <asm/cacheflush.h> | ||
| 32 | 33 | ||
| 33 | #ifdef CONFIG_ARM_VIRT_EXT | 34 | #ifdef CONFIG_ARM_VIRT_EXT |
| 34 | /* | 35 | /* |
| @@ -41,10 +42,21 @@ | |||
| 41 | */ | 42 | */ |
| 42 | extern int __boot_cpu_mode; | 43 | extern int __boot_cpu_mode; |
| 43 | 44 | ||
| 45 | static inline void sync_boot_mode(void) | ||
| 46 | { | ||
| 47 | /* | ||
| 48 | * As secondaries write to __boot_cpu_mode with caches disabled, we | ||
| 49 | * must flush the corresponding cache entries to ensure the visibility | ||
| 50 | * of their writes. | ||
| 51 | */ | ||
| 52 | sync_cache_r(&__boot_cpu_mode); | ||
| 53 | } | ||
| 54 | |||
| 44 | void __hyp_set_vectors(unsigned long phys_vector_base); | 55 | void __hyp_set_vectors(unsigned long phys_vector_base); |
| 45 | unsigned long __hyp_get_vectors(void); | 56 | unsigned long __hyp_get_vectors(void); |
| 46 | #else | 57 | #else |
| 47 | #define __boot_cpu_mode (SVC_MODE) | 58 | #define __boot_cpu_mode (SVC_MODE) |
| 59 | #define sync_boot_mode() | ||
| 48 | #endif | 60 | #endif |
| 49 | 61 | ||
| 50 | #ifndef ZIMAGE | 62 | #ifndef ZIMAGE |
