mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-25 16:08:32 +00:00
feat(core/bootloader): add power management to bootloader
[no changelog]
This commit is contained in:
parent
c63ff3bf44
commit
26dc39b941
@ -20,7 +20,7 @@ if not models.has_emulator(TREZOR_MODEL):
|
|||||||
)
|
)
|
||||||
Return()
|
Return()
|
||||||
|
|
||||||
FEATURES_WANTED = ["input", "rgb_led", "dma2d", "optiga", "powerctl", "display"]
|
FEATURES_WANTED = ["input", "rgb_led", "dma2d", "optiga", "power_manager", "display"]
|
||||||
|
|
||||||
CCFLAGS_MOD = ''
|
CCFLAGS_MOD = ''
|
||||||
CPPPATH_MOD = []
|
CPPPATH_MOD = []
|
||||||
|
@ -90,6 +90,56 @@ CONFIDENTIAL volatile secbool dont_optimize_out_true = sectrue;
|
|||||||
CONFIDENTIAL void (*volatile firmware_jump_fn)(void) = failed_jump_to_firmware;
|
CONFIDENTIAL void (*volatile firmware_jump_fn)(void) = failed_jump_to_firmware;
|
||||||
|
|
||||||
static void drivers_init(secbool *touch_initialized) {
|
static void drivers_init(secbool *touch_initialized) {
|
||||||
|
#ifdef USE_BACKUP_RAM
|
||||||
|
backup_ram_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_BUTTON
|
||||||
|
button_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_RGB_LED
|
||||||
|
rgb_led_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_POWER_MANAGER
|
||||||
|
pm_init(false);
|
||||||
|
|
||||||
|
boot_command_t cmd = bootargs_get_command();
|
||||||
|
|
||||||
|
bool turn_on =
|
||||||
|
(cmd == BOOT_COMMAND_INSTALL_UPGRADE || cmd == BOOT_COMMAND_REBOOT ||
|
||||||
|
cmd == BOOT_COMMAND_SHOW_RSOD || cmd == BOOT_COMMAND_STOP_AND_WAIT);
|
||||||
|
|
||||||
|
while (!button_is_down(BTN_POWER) && !turn_on) {
|
||||||
|
pm_state_t state;
|
||||||
|
pm_get_state(&state);
|
||||||
|
|
||||||
|
if (state.charging_status == PM_BATTERY_CHARGING) {
|
||||||
|
// charing screen
|
||||||
|
rgb_led_set_color(0x0000FF);
|
||||||
|
} else {
|
||||||
|
if (!state.usb_connected && !state.wireless_connected) {
|
||||||
|
// device in just intended to be turned off
|
||||||
|
pm_hibernate();
|
||||||
|
systick_delay_ms(1000);
|
||||||
|
reboot_to_off();
|
||||||
|
} else {
|
||||||
|
// todo signal full battery if conditions are met
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (pm_turn_on() != PM_OK) {
|
||||||
|
rgb_led_set_color(0x400000);
|
||||||
|
systick_delay_ms(1000);
|
||||||
|
pm_hibernate();
|
||||||
|
systick_delay_ms(1000);
|
||||||
|
reboot_to_off();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
random_delays_init();
|
random_delays_init();
|
||||||
#ifdef USE_PVD
|
#ifdef USE_PVD
|
||||||
pvd_init();
|
pvd_init();
|
||||||
@ -127,27 +177,17 @@ static void drivers_init(secbool *touch_initialized) {
|
|||||||
#ifdef USE_OPTIGA
|
#ifdef USE_OPTIGA
|
||||||
optiga_hal_init();
|
optiga_hal_init();
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_BACKUP_RAM
|
|
||||||
backup_ram_init();
|
|
||||||
#endif
|
|
||||||
#ifdef USE_BUTTON
|
|
||||||
button_init();
|
|
||||||
#endif
|
|
||||||
#ifdef USE_CONSUMPTION_MASK
|
#ifdef USE_CONSUMPTION_MASK
|
||||||
consumption_mask_init();
|
consumption_mask_init();
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_RGB_LED
|
|
||||||
rgb_led_init();
|
|
||||||
#endif
|
|
||||||
#ifdef USE_BLE
|
#ifdef USE_BLE
|
||||||
ble_init();
|
ble_init();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void drivers_deinit(void) {
|
static void drivers_deinit(void) {
|
||||||
#ifdef USE_BACKUP_RAM
|
|
||||||
backup_ram_deinit();
|
|
||||||
#endif
|
|
||||||
#ifdef FIXED_HW_DEINIT
|
#ifdef FIXED_HW_DEINIT
|
||||||
#ifdef USE_BUTTON
|
#ifdef USE_BUTTON
|
||||||
button_deinit();
|
button_deinit();
|
||||||
@ -163,6 +203,9 @@ static void drivers_deinit(void) {
|
|||||||
#ifdef USE_POWER_MANAGER
|
#ifdef USE_POWER_MANAGER
|
||||||
pm_deinit();
|
pm_deinit();
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USE_BACKUP_RAM
|
||||||
|
backup_ram_deinit();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static secbool check_vendor_header_lock(const vendor_header *const vhdr) {
|
static secbool check_vendor_header_lock(const vendor_header *const vhdr) {
|
||||||
@ -342,10 +385,6 @@ int bootloader_main(void) {
|
|||||||
firmware_present_backup = firmware_present;
|
firmware_present_backup = firmware_present;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_POWER_MANAGER
|
|
||||||
pm_init(false);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if PRODUCTION && !defined STM32U5
|
#if PRODUCTION && !defined STM32U5
|
||||||
// for STM32U5, this check is moved to boardloader
|
// for STM32U5, this check is moved to boardloader
|
||||||
ensure_bootloader_min_version();
|
ensure_bootloader_min_version();
|
||||||
|
Loading…
Reference in New Issue
Block a user