[U-Boot] [PATCH] elf: fix cache flushing in 'bootelf -p' command

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@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; }

On Thu, Feb 07, 2019 at 02:19:45PM +0300, Kurban Mallachiev wrote:
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@ispras.ru
Applied to u-boot/master, thanks!
participants (2)
-
Kurban Mallachiev
-
Tom Rini