From cd13ed6fcfe7457e6c1539f1c0cf8e8ade33b4fb Mon Sep 17 00:00:00 2001 From: Markus Stockhausen Date: Tue, 30 Dec 2025 17:34:41 +0100 Subject: [PATCH] realtek: rt-loader: allow piggy-backed uimage Until now rt-loader expects a piggy-backed lzma compressed data stream. Be more flexible and allow a piggy-backed uimage as well. Signed-off-by: Markus Stockhausen Link: https://github.com/openwrt/openwrt/pull/21332 Signed-off-by: Robert Marko --- .../linux/realtek/image/rt-loader/src/main.c | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/target/linux/realtek/image/rt-loader/src/main.c b/target/linux/realtek/image/rt-loader/src/main.c index e8ac501607..80c8ba85d0 100644 --- a/target/linux/realtek/image/rt-loader/src/main.c +++ b/target/linux/realtek/image/rt-loader/src/main.c @@ -170,6 +170,27 @@ void load_uimage_from_flash(void *flash_start) memcpy(_kernel_data_addr, flash_addr + UIMAGE_HDR_SIZE, _kernel_data_size); } +bool search_piggy_backed_uimage(void) +{ + void *addr = _kernel_data_addr; + + /* + * Piggy-backed data might be an uImage or not. Run a lazy uImage check. + * In case it fails it should be safe to assume an lzma data stream. + */ + search_image(&addr, &_kernel_data_size, &_kernel_load_addr); + + if (!addr) + return false; + + printf("piggy-backed uImage '%s' found at 0x%08x with load address 0x%08x\n", + (char *)(addr + 32), addr, _kernel_load_addr); + + _kernel_data_addr = addr + UIMAGE_HDR_SIZE; + + return true; +} + void main(unsigned long reg_a0, unsigned long reg_a1, unsigned long reg_a2, unsigned long reg_a3) { @@ -195,7 +216,7 @@ void main(unsigned long reg_a0, unsigned long reg_a1, */ if (flash_start) load_uimage_from_flash(flash_start); - else if (kernel_addr) + else if (!search_piggy_backed_uimage() && kernel_addr) _kernel_load_addr = kernel_addr; /*