aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mm/idmap.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/arch/arm/mm/idmap.c b/arch/arm/mm/idmap.c
index ab88ed4f8e08..99db769307ec 100644
--- a/arch/arm/mm/idmap.c
+++ b/arch/arm/mm/idmap.c
@@ -92,6 +92,9 @@ static int __init init_static_idmap(void)
92 (long long)idmap_start, (long long)idmap_end); 92 (long long)idmap_start, (long long)idmap_end);
93 identity_mapping_add(idmap_pgd, idmap_start, idmap_end); 93 identity_mapping_add(idmap_pgd, idmap_start, idmap_end);
94 94
95 /* Flush L1 for the hardware to see this page table content */
96 flush_cache_louis();
97
95 return 0; 98 return 0;
96} 99}
97early_initcall(init_static_idmap); 100early_initcall(init_static_idmap);
@@ -103,12 +106,15 @@ early_initcall(init_static_idmap);
103 */ 106 */
104void setup_mm_for_reboot(void) 107void setup_mm_for_reboot(void)
105{ 108{
106 /* Clean and invalidate L1. */
107 flush_cache_all();
108
109 /* Switch to the identity mapping. */ 109 /* Switch to the identity mapping. */
110 cpu_switch_mm(idmap_pgd, &init_mm); 110 cpu_switch_mm(idmap_pgd, &init_mm);
111 111
112 /* Flush the TLB. */ 112#ifdef CONFIG_CPU_HAS_ASID
113 /*
114 * We don't have a clean ASID for the identity mapping, which
115 * may clash with virtual addresses of the previous page tables
116 * and therefore potentially in the TLB.
117 */
113 local_flush_tlb_all(); 118 local_flush_tlb_all();
119#endif
114} 120}