mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-19 04:58:11 +00:00
perf(core): optimize boot time by removing unnecessary touch initialization delays
This commit is contained in:
parent
30edad0151
commit
8c1425edd5
1
core/embed/bootloader/.changelog.d/3429.changed
Normal file
1
core/embed/bootloader/.changelog.d/3429.changed
Normal file
@ -0,0 +1 @@
|
|||||||
|
Speed-up device boot
|
@ -408,6 +408,10 @@ int bootloader_main(void) {
|
|||||||
|
|
||||||
random_delays_init();
|
random_delays_init();
|
||||||
|
|
||||||
|
#if defined TREZOR_MODEL_T
|
||||||
|
set_core_clock(CLOCK_180_MHZ);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef STM32U5
|
#ifdef STM32U5
|
||||||
if (sectrue != flash_configure_sec_area_ob()) {
|
if (sectrue != flash_configure_sec_area_ob()) {
|
||||||
#ifdef STM32U5
|
#ifdef STM32U5
|
||||||
@ -426,6 +430,15 @@ int bootloader_main(void) {
|
|||||||
hash_processor_init();
|
hash_processor_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_I2C
|
||||||
|
i2c_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_TOUCH
|
||||||
|
touch_power_on();
|
||||||
|
touch_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_DMA2D
|
#ifdef USE_DMA2D
|
||||||
dma2d_init();
|
dma2d_init();
|
||||||
#endif
|
#endif
|
||||||
@ -490,24 +503,10 @@ int bootloader_main(void) {
|
|||||||
firmware_present_backup = firmware_present;
|
firmware_present_backup = firmware_present;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined TREZOR_MODEL_T
|
|
||||||
set_core_clock(CLOCK_180_MHZ);
|
|
||||||
display_set_little_endian();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_I2C
|
|
||||||
i2c_init();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_OPTIGA
|
#ifdef USE_OPTIGA
|
||||||
optiga_hal_init();
|
optiga_hal_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_TOUCH
|
|
||||||
touch_power_on();
|
|
||||||
touch_init();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_BUTTON
|
#ifdef USE_BUTTON
|
||||||
button_init();
|
button_init();
|
||||||
#endif
|
#endif
|
||||||
@ -550,7 +549,8 @@ int bootloader_main(void) {
|
|||||||
uint32_t touched = 0;
|
uint32_t touched = 0;
|
||||||
#ifdef USE_TOUCH
|
#ifdef USE_TOUCH
|
||||||
if (firmware_present == sectrue && stay_in_bootloader != sectrue) {
|
if (firmware_present == sectrue && stay_in_bootloader != sectrue) {
|
||||||
for (int i = 0; i < 100; i++) {
|
touch_wait_until_ready();
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
touched = touch_is_detected() | touch_read();
|
touched = touch_is_detected() | touch_read();
|
||||||
if (touched) {
|
if (touched) {
|
||||||
break;
|
break;
|
||||||
@ -558,7 +558,7 @@ int bootloader_main(void) {
|
|||||||
#ifdef TREZOR_EMULATOR
|
#ifdef TREZOR_EMULATOR
|
||||||
hal_delay(25);
|
hal_delay(25);
|
||||||
#else
|
#else
|
||||||
hal_delay(1);
|
hal_delay_us(1000);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,11 @@
|
|||||||
#define EVENT_OLD_TIMEOUT_MS 50
|
#define EVENT_OLD_TIMEOUT_MS 50
|
||||||
#define EVENT_MISSING_TIMEOUT_MS 50
|
#define EVENT_MISSING_TIMEOUT_MS 50
|
||||||
|
|
||||||
|
static uint32_t touch_init_ticks = 0;
|
||||||
|
|
||||||
static void touch_default_pin_state(void) {
|
static void touch_default_pin_state(void) {
|
||||||
|
GPIO_PinState state = HAL_GPIO_ReadPin(TOUCH_ON_PORT, TOUCH_ON_PIN);
|
||||||
|
|
||||||
// set power off and other pins as per section 3.5 of FT6236 datasheet
|
// set power off and other pins as per section 3.5 of FT6236 datasheet
|
||||||
HAL_GPIO_WritePin(TOUCH_ON_PORT, TOUCH_ON_PIN,
|
HAL_GPIO_WritePin(TOUCH_ON_PORT, TOUCH_ON_PIN,
|
||||||
GPIO_PIN_SET); // CTP_ON (active low) i.e.- CTPM power
|
GPIO_PIN_SET); // CTP_ON (active low) i.e.- CTPM power
|
||||||
@ -74,7 +78,11 @@ static void touch_default_pin_state(void) {
|
|||||||
// for these changes to take effect. a reset needs to be low for
|
// for these changes to take effect. a reset needs to be low for
|
||||||
// a minimum of 5ms. also wait for power circuitry to stabilize (if it
|
// a minimum of 5ms. also wait for power circuitry to stabilize (if it
|
||||||
// changed).
|
// changed).
|
||||||
HAL_Delay(100); // 100ms (being conservative)
|
HAL_Delay(10);
|
||||||
|
|
||||||
|
if (state == GPIO_PIN_SET) {
|
||||||
|
HAL_Delay(90); // add 90 ms for circuitry to stabilize (being conservative)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void touch_active_pin_state(void) {
|
static void touch_active_pin_state(void) {
|
||||||
@ -93,8 +101,10 @@ static void touch_active_pin_state(void) {
|
|||||||
|
|
||||||
HAL_GPIO_WritePin(TOUCH_RST_PORT, TOUCH_RST_PIN,
|
HAL_GPIO_WritePin(TOUCH_RST_PORT, TOUCH_RST_PIN,
|
||||||
GPIO_PIN_SET); // release CTPM reset
|
GPIO_PIN_SET); // release CTPM reset
|
||||||
HAL_Delay(310); // "Time of starting to report point after resetting" min is
|
|
||||||
// 300ms, giving an extra 10ms
|
touch_init_ticks = hal_ticks_ms();
|
||||||
|
|
||||||
|
HAL_Delay(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
void touch_set_mode(void) {
|
void touch_set_mode(void) {
|
||||||
@ -118,8 +128,6 @@ void touch_power_on(void) {
|
|||||||
|
|
||||||
// turn on CTP circuitry
|
// turn on CTP circuitry
|
||||||
touch_active_pin_state();
|
touch_active_pin_state();
|
||||||
|
|
||||||
HAL_Delay(50);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void touch_power_off(void) {
|
void touch_power_off(void) {
|
||||||
@ -143,6 +151,13 @@ void touch_init(void) {
|
|||||||
touch_sensitivity(TOUCH_SENSITIVITY);
|
touch_sensitivity(TOUCH_SENSITIVITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void touch_wait_until_ready(void) {
|
||||||
|
// wait for the touch controller to be ready
|
||||||
|
while (hal_ticks_ms() - touch_init_ticks < 310) {
|
||||||
|
HAL_Delay(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void touch_sensitivity(uint8_t value) {
|
void touch_sensitivity(uint8_t value) {
|
||||||
// set panel threshold (TH_GROUP) - default value is 0x12
|
// set panel threshold (TH_GROUP) - default value is 0x12
|
||||||
uint8_t touch_panel_threshold[] = {0x80, value};
|
uint8_t touch_panel_threshold[] = {0x80, value};
|
||||||
|
@ -699,3 +699,5 @@ uint32_t touch_read(void) {
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void touch_wait_until_ready(void) {}
|
||||||
|
@ -1212,3 +1212,5 @@ uint32_t touch_read(void) {
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void touch_wait_until_ready(void) {}
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
void touch_init(void);
|
void touch_init(void);
|
||||||
void touch_power_on(void);
|
void touch_power_on(void);
|
||||||
void touch_power_off(void);
|
void touch_power_off(void);
|
||||||
|
void touch_wait_until_ready(void);
|
||||||
|
|
||||||
void touch_sensitivity(uint8_t value);
|
void touch_sensitivity(uint8_t value);
|
||||||
uint32_t touch_read(void);
|
uint32_t touch_read(void);
|
||||||
uint32_t touch_click(void);
|
uint32_t touch_click(void);
|
||||||
|
@ -84,6 +84,7 @@ uint32_t touch_read(void) {
|
|||||||
|
|
||||||
void touch_init(void) {}
|
void touch_init(void) {}
|
||||||
void touch_power_on(void) {}
|
void touch_power_on(void) {}
|
||||||
|
void touch_wait_until_ready(void) {}
|
||||||
|
|
||||||
uint32_t touch_is_detected(void) { return _touch_detected; }
|
uint32_t touch_is_detected(void) { return _touch_detected; }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user