summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAidan MacDonald <amachronic@protonmail.com>2022-03-03 23:40:17 +0000
committerAidan MacDonald <amachronic@protonmail.com>2022-03-12 18:25:10 +0000
commit38eafb60ff53079074443cddbda71dc4d7b31193 (patch)
treea72529338033f637b40640e562c9df27ae6a265c
parent376ffbcf9aabae6f47d62ba4734ae1bb230ebce3 (diff)
downloadrockbox-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.c16
-rw-r--r--firmware/target/mips/ingenic_x1000/app.lds2
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;