mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-22 14:28:07 +00:00
bootloader: refactor mpu settings
This commit is contained in:
parent
3055633d84
commit
5d645ef61b
@ -225,17 +225,18 @@ static void check_bootloader_version(void)
|
|||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
mpu_config_bootloader();
|
touch_init();
|
||||||
|
touch_power_on();
|
||||||
|
|
||||||
main_start:
|
mpu_config_bootloader();
|
||||||
display_clear();
|
|
||||||
|
|
||||||
#if PRODUCTION
|
#if PRODUCTION
|
||||||
check_bootloader_version();
|
check_bootloader_version();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
touch_init();
|
main_start:
|
||||||
touch_power_on();
|
|
||||||
|
display_clear();
|
||||||
|
|
||||||
// delay to detect touch
|
// delay to detect touch
|
||||||
uint32_t touched = 0;
|
uint32_t touched = 0;
|
||||||
|
@ -40,30 +40,36 @@ void mpu_config_bootloader(void)
|
|||||||
|
|
||||||
// Note: later entries overwrite previous ones
|
// Note: later entries overwrite previous ones
|
||||||
|
|
||||||
// Flash (0x08000000 - 0x081FFFFF, 2 MiB, read-write)
|
// Everything (0x00000000 - 0xFFFFFFFF, 4 GiB, read-write)
|
||||||
MPU->RBAR = FLASH_BASE | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER0;
|
MPU->RNR = MPU_REGION_NUMBER0;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_2MB | LL_MPU_REGION_PRIV_RO_URO;
|
MPU->RBAR = 0;
|
||||||
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_4GB | LL_MPU_REGION_FULL_ACCESS;
|
||||||
|
|
||||||
// Flash (0x0800C000 - 0x0800FFFF, 16 KiB, no access)
|
// Flash (0x0800C000 - 0x0800FFFF, 16 KiB, no access)
|
||||||
MPU->RBAR = FLASH_BASE | 0xC000 | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER1;
|
MPU->RNR = MPU_REGION_NUMBER1;
|
||||||
|
MPU->RBAR = FLASH_BASE + 0xC000;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_16KB | LL_MPU_REGION_NO_ACCESS;
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_16KB | LL_MPU_REGION_NO_ACCESS;
|
||||||
|
|
||||||
// Flash (0x0810C000 - 0x0810FFFF, 16 KiB, no access)
|
// Flash (0x0810C000 - 0x0810FFFF, 16 KiB, no access)
|
||||||
MPU->RBAR = FLASH_BASE | 0x10C000 | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER2;
|
MPU->RNR = MPU_REGION_NUMBER2;
|
||||||
|
MPU->RBAR = FLASH_BASE + 0x10C000;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_16KB | LL_MPU_REGION_NO_ACCESS;
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_16KB | LL_MPU_REGION_NO_ACCESS;
|
||||||
|
|
||||||
// SRAM (0x20000000 - 0x2002FFFF, 192 KiB = 256 KiB except 2/8 at end, read-write, execute never)
|
// SRAM (0x20000000 - 0x2002FFFF, 192 KiB = 256 KiB except 2/8 at end, read-write, execute never)
|
||||||
MPU->RBAR = SRAM_BASE | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER3;
|
MPU->RNR = MPU_REGION_NUMBER3;
|
||||||
|
MPU->RBAR = SRAM_BASE;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_SRAM | LL_MPU_REGION_SIZE_256KB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk | MPU_SUBREGION_DISABLE(0xC0);
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_SRAM | LL_MPU_REGION_SIZE_256KB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk | MPU_SUBREGION_DISABLE(0xC0);
|
||||||
|
|
||||||
// Peripherals (0x40000000 - 0x5FFFFFFF, read-write, execute never)
|
// Peripherals (0x40000000 - 0x5FFFFFFF, read-write, execute never)
|
||||||
// External RAM (0x60000000 - 0x7FFFFFFF, read-write, execute never)
|
// External RAM (0x60000000 - 0x7FFFFFFF, read-write, execute never)
|
||||||
MPU->RBAR = PERIPH_BASE | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER4;
|
MPU->RNR = MPU_REGION_NUMBER4;
|
||||||
|
MPU->RBAR = PERIPH_BASE;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_PERIPH | LL_MPU_REGION_SIZE_1GB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk;
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_PERIPH | LL_MPU_REGION_SIZE_1GB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk;
|
||||||
|
|
||||||
#ifdef STM32F427xx
|
#ifdef STM32F427xx
|
||||||
// CCMRAM (0x10000000 - 0x1000FFFF, read-write, execute never)
|
// CCMRAM (0x10000000 - 0x1000FFFF, read-write, execute never)
|
||||||
MPU->RBAR = CCMDATARAM_BASE | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER5;
|
MPU->RNR = MPU_REGION_NUMBER5;
|
||||||
|
MPU->RBAR = CCMDATARAM_BASE;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_SRAM | LL_MPU_REGION_SIZE_64KB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk;
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_SRAM | LL_MPU_REGION_SIZE_64KB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk;
|
||||||
#elif STM32F405xx
|
#elif STM32F405xx
|
||||||
// no CCMRAM
|
// no CCMRAM
|
||||||
@ -85,41 +91,49 @@ void mpu_config_firmware(void)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
// Boardloader (0x08000000 - 0x0800FFFF, 64 KiB, read-only, execute never)
|
// Boardloader (0x08000000 - 0x0800FFFF, 64 KiB, read-only, execute never)
|
||||||
MPU->RBAR = FLASH_BASE | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER0;
|
MPU->RBAR = FLASH_BASE | MPU_REGION_NUMBER0;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_64KB | LL_MPU_REGION_PRIV_RO_URO | MPU_RASR_XN_Msk;
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_64KB | LL_MPU_REGION_PRIV_RO_URO | MPU_RASR_XN_Msk;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Bootloader (0x08020000 - 0x0803FFFF, 64 KiB, read-only)
|
// Bootloader (0x08020000 - 0x0803FFFF, 64 KiB, read-only)
|
||||||
MPU->RBAR = FLASH_BASE | 0x20000 | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER0;
|
MPU->RNR = MPU_REGION_NUMBER0;
|
||||||
|
MPU->RBAR = FLASH_BASE + 0x20000;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_64KB | LL_MPU_REGION_PRIV_RO_URO;
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_64KB | LL_MPU_REGION_PRIV_RO_URO;
|
||||||
|
|
||||||
// Storage#1 (0x08010000 - 0x0801FFFF, 64 KiB, read-write, execute never)
|
// Storage#1 (0x08010000 - 0x0801FFFF, 64 KiB, read-write, execute never)
|
||||||
MPU->RBAR = FLASH_BASE | 0x10000 | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER1;
|
MPU->RNR = MPU_REGION_NUMBER1;
|
||||||
|
MPU->RBAR = FLASH_BASE + 0x10000;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_64KB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk;
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_64KB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk;
|
||||||
// Storage#2 (0x08110000 - 0x0811FFFF, 64 KiB, read-write, execute never)
|
// Storage#2 (0x08110000 - 0x0811FFFF, 64 KiB, read-write, execute never)
|
||||||
MPU->RBAR = FLASH_BASE | 0x110000 | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER2;
|
MPU->RNR = MPU_REGION_NUMBER2;
|
||||||
|
MPU->RBAR = FLASH_BASE + 0x110000;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_64KB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk;
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_64KB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk;
|
||||||
|
|
||||||
// Firmware (0x08040000 - 0x080FFFFF, 6 * 128 KiB = 1024 KiB except 2/8 at start = 768 KiB, read-only)
|
// Firmware (0x08040000 - 0x080FFFFF, 6 * 128 KiB = 1024 KiB except 2/8 at start = 768 KiB, read-only)
|
||||||
MPU->RBAR = FLASH_BASE | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER3;
|
MPU->RNR = MPU_REGION_NUMBER3;
|
||||||
|
MPU->RBAR = FLASH_BASE;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_1MB | LL_MPU_REGION_PRIV_RO_URO | MPU_SUBREGION_DISABLE(0x03);
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_1MB | LL_MPU_REGION_PRIV_RO_URO | MPU_SUBREGION_DISABLE(0x03);
|
||||||
|
|
||||||
// Firmware extra (0x08120000 - 0x081FFFFF, 7 * 128 KiB = 1024 KiB except 1/8 at start = 896 KiB, read-only)
|
// Firmware extra (0x08120000 - 0x081FFFFF, 7 * 128 KiB = 1024 KiB except 1/8 at start = 896 KiB, read-only)
|
||||||
MPU->RBAR = FLASH_BASE | 0x100000 | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER4;
|
MPU->RNR = MPU_REGION_NUMBER4;
|
||||||
|
MPU->RBAR = FLASH_BASE + 0x100000;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_1MB | LL_MPU_REGION_PRIV_RO_URO | MPU_SUBREGION_DISABLE(0x01);
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_FLASH | LL_MPU_REGION_SIZE_1MB | LL_MPU_REGION_PRIV_RO_URO | MPU_SUBREGION_DISABLE(0x01);
|
||||||
|
|
||||||
// SRAM (0x20000000 - 0x2002FFFF, 192 KiB = 256 KiB except 2/8 at end, read-write, execute never)
|
// SRAM (0x20000000 - 0x2002FFFF, 192 KiB = 256 KiB except 2/8 at end, read-write, execute never)
|
||||||
MPU->RBAR = SRAM_BASE | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER5;
|
MPU->RNR = MPU_REGION_NUMBER5;
|
||||||
|
MPU->RBAR = SRAM_BASE;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_SRAM | LL_MPU_REGION_SIZE_256KB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk | MPU_SUBREGION_DISABLE(0xC0);
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_SRAM | LL_MPU_REGION_SIZE_256KB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk | MPU_SUBREGION_DISABLE(0xC0);
|
||||||
|
|
||||||
// Peripherals (0x40000000 - 0x5FFFFFFF, read-write, execute never)
|
// Peripherals (0x40000000 - 0x5FFFFFFF, read-write, execute never)
|
||||||
// External RAM (0x60000000 - 0x7FFFFFFF, read-write, execute never)
|
// External RAM (0x60000000 - 0x7FFFFFFF, read-write, execute never)
|
||||||
MPU->RBAR = PERIPH_BASE | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER6;
|
MPU->RNR = MPU_REGION_NUMBER6;
|
||||||
|
MPU->RBAR = PERIPH_BASE;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_PERIPH | LL_MPU_REGION_SIZE_1GB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk;
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_PERIPH | LL_MPU_REGION_SIZE_1GB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk;
|
||||||
|
|
||||||
#ifdef STM32F427xx
|
#ifdef STM32F427xx
|
||||||
// CCMRAM (0x10000000 - 0x1000FFFF, read-write, execute never)
|
// CCMRAM (0x10000000 - 0x1000FFFF, read-write, execute never)
|
||||||
MPU->RBAR = CCMDATARAM_BASE | MPU_RBAR_VALID_Msk | MPU_REGION_NUMBER7;
|
MPU->RNR = MPU_REGION_NUMBER7;
|
||||||
|
MPU->RBAR = CCMDATARAM_BASE;
|
||||||
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_SRAM | LL_MPU_REGION_SIZE_64KB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk;
|
MPU->RASR = MPU_RASR_ENABLE_Msk | MPU_RASR_ATTR_SRAM | LL_MPU_REGION_SIZE_64KB | LL_MPU_REGION_FULL_ACCESS | MPU_RASR_XN_Msk;
|
||||||
#elif STM32F405xx
|
#elif STM32F405xx
|
||||||
// no CCMRAM
|
// no CCMRAM
|
||||||
|
Loading…
Reference in New Issue
Block a user