mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-02-02 02:41:28 +00:00
feat(core/bootloader): show whether the storage was erased in emu
This commit is contained in:
parent
7638694484
commit
ba112e6290
@ -1,11 +1,12 @@
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "bootui.h"
|
||||
#include "common.h"
|
||||
#include "display.h"
|
||||
#include "emulator.h"
|
||||
#include "flash.h"
|
||||
#include "rust_ui.h"
|
||||
#include "bootui.h"
|
||||
#include "emulator.h"
|
||||
|
||||
uint8_t *FIRMWARE_START = 0;
|
||||
uint32_t stay_in_bootloader_flag;
|
||||
@ -14,11 +15,28 @@ void set_core_clock(int) {}
|
||||
|
||||
int bootloader_main(void);
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
bool sector_is_empty(uint8_t sector) {
|
||||
const uint8_t *storage = flash_get_address(sector, 0, 0);
|
||||
size_t storage_size = flash_sector_size(sector);
|
||||
for (size_t i = 0; i < storage_size; i++) {
|
||||
if (storage[i] != 0xFF) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
__attribute__((noreturn)) int main(int argc, char **argv) {
|
||||
flash_init();
|
||||
FIRMWARE_START =
|
||||
(uint8_t *)flash_get_address(FLASH_SECTOR_FIRMWARE_START, 0, 0);
|
||||
|
||||
// simulate non-empty storage so that we know whether it was erased or not
|
||||
if (sector_is_empty(FLASH_SECTOR_STORAGE_1)) {
|
||||
secbool ret = flash_write_word(FLASH_SECTOR_STORAGE_1, 16, 0x12345678);
|
||||
(void)ret;
|
||||
}
|
||||
|
||||
if (argc == 2 && argv[1][0] == 's') {
|
||||
// Run the firmware
|
||||
stay_in_bootloader_flag = STAY_IN_BOOTLOADER_FLAG;
|
||||
@ -31,9 +49,9 @@ int main(int argc, char **argv) {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int retval = bootloader_main();
|
||||
bootloader_main();
|
||||
hal_delay(3000);
|
||||
exit(retval);
|
||||
jump_to(NULL);
|
||||
}
|
||||
|
||||
void display_set_little_endian(void) {}
|
||||
@ -44,8 +62,19 @@ void mpu_config_bootloader(void) {}
|
||||
|
||||
void mpu_config_off(void) {}
|
||||
|
||||
void jump_to(void *addr) {
|
||||
screen_fatal_error_rust("= bootloader =", "Jumped to firmware", "this is ok");
|
||||
__attribute__((noreturn)) void jump_to(void *addr) {
|
||||
bool storage_is_erased = sector_is_empty(FLASH_SECTOR_STORAGE_1) &&
|
||||
sector_is_empty(FLASH_SECTOR_STORAGE_2);
|
||||
|
||||
if (storage_is_erased) {
|
||||
printf("STORAGE WAS ERASED\n");
|
||||
screen_fatal_error_rust("BOOTLOADER EXIT", "Jumped to firmware",
|
||||
"STORAGE WAS ERASED");
|
||||
} else {
|
||||
printf("storage was retained\n");
|
||||
screen_install_success("STORAGE WAS RETAINED", true, true);
|
||||
}
|
||||
display_backlight(180);
|
||||
display_refresh();
|
||||
hal_delay(3000);
|
||||
exit(0);
|
||||
|
Loading…
Reference in New Issue
Block a user