提交 bbac9222 编写于 作者: B Bryan O'Donoghue 提交者: Tom Rini

bootm: Align cache flush begin address

commit b4d956f6 ("bootm: Align cache flush end address correctly")
aligns the end address of the cache flush operation to a cache-line size to
ensure lower-layers in the code accept the range provided and flush.

A similar action should be taken for the begin address of a cache flush
operation. The load address may not be aligned to a cache-line boundary, so
ensure the passed address is aligned.
Signed-off-by: NBryan O'Donoghue <bryan.odonoghue@linaro.org>
Reported-by: NBreno Matheus Lima <brenomatheus@gmail.com>
Suggested-by: NTom Rini <trini@konsulko.com>
Cc: Simon Glass <sjg@chromium.org>
Tested-by: NBreno Lima <breno.lima@nxp.com>
Reviewed-by: NSimon Glass <sjg@chromium.org>
上级 721881c4
......@@ -434,6 +434,8 @@ static int bootm_load_os(bootm_headers_t *images, unsigned long *load_end,
ulong blob_end = os.end;
ulong image_start = os.image_start;
ulong image_len = os.image_len;
ulong flush_start = ALIGN_DOWN(load, ARCH_DMA_MINALIGN);
ulong flush_len = *load_end - load;
bool no_overlap;
void *load_buf, *image_buf;
int err;
......@@ -447,7 +449,11 @@ static int bootm_load_os(bootm_headers_t *images, unsigned long *load_end,
bootstage_error(BOOTSTAGE_ID_DECOMP_IMAGE);
return err;
}
flush_cache(load, ALIGN(*load_end - load, ARCH_DMA_MINALIGN));
if (flush_start < load)
flush_len += load - flush_start;
flush_cache(flush_start, ALIGN(flush_len, ARCH_DMA_MINALIGN));
debug(" kernel loaded at 0x%08lx, end = 0x%08lx\n", load, *load_end);
bootstage_mark(BOOTSTAGE_ID_KERNEL_LOADED);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册