diff options
author | William Wilgus <wilgus.william@gmail.com> | 2020-08-08 02:33:49 -0400 |
---|---|---|
committer | William Wilgus <wilgus.william@gmail.com> | 2020-08-08 02:41:13 -0400 |
commit | d7b9eb6b63e073238480cb2a95b0cf529e17541a (patch) | |
tree | 06f801294e6c177f92949004a3519329a8e07bc0 /firmware | |
parent | adce547e132a6f12cf3c3a552df6102244a970cb (diff) |
ROLO - Enable multiboot firmware
I never added multiboot awareness to ROLO
When a new firmware file was loaded [Bootdata] would not be
copied to the new instance resulting in the firmware
running off the internal drive till next reboot
Bootloaders shares the rb-loader code but should not be
affected by the removal of static from write_bootdata()
Change-Id: Iccb18eebeee5c59f9534df51eb6826876c441762
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/common/rb-loader.c | 2 | ||||
-rw-r--r-- | firmware/rolo.c | 14 |
2 files changed, 15 insertions, 1 deletions
diff --git a/firmware/common/rb-loader.c b/firmware/common/rb-loader.c index 8bf553a3a8..1ded8c2335 100644 --- a/firmware/common/rb-loader.c +++ b/firmware/common/rb-loader.c @@ -36,7 +36,7 @@ * Returns payload len on success, * On error returns EKEY_NOT_FOUND */ -static int write_bootdata(unsigned char* buf, int len, unsigned int boot_volume) +int write_bootdata(unsigned char* buf, int len, unsigned int boot_volume) { struct boot_data_t bl_boot_data; struct boot_data_t *fw_boot_data = NULL; diff --git a/firmware/rolo.c b/firmware/rolo.c index 9a527e9074..769346662b 100644 --- a/firmware/rolo.c +++ b/firmware/rolo.c @@ -48,6 +48,11 @@ #define LOAD_FIRMWARE(a,b,c) load_rkw(a,b,c) #else #include "rb-loader.h" +#if defined(HAVE_BOOTDATA) && !defined(SIMULATOR) +#include "bootdata.h" +#include "crc32.h" +extern int write_bootdata(unsigned char* buf, int len, unsigned int boot_volume); /*rb-loader.c*/ +#endif #define LOAD_FIRMWARE(a,b,c) load_firmware(a,b,c) #endif @@ -236,6 +241,15 @@ int rolo_load(const char* filename) filebuf = core_get_data(rolo_handle); err = LOAD_FIRMWARE(filebuf, filename, filebuf_size); +#if defined(HAVE_BOOTDATA) && !defined(SIMULATOR) + /* write the bootdata as if rolo were the bootloader */ + unsigned int crc = 0; + if (strcmp(filename, BOOTDIR "/" BOOTFILE) == 0) + crc = crc_32(boot_data.payload, boot_data.length, 0xffffffff); + + if(crc > 0 && crc == boot_data.crc) + write_bootdata(filebuf, filebuf_size, boot_data.boot_volume); /* rb-loader.c */ +#endif if (err <= 0) { |