mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-19 05:58:09 +00:00
refactor(core/embed): simplify ensure_compatible_settings
[no changelog]
This commit is contained in:
parent
1d8b29e746
commit
33c2bcbe52
@ -326,7 +326,10 @@ int main(void) {
|
|||||||
write_bootloader_min_version(hdr->monotonic);
|
write_bootloader_min_version(hdr->monotonic);
|
||||||
|
|
||||||
display_deinit(DISPLAY_RETAIN_CONTENT);
|
display_deinit(DISPLAY_RETAIN_CONTENT);
|
||||||
|
|
||||||
|
#ifdef ENSURE_COMPATIBLE_SETTINGS
|
||||||
ensure_compatible_settings();
|
ensure_compatible_settings();
|
||||||
|
#endif
|
||||||
|
|
||||||
mpu_config_off();
|
mpu_config_off();
|
||||||
|
|
||||||
|
@ -188,5 +188,3 @@ __attribute__((noreturn)) void jump_to(uint32_t address) {
|
|||||||
"STORAGE WAS RETAINED");
|
"STORAGE WAS RETAINED");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ensure_compatible_settings(void) {}
|
|
||||||
|
@ -15,8 +15,6 @@ void emulator_poll_events(void);
|
|||||||
void set_core_clock(int);
|
void set_core_clock(int);
|
||||||
void mpu_config_bootloader(void);
|
void mpu_config_bootloader(void);
|
||||||
void mpu_config_off(void);
|
void mpu_config_off(void);
|
||||||
void display_set_little_endian(void);
|
void jump_to(void *addr);
|
||||||
void jump_to(uint32_t address);
|
|
||||||
void ensure_compatible_settings(void);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -331,7 +331,10 @@ void real_jump_to_firmware(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
display_deinit(DISPLAY_RETAIN_CONTENT);
|
display_deinit(DISPLAY_RETAIN_CONTENT);
|
||||||
|
|
||||||
|
#ifdef ENSURE_COMPATIBLE_SETTINGS
|
||||||
ensure_compatible_settings();
|
ensure_compatible_settings();
|
||||||
|
#endif
|
||||||
|
|
||||||
mpu_config_off();
|
mpu_config_off();
|
||||||
jump_to(IMAGE_CODE_ALIGN(FIRMWARE_START + vhdr.hdrlen + IMAGE_HEADER_SIZE));
|
jump_to(IMAGE_CODE_ALIGN(FIRMWARE_START + vhdr.hdrlen + IMAGE_HEADER_SIZE));
|
||||||
|
@ -58,4 +58,11 @@
|
|||||||
#define SD_ENABLE_PORT GPIOC
|
#define SD_ENABLE_PORT GPIOC
|
||||||
#define SD_ENABLE_PIN GPIO_PIN_0
|
#define SD_ENABLE_PIN GPIO_PIN_0
|
||||||
|
|
||||||
|
// Ensure compatible hardware settings before jumping to
|
||||||
|
// the different booting stage. This function is used to
|
||||||
|
// ensure backward compatibility with older versions of
|
||||||
|
// released bootloaders and firmware.
|
||||||
|
#define ENSURE_COMPATIBLE_SETTINGS
|
||||||
|
extern void ensure_compatible_settings(void);
|
||||||
|
|
||||||
#endif //_TREZOR_T_H
|
#endif //_TREZOR_T_H
|
||||||
|
4
core/embed/models/T2T1/compat_settings.c
Normal file
4
core/embed/models/T2T1/compat_settings.c
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
#include "platform.h"
|
||||||
|
|
||||||
|
void ensure_compatible_settings(void) { set_core_clock(CLOCK_168_MHZ); }
|
@ -93,6 +93,12 @@ static inline void display_init(display_content_mode_t mode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline void display_deinit(display_content_mode_t mode) {
|
static inline void display_deinit(display_content_mode_t mode) {
|
||||||
|
|
||||||
|
#ifdef TREZOR_MODEL_T
|
||||||
|
if (mode == DISPLAY_RESET_CONTENT) {
|
||||||
|
display_orientation(0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
display_finish_actions();
|
display_finish_actions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,22 +117,6 @@ void collect_hw_entropy(void) {
|
|||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// this function resets settings changed in one layer (bootloader/firmware),
|
|
||||||
// which might be incompatible with the other layers older versions,
|
|
||||||
// where this setting might be unknown
|
|
||||||
void ensure_compatible_settings(void) {
|
|
||||||
#ifdef TREZOR_MODEL_T
|
|
||||||
#ifdef NEW_RENDERING
|
|
||||||
display_set_compatible_settings();
|
|
||||||
#else
|
|
||||||
display_set_big_endian();
|
|
||||||
#endif
|
|
||||||
display_orientation(0);
|
|
||||||
set_core_clock(CLOCK_168_MHZ);
|
|
||||||
backlight_pwm_deinit(BACKLIGHT_RETAIN);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void invalidate_firmware(void) {
|
void invalidate_firmware(void) {
|
||||||
// erase start of the firmware (metadata) -> invalidate FW
|
// erase start of the firmware (metadata) -> invalidate FW
|
||||||
ensure(flash_unlock_write(), NULL);
|
ensure(flash_unlock_write(), NULL);
|
||||||
|
@ -723,6 +723,7 @@ void display_finish_actions(void) {
|
|||||||
#ifndef BOARDLOADER
|
#ifndef BOARDLOADER
|
||||||
bg_copy_wait();
|
bg_copy_wait();
|
||||||
#endif
|
#endif
|
||||||
|
backlight_pwm_deinit(BACKLIGHT_RETAIN);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
// NOT FRAMEBUFFER
|
// NOT FRAMEBUFFER
|
||||||
@ -755,6 +756,11 @@ uint16_t display_get_window_offset(void) { return 0; }
|
|||||||
|
|
||||||
void display_shift_window(uint16_t pixels) {}
|
void display_shift_window(uint16_t pixels) {}
|
||||||
|
|
||||||
void display_finish_actions(void) {}
|
void display_finish_actions(void) {
|
||||||
|
backlight_pwm_deinit(BACKLIGHT_RETAIN);
|
||||||
|
#ifdef TREZOR_MODEL_T
|
||||||
|
display_set_big_endian();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -35,7 +35,6 @@ void set_core_clock(clock_settings_t settings);
|
|||||||
void memset_reg(volatile void *start, volatile void *stop, uint32_t val);
|
void memset_reg(volatile void *start, volatile void *stop, uint32_t val);
|
||||||
void jump_to(uint32_t address);
|
void jump_to(uint32_t address);
|
||||||
void jump_to_with_flag(uint32_t address, uint32_t register_flag);
|
void jump_to_with_flag(uint32_t address, uint32_t register_flag);
|
||||||
void ensure_compatible_settings(void);
|
|
||||||
void clear_otg_hs_memory(void);
|
void clear_otg_hs_memory(void);
|
||||||
void drop_privileges(void);
|
void drop_privileges(void);
|
||||||
|
|
||||||
|
@ -31,8 +31,10 @@ __attribute__((noreturn)) static void _reboot_to_bootloader(
|
|||||||
#else
|
#else
|
||||||
__attribute__((noreturn)) static void _reboot_to_bootloader(
|
__attribute__((noreturn)) static void _reboot_to_bootloader(
|
||||||
boot_command_t boot_command) {
|
boot_command_t boot_command) {
|
||||||
display_deinit(DISPLAY_RETAIN_CONTENT);
|
display_deinit(DISPLAY_RESET_CONTENT);
|
||||||
|
#ifdef ENSURE_COMPATIBLE_SETTINGS
|
||||||
ensure_compatible_settings();
|
ensure_compatible_settings();
|
||||||
|
#endif
|
||||||
mpu_config_bootloader();
|
mpu_config_bootloader();
|
||||||
jump_to_with_flag(IMAGE_CODE_ALIGN(BOOTLOADER_START + IMAGE_HEADER_SIZE),
|
jump_to_with_flag(IMAGE_CODE_ALIGN(BOOTLOADER_START + IMAGE_HEADER_SIZE),
|
||||||
boot_command);
|
boot_command);
|
||||||
|
@ -18,7 +18,6 @@ extern uint32_t systick_val_copy;
|
|||||||
|
|
||||||
// from util.s
|
// from util.s
|
||||||
extern void shutdown_privileged(void);
|
extern void shutdown_privileged(void);
|
||||||
extern void ensure_compatible_settings(void);
|
|
||||||
|
|
||||||
// Initializes the supervise module
|
// Initializes the supervise module
|
||||||
//
|
//
|
||||||
|
@ -72,9 +72,23 @@ void display_init(display_content_mode_t mode) {
|
|||||||
void display_deinit(display_content_mode_t mode) {
|
void display_deinit(display_content_mode_t mode) {
|
||||||
#ifdef XFRAMEBUFFER
|
#ifdef XFRAMEBUFFER
|
||||||
#ifndef BOARDLOADER
|
#ifndef BOARDLOADER
|
||||||
|
// Ensure that the ready frame buffer is transfered to
|
||||||
|
// the display controller
|
||||||
display_ensure_refreshed();
|
display_ensure_refreshed();
|
||||||
|
// Disable periodical interrupt
|
||||||
svc_disableIRQ(DISPLAY_TE_INTERRUPT_NUM);
|
svc_disableIRQ(DISPLAY_TE_INTERRUPT_NUM);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
backlight_pwm_deinit(mode == DISPLAY_RESET_CONTENT ? BACKLIGHT_RESET : BACKLIGHT_RETAIN);
|
||||||
|
|
||||||
|
#ifdef TREZOR_MODEL_T
|
||||||
|
// This ensures backward compatibility with legacy bootloader/firmware
|
||||||
|
// that relies on this hardware settings from the previous boot stage
|
||||||
|
if (mode == DISPLAY_RESET_CONTENT) {
|
||||||
|
display_set_orientation(0);
|
||||||
|
}
|
||||||
|
display_panel_set_big_endian();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,5 +137,3 @@ int display_get_orientation(void) {
|
|||||||
|
|
||||||
return drv->orientation_angle;
|
return drv->orientation_angle;
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_set_compatible_settings(void) { display_panel_set_big_endian(); }
|
|
||||||
|
@ -107,8 +107,6 @@ void display_refresh(void) {
|
|||||||
// Do nothing as using just a single frame buffer
|
// Do nothing as using just a single frame buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_set_compatible_settings() {}
|
|
||||||
|
|
||||||
void display_fill(const gfx_bitblt_t *bb) {
|
void display_fill(const gfx_bitblt_t *bb) {
|
||||||
display_driver_t *drv = &g_display_driver;
|
display_driver_t *drv = &g_display_driver;
|
||||||
|
|
||||||
|
@ -370,8 +370,6 @@ display_fb_info_t display_get_frame_buffer(void) {
|
|||||||
|
|
||||||
void display_refresh(void) { display_sync_with_fb(); }
|
void display_refresh(void) { display_sync_with_fb(); }
|
||||||
|
|
||||||
void display_set_compatible_settings() {}
|
|
||||||
|
|
||||||
void display_fill(const gfx_bitblt_t *bb) {
|
void display_fill(const gfx_bitblt_t *bb) {
|
||||||
display_driver_t *drv = &g_display_driver;
|
display_driver_t *drv = &g_display_driver;
|
||||||
|
|
||||||
|
@ -351,8 +351,6 @@ void display_refresh(void) {
|
|||||||
display_sync_with_fb(drv);
|
display_sync_with_fb(drv);
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_set_compatible_settings() {}
|
|
||||||
|
|
||||||
void display_fill(const gfx_bitblt_t *bb) {
|
void display_fill(const gfx_bitblt_t *bb) {
|
||||||
display_driver_t *drv = &g_display_driver;
|
display_driver_t *drv = &g_display_driver;
|
||||||
|
|
||||||
|
@ -101,11 +101,6 @@ void collect_hw_entropy(void) {
|
|||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// this function resets settings changed in one layer (bootloader/firmware),
|
|
||||||
// which might be incompatible with the other layers older versions,
|
|
||||||
// where this setting might be unknown
|
|
||||||
void ensure_compatible_settings(void) {}
|
|
||||||
|
|
||||||
void invalidate_firmware(void) {
|
void invalidate_firmware(void) {
|
||||||
// on stm32u5, we need to disable the instruction cache before erasing the
|
// on stm32u5, we need to disable the instruction cache before erasing the
|
||||||
// firmware - otherwise, the write check will fail
|
// firmware - otherwise, the write check will fail
|
||||||
|
@ -34,7 +34,6 @@ typedef enum {
|
|||||||
} clock_settings_t;
|
} clock_settings_t;
|
||||||
|
|
||||||
void set_core_clock(clock_settings_t settings);
|
void set_core_clock(clock_settings_t settings);
|
||||||
void ensure_compatible_settings(void);
|
|
||||||
void drop_privileges(void);
|
void drop_privileges(void);
|
||||||
|
|
||||||
// the following functions are defined in util.s
|
// the following functions are defined in util.s
|
||||||
|
@ -76,7 +76,7 @@ void display_pixeldata(pixel_color c) {
|
|||||||
c = (c & 0x8410) ? 0xFFFF : 0x0000;
|
c = (c & 0x8410) ? 0xFFFF : 0x0000;
|
||||||
#endif
|
#endif
|
||||||
if (!RENDERER) {
|
if (!RENDERER) {
|
||||||
display_init();
|
display_init_all();
|
||||||
}
|
}
|
||||||
if (PIXELWINDOW.pos.x <= PIXELWINDOW.end.x &&
|
if (PIXELWINDOW.pos.x <= PIXELWINDOW.end.x &&
|
||||||
PIXELWINDOW.pos.y <= PIXELWINDOW.end.y) {
|
PIXELWINDOW.pos.y <= PIXELWINDOW.end.y) {
|
||||||
@ -97,7 +97,7 @@ void display_reset_state() {}
|
|||||||
|
|
||||||
void display_init_seq(void) {}
|
void display_init_seq(void) {}
|
||||||
|
|
||||||
void display_deinit(void) {
|
void display_exit_handler(void) {
|
||||||
SDL_FreeSurface(PREV_SAVED);
|
SDL_FreeSurface(PREV_SAVED);
|
||||||
SDL_FreeSurface(BUFFER);
|
SDL_FreeSurface(BUFFER);
|
||||||
if (BACKGROUND != NULL) {
|
if (BACKGROUND != NULL) {
|
||||||
@ -115,12 +115,12 @@ void display_deinit(void) {
|
|||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_init(void) {
|
void display_init_all(void) {
|
||||||
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
|
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
|
||||||
printf("%s\n", SDL_GetError());
|
printf("%s\n", SDL_GetError());
|
||||||
error_shutdown("SDL_Init error");
|
error_shutdown("SDL_Init error");
|
||||||
}
|
}
|
||||||
atexit(display_deinit);
|
atexit(display_exit_handler);
|
||||||
|
|
||||||
char *window_title = NULL;
|
char *window_title = NULL;
|
||||||
char *window_title_alloc = NULL;
|
char *window_title_alloc = NULL;
|
||||||
@ -197,7 +197,7 @@ void display_init(void) {
|
|||||||
|
|
||||||
void display_set_window(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
|
void display_set_window(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
|
||||||
if (!RENDERER) {
|
if (!RENDERER) {
|
||||||
display_init();
|
display_init_all();
|
||||||
}
|
}
|
||||||
PIXELWINDOW.start.x = x0;
|
PIXELWINDOW.start.x = x0;
|
||||||
PIXELWINDOW.start.y = y0;
|
PIXELWINDOW.start.y = y0;
|
||||||
@ -211,7 +211,7 @@ void display_sync(void) {}
|
|||||||
|
|
||||||
void display_refresh(void) {
|
void display_refresh(void) {
|
||||||
if (!RENDERER) {
|
if (!RENDERER) {
|
||||||
display_init();
|
display_init_all();
|
||||||
}
|
}
|
||||||
if (BACKGROUND) {
|
if (BACKGROUND) {
|
||||||
const SDL_Rect r = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
const SDL_Rect r = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
||||||
@ -267,7 +267,7 @@ int display_backlight(int val) {
|
|||||||
|
|
||||||
const char *display_save(const char *prefix) {
|
const char *display_save(const char *prefix) {
|
||||||
if (!RENDERER) {
|
if (!RENDERER) {
|
||||||
display_init();
|
display_init_all();
|
||||||
}
|
}
|
||||||
static int count;
|
static int count;
|
||||||
static char filename[256];
|
static char filename[256];
|
||||||
|
@ -254,7 +254,7 @@ void display_refresh(void) {
|
|||||||
display_driver_t *drv = &g_display_driver;
|
display_driver_t *drv = &g_display_driver;
|
||||||
|
|
||||||
if (!drv->renderer) {
|
if (!drv->renderer) {
|
||||||
display_init();
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DISPLAY_MONO
|
#ifdef DISPLAY_MONO
|
||||||
@ -287,10 +287,6 @@ void display_refresh(void) {
|
|||||||
SDL_RenderPresent(drv->renderer);
|
SDL_RenderPresent(drv->renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_set_compatible_settings(void) {
|
|
||||||
// not used
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef DISPLAY_MONO
|
#ifndef DISPLAY_MONO
|
||||||
|
|
||||||
void display_fill(const gfx_bitblt_t *bb) {
|
void display_fill(const gfx_bitblt_t *bb) {
|
||||||
@ -365,7 +361,7 @@ const char *display_save(const char *prefix) {
|
|||||||
display_driver_t *drv = &g_display_driver;
|
display_driver_t *drv = &g_display_driver;
|
||||||
|
|
||||||
if (!drv->renderer) {
|
if (!drv->renderer) {
|
||||||
display_init();
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DISPLAY_MONO
|
#ifdef DISPLAY_MONO
|
||||||
|
@ -127,11 +127,6 @@ void display_wait_for_sync(void);
|
|||||||
// swaps the active (currently displayed) and the inactive frame buffers.
|
// swaps the active (currently displayed) and the inactive frame buffers.
|
||||||
void display_refresh(void);
|
void display_refresh(void);
|
||||||
|
|
||||||
// Sets display to the mode compatible with the legacy bootloader code.
|
|
||||||
//
|
|
||||||
// This is used when switching between the firmware and the bootloader.
|
|
||||||
void display_set_compatible_settings(void);
|
|
||||||
|
|
||||||
// Following functions define display's bitblt interface.
|
// Following functions define display's bitblt interface.
|
||||||
//
|
//
|
||||||
// These functions draw directly to to display or to the
|
// These functions draw directly to to display or to the
|
||||||
|
@ -40,6 +40,7 @@ def configure(
|
|||||||
defines += [f"HW_REVISION={hw_revision}"]
|
defines += [f"HW_REVISION={hw_revision}"]
|
||||||
sources += [
|
sources += [
|
||||||
"embed/models/T2T1/model_T2T1_layout.c",
|
"embed/models/T2T1/model_T2T1_layout.c",
|
||||||
|
"embed/models/T2T1/compat_settings.c",
|
||||||
]
|
]
|
||||||
if "new_rendering" in features_wanted:
|
if "new_rendering" in features_wanted:
|
||||||
sources += ["embed/trezorhal/xdisplay_legacy.c"]
|
sources += ["embed/trezorhal/xdisplay_legacy.c"]
|
||||||
|
Loading…
Reference in New Issue
Block a user