mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-16 09:54:35 +00:00
bootm: Support kernel_noload with compression
It is not currently possible to execute the kernel in-place without loading it. Use lmb to allocate memory for it. Co-developed-by: Tom Rini <trini@konsulko.com> Signed-off-by: Simon Glass <sjg@chromium.org> Suggested-by: Tom Rini <trini@konsulko.com> Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
bb07cdb191
commit
69544c4fd8
1 changed files with 18 additions and 0 deletions
18
boot/bootm.c
18
boot/bootm.c
|
@ -410,6 +410,24 @@ static int bootm_load_os(struct bootm_headers *images, int boot_progress)
|
|||
void *load_buf, *image_buf;
|
||||
int err;
|
||||
|
||||
/*
|
||||
* For a "noload" compressed kernel we need to allocate a buffer large
|
||||
* enough to decompress in to and use that as the load address now.
|
||||
* Assume that the kernel compression is at most a factor of 4 since
|
||||
* zstd almost achieves that.
|
||||
* Use an alignment of 2MB since this might help arm64
|
||||
*/
|
||||
if (os.type == IH_TYPE_KERNEL_NOLOAD && os.comp != IH_COMP_NONE) {
|
||||
ulong req_size = ALIGN(image_len * 4, SZ_1M);
|
||||
|
||||
load = lmb_alloc(&images->lmb, req_size, SZ_2M);
|
||||
if (!load)
|
||||
return 1;
|
||||
os.load = load;
|
||||
debug("Allocated %lx bytes at %lx for kernel (size %lx) decompression\n",
|
||||
req_size, load, image_len);
|
||||
}
|
||||
|
||||
load_buf = map_sysmem(load, 0);
|
||||
image_buf = map_sysmem(os.image_start, image_len);
|
||||
err = image_decomp(os.comp, load, os.image_start, os.type,
|
||||
|
|
Loading…
Add table
Reference in a new issue