2 Commits

Author SHA1 Message Date
Yao Zi
0028a957e3 configs: light-c910: Setup kernel decompression buffer
Image decompression requires a temporary buffer to store decompressed
image. Setup it for C910 boards.

Signed-off-by: Yao Zi <ziyao@disroot.org>
2025-11-24 19:50:27 +08:00
Yao Zi
c971a1448d cmd/boot: Try decompressing kernel through GZIP
This makes it possible to boot GZIP-compressed Linux kernel with
sysboot.

Signed-off-by: Yao Zi <ziyao@disroot.org>
2025-11-24 19:49:23 +08:00
2 changed files with 29 additions and 0 deletions

View File

@@ -24,6 +24,10 @@ static int booti_start(cmd_tbl_t *cmdtp, int flag, int argc,
ulong ld;
ulong relocated_addr;
ulong image_size;
char *tmp;
ulong dest_end;
ulong decomp_dst;
ulong comp_len;
ret = do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START,
images, 1);
@@ -38,6 +42,29 @@ static int booti_start(cmd_tbl_t *cmdtp, int flag, int argc,
debug("* kernel: cmdline image address = 0x%08lx\n", ld);
}
tmp = map_sysmem(ld, 0);
decomp_dst = env_get_ulong("kernel_comp_addr_r", 16, 0);
comp_len = env_get_ulong("kernel_comp_size", 16, 0);
if (!decomp_dst || !comp_len) {
puts("kernel_comp_addr_r or kernel_comp_size aren't defined!\n");
return -EINVAL;
}
ret = image_decomp(IH_COMP_GZIP, 0, ld, IH_TYPE_KERNEL,
(void *)decomp_dst, (void *)ld, comp_len,
comp_len * 10, &dest_end);
if (!ret) {
printf("Kernel image compression size = 0x%08lx, address = 0x%08lx\n",
comp_len, decomp_dst);
memmove((void *)ld, (void *)decomp_dst, dest_end);
} else {
printf("failed to decompress kernel image: %d\n", ret);
}
ret = booti_setup(ld, &relocated_addr, &image_size, false);
if (ret != 0)
return 1;

View File

@@ -166,6 +166,8 @@
"emmc_dev=0\0" \
"sdcard_dev=1\0" \
"mmc_select=if test -e ${boottype} ${default_mmcdev}:${mmcbootpart} ${boot_conf_file}; then mmcdev=1; else mmcdev=0; fi;\0" \
"kernel_comp_addr_r=0x20000000\0" \
"kernel_comp_size=0x08000000\0" \
"boot_conf_file=/extlinux/extlinux.conf\0" \
"uuid_rootfsA=80a5a8e9-c744-491a-93c1-4f4194fd690a\0" \
"uuid_swap=5ebcaaf0-e098-43b9-beef-1f8deedd135e\0" \