diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2022-03-03 23:40:17 +0000 |
---|---|---|
committer | Aidan MacDonald <amachronic@protonmail.com> | 2022-03-12 18:25:10 +0000 |
commit | 38eafb60ff53079074443cddbda71dc4d7b31193 (patch) | |
tree | a72529338033f637b40640e562c9df27ae6a265c | |
parent | 376ffbcf9aabae6f47d62ba4734ae1bb230ebce3 (diff) | |
download | rockbox-38eafb60ff.tar.gz rockbox-38eafb60ff.zip |
x1000: use core_alloc in bootloader for loading rockbox
Using the audio buffer directly is a bad idea because this will
render core_alloc non-functional if load_firmware() writes into
the buffer but then fails, for example on a checksum mismatch.
Change-Id: Ib2d17bcea53bdea1c4c5496cec0c4eee5dd66069
-rw-r--r-- | bootloader/x1000.c | 16 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_x1000/app.lds | 2 |
2 files changed, 10 insertions, 8 deletions
diff --git a/bootloader/x1000.c b/bootloader/x1000.c index bce7b69784..14634683e6 100644 --- a/bootloader/x1000.c +++ b/bootloader/x1000.c @@ -137,11 +137,6 @@ const struct menuitem recovery_items[] = { {MENUITEM_ACTION, "Restore", &bootloader_restore}, }; -/* Temp buffer to contain the binary in memory */ -extern unsigned char loadbuffer[]; -extern unsigned char loadbufferend[]; -#define MAX_LOAD_SIZE (loadbufferend - loadbuffer) - /* Flags to indicate if hardware was already initialized */ bool lcd_inited = false; bool usb_inited = false; @@ -340,8 +335,17 @@ void boot_rockbox(void) if(init_disk() != 0) return; - int rc = load_firmware(loadbuffer, BOOTFILE, MAX_LOAD_SIZE); + size_t max_size = 0; + int handle = core_alloc_maximum("rockbox", &max_size, &buflib_ops_locked); + if(handle < 0) { + splash(5*HZ, "Out of memory"); + return; + } + + unsigned char* loadbuffer = core_get_data(handle); + int rc = load_firmware(loadbuffer, BOOTFILE, max_size); if(rc <= 0) { + core_free(handle); splash2(5*HZ, "Error loading Rockbox", loader_strerror(rc)); return; } diff --git a/firmware/target/mips/ingenic_x1000/app.lds b/firmware/target/mips/ingenic_x1000/app.lds index 26b2854728..9b36071c3c 100644 --- a/firmware/target/mips/ingenic_x1000/app.lds +++ b/firmware/target/mips/ingenic_x1000/app.lds @@ -88,10 +88,8 @@ SECTIONS { . = ALIGN(4); audiobuffer = .; - loadbuffer = .; } > DRAM - loadbufferend = ENDAUDIOADDR; audiobufend = ENDAUDIOADDR; codecbuf = ENDAUDIOADDR; pluginbuf = ENDCODECADDR; |