From: Markus Stockhausen Date: Tue, 30 Dec 2025 16:34:41 +0000 (+0100) Subject: realtek: rt-loader: allow piggy-backed uimage X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cd13ed6fcfe7457e6c1539f1c0cf8e8ade33b4fb;p=thirdparty%2Fopenwrt.git 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 --- diff --git a/target/linux/realtek/image/rt-loader/src/main.c b/target/linux/realtek/image/rt-loader/src/main.c index e8ac501607e..80c8ba85d09 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; /*