1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-07-30 18:38:27 +00:00

perf(core): save flash in by not using HAL for oscillator configuration

[no changelog]
This commit is contained in:
tychovrahe 2025-07-16 14:07:04 +02:00 committed by TychoVrahe
parent f97ead8bb5
commit f552569292
2 changed files with 32 additions and 17 deletions

View File

@ -25,6 +25,8 @@
#include <io/rgb_led.h> #include <io/rgb_led.h>
#include "sys/systick.h"
#define LED_SWITCHING_FREQUENCY_HZ 20000 #define LED_SWITCHING_FREQUENCY_HZ 20000
#define TIMER_PERIOD (16000000 / LED_SWITCHING_FREQUENCY_HZ) #define TIMER_PERIOD (16000000 / LED_SWITCHING_FREQUENCY_HZ)
@ -64,12 +66,16 @@ void rgb_led_init(void) {
rgb_led_set_default_pin_state(); rgb_led_set_default_pin_state();
// enable LSE clock uint32_t deadline = ticks_timeout(HSI_TIMEOUT_VALUE);
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; // enable HSI clock
RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC->CR |= RCC_CR_HSION;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // wait until the HSI is on
HAL_RCC_OscConfig(&RCC_OscInitStruct); while ((RCC->CR & RCC_CR_HSIRDY) != RCC_CR_HSIRDY) {
if (ticks_expired(deadline)) {
return;
}
}
// select LSE as LPTIM clock source // select LSE as LPTIM clock source
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};

View File

@ -26,6 +26,7 @@
#include <stm32u5xx_hal_cryp.h> #include <stm32u5xx_hal_cryp.h>
#include <sec/secure_aes.h> #include <sec/secure_aes.h>
#include <sys/systick.h>
#if NORCOW_MIN_VERSION <= 5 #if NORCOW_MIN_VERSION <= 5
#include "secure_aes_unpriv.h" #include "secure_aes_unpriv.h"
@ -221,13 +222,16 @@ secbool secure_aes_ecb_decrypt_hw(const uint8_t* input, size_t size,
} }
secbool secure_aes_init(void) { secbool secure_aes_init(void) {
RCC_OscInitTypeDef osc_init_def = {0};
osc_init_def.OscillatorType = RCC_OSCILLATORTYPE_SHSI;
osc_init_def.SHSIState = RCC_SHSI_ON;
// Enable SHSI clock // Enable SHSI clock
if (HAL_RCC_OscConfig(&osc_init_def) != HAL_OK) { __HAL_RCC_SHSI_ENABLE();
goto cleanup;
uint32_t deadline = ticks_timeout(HSI_TIMEOUT_VALUE);
// Wait till SHSI is ready
while (READ_BIT(RCC->CR, RCC_CR_SHSIRDY) == 0U) {
if (ticks_expired(deadline)) {
goto cleanup;
}
} }
// Enable SAES peripheral clock // Enable SAES peripheral clock
@ -247,12 +251,17 @@ void secure_aes_deinit(void) {
__HAL_RCC_SAES_FORCE_RESET(); __HAL_RCC_SAES_FORCE_RESET();
__HAL_RCC_SAES_RELEASE_RESET(); __HAL_RCC_SAES_RELEASE_RESET();
RCC_OscInitTypeDef osc_init_def = {0}; // Disable the Secure Internal High Speed oscillator (SHSI)
osc_init_def.OscillatorType = RCC_OSCILLATORTYPE_SHSI; __HAL_RCC_SHSI_DISABLE();
osc_init_def.SHSIState = RCC_SHSI_OFF;
// Disable SHSI clock uint32_t deadline = ticks_timeout(2);
HAL_RCC_OscConfig(&osc_init_def);
// Wait till SHSI is off
while (READ_BIT(RCC->CR, RCC_CR_SHSIRDY) != 0U) {
if (ticks_expired(deadline)) {
return;
}
}
} }
#endif // SECURE_MODE #endif // SECURE_MODE