[U-Boot] [PATCH] elf: fix cache flushing in 'bootelf -p' command
Kurban Mallachiev
mallachiev at ispras.ru
Thu Feb 7 11:19:45 UTC 2019
Currently there are two problems in 'bootelf -p' (load elf by segments)
command:
- bss section is not flushed, so booted elf can have non zero values
in bss;
- at least on ARM there are 'CACHE: Misaligned operation at
range...' warnings
Use p_memsz instead of p_filesz during cache flushing for elf segment.
p_filesz doesn't include zero initialized memory (e.g. bss section),
which also should be flushed.
Align these cache flushes to line boundaries.
Signed-off-by: Kurban Mallachiev <mallachiev at ispras.ru>
---
cmd/elf.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/cmd/elf.c b/cmd/elf.c
index 7bad1f80d4..d883be4193 100644
--- a/cmd/elf.c
+++ b/cmd/elf.c
@@ -53,7 +53,8 @@ static unsigned long load_elf64_image_phdr(unsigned long addr)
if (phdr->p_filesz != phdr->p_memsz)
memset(dst + phdr->p_filesz, 0x00,
phdr->p_memsz - phdr->p_filesz);
- flush_cache((unsigned long)dst, phdr->p_filesz);
+ flush_cache(rounddown((unsigned long)dst, ARCH_DMA_MINALIGN),
+ roundup(phdr->p_memsz, ARCH_DMA_MINALIGN));
++phdr;
}
@@ -167,7 +168,8 @@ static unsigned long load_elf_image_phdr(unsigned long addr)
if (phdr->p_filesz != phdr->p_memsz)
memset(dst + phdr->p_filesz, 0x00,
phdr->p_memsz - phdr->p_filesz);
- flush_cache((unsigned long)dst, phdr->p_filesz);
+ flush_cache(rounddown((unsigned long)dst, ARCH_DMA_MINALIGN),
+ roundup(phdr->p_memsz, ARCH_DMA_MINALIGN));
++phdr;
}
--
2.20.1
More information about the U-Boot
mailing list