diff options
author | Pierre-Clément Tosi <ptosi@google.com> | 2023-02-08 23:54:28 +0300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2023-03-07 01:03:55 +0300 |
commit | c55c2a8565ad6b8aad2e47008a53bbca398c0f62 (patch) | |
tree | 4860e2c2777b0d4605427f9905ce374bfffbe30c | |
parent | 46dc54287031759c03c68902283d92076938305c (diff) | |
download | u-boot-c55c2a8565ad6b8aad2e47008a53bbca398c0f62.tar.xz |
arm64: Initialize TLB memory if CMO_BY_VA_ONLY
Memory used to hold the page tables is allocated from the top of RAM
with no prior initialization and could therefore hold invalid data. As
invalidate_dcache_all() will be called before the MMU has been
initialized and as that function relies indirectly on the page tables
when using CMO_BY_VA_ONLY, these must be in a valid state from their
allocation.
Signed-off-by: Pierre-Clément Tosi <ptosi@google.com>
[ Paul: pick from the Android tree. Fix checkpatch warnings, and rebased
to the upstream. ]
Signed-off-by: Ying-Chun Liu (PaulLiu) <paul.liu@linaro.org>
Cc: Tom Rini <trini@konsulko.com>
Link: https://android.googlesource.com/platform/external/u-boot/+/e3ceef4230b772186c6853cace4a676a407e6ab7
-rw-r--r-- | arch/arm/lib/cache.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c index 1a589c7e2a..7a16015867 100644 --- a/arch/arm/lib/cache.c +++ b/arch/arm/lib/cache.c @@ -159,6 +159,15 @@ __weak int arm_reserve_mmu(void) */ gd->arch.tlb_allocated = gd->arch.tlb_addr; #endif + + if (IS_ENABLED(CONFIG_CMO_BY_VA_ONLY)) { + /* + * As invalidate_dcache_all() will be called before + * mmu_setup(), we should make sure that the PTs are + * already in a valid state. + */ + memset((void *)gd->arch.tlb_addr, 0, gd->arch.tlb_size); + } #endif return 0; |