diff --git a/core/embed/rtl/inc/rtl/sizedefs.h b/core/embed/rtl/inc/rtl/sizedefs.h index c5af7e67da..ca29479bfc 100644 --- a/core/embed/rtl/inc/rtl/sizedefs.h +++ b/core/embed/rtl/inc/rtl/sizedefs.h @@ -33,6 +33,7 @@ #define SIZE_320K (320 * 1024) #define SIZE_768K (768 * 1024) #define SIZE_2496K (2496 * 1024) +#define SIZE_3008K (3008 * 1024) #define SIZE_3712K ((4096 - 384) * 1024) #define SIZE_3776K ((4096 - 320) * 1024) #define SIZE_3904K ((4096 - 192) * 1024) diff --git a/core/embed/sys/linker/inc/sys/linker_utils.h b/core/embed/sys/linker/inc/sys/linker_utils.h index 7286584b5d..14b667e66a 100644 --- a/core/embed/sys/linker/inc/sys/linker_utils.h +++ b/core/embed/sys/linker/inc/sys/linker_utils.h @@ -20,6 +20,9 @@ #pragma once +#include +#include + // symbols defined in the linker script extern uint8_t _stack_section_start; extern uint8_t _stack_section_end; @@ -46,17 +49,47 @@ typedef struct { memregion_block_t block[MEMREGION_MAX_BLOCKS]; } memregion_t; -#define MEMREGION_ALL_ACCESSIBLE_RAM \ - ({ \ - extern uint8_t _accessible_ram_0_start; \ - extern uint8_t _accessible_ram_0_end; \ - extern uint8_t _accessible_ram_1_start; \ - extern uint8_t _accessible_ram_1_end; \ - (memregion_t){.block = { \ - {&_accessible_ram_0_start, &_accessible_ram_0_end}, \ - {&_accessible_ram_1_start, &_accessible_ram_1_end}, \ - }}; \ +#define MEMBLOCK(start, size) \ + { (void*)(start), (void*)((uint8_t*)(start) + (size)) } + + +#if defined(STM32F4) +#define MEMREGION_ALL_ACCESSIBLE_RAM \ + ({ \ + (memregion_t){ \ + .block = \ + { \ + MEMBLOCK(CCMDATARAM_BASE, SIZE_64K), \ + MEMBLOCK(SRAM_BASE, SIZE_192K), \ + }, \ + }; \ }) +#elif defined(STM32U585xx) +#define MEMREGION_ALL_ACCESSIBLE_RAM \ + ({ \ + (memregion_t){ \ + .block = \ + { \ + MEMBLOCK(SRAM1_BASE, SIZE_3008K), \ + MEMBLOCK(SRAM4_BASE, SIZE_16K), \ + }, \ + }; \ + }) +#elif defined(STM32U5G9xx) +#define MEMREGION_ALL_ACCESSIBLE_RAM \ + ({ \ + (memregion_t){ \ + .block = \ + { \ + MEMBLOCK(SRAM1_BASE, SIZE_768K), \ + MEMBLOCK(SRAM4_BASE, SIZE_16K), \ + }, \ + }; \ + }) +#else +#error "Unknown STM32 family" +#endif + // Adds a new address range to the memory region. // diff --git a/core/embed/sys/linker/stm32f4/boardloader.ld b/core/embed/sys/linker/stm32f4/boardloader.ld index 776a18fdd1..83a7eee802 100644 --- a/core/embed/sys/linker/stm32f4/boardloader.ld +++ b/core/embed/sys/linker/stm32f4/boardloader.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32f4/memory.ld"; - ENTRY(reset_handler) MEMORY { @@ -25,11 +23,6 @@ _confidential_section_loadaddr = 0; _confidential_section_start = 0; _confidential_section_end = 0; -_accessible_ram_0_start = MCU_CCMRAM; -_accessible_ram_0_end = MCU_CCMRAM + MCU_CCMRAM_SIZE; -_accessible_ram_1_start = MCU_SRAM; -_accessible_ram_1_end = MCU_SRAM + MCU_SRAM_SIZE; - _bootargs_ram_start = BOOTARGS_START; _bootargs_ram_end = BOOTARGS_START + BOOTARGS_SIZE; diff --git a/core/embed/sys/linker/stm32f4/bootloader.ld b/core/embed/sys/linker/stm32f4/bootloader.ld index a207b32d68..10a4d37009 100644 --- a/core/embed/sys/linker/stm32f4/bootloader.ld +++ b/core/embed/sys/linker/stm32f4/bootloader.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32f4/memory.ld"; - ENTRY(reset_handler) MEMORY { @@ -25,11 +23,6 @@ _confidential_section_loadaddr = 0; _confidential_section_start = 0; _confidential_section_end = 0; -_accessible_ram_0_start = MCU_CCMRAM; -_accessible_ram_0_end = MCU_CCMRAM + MCU_CCMRAM_SIZE; -_accessible_ram_1_start = MCU_SRAM; -_accessible_ram_1_end = MCU_SRAM + MCU_SRAM_SIZE; - _bootargs_ram_start = BOOTARGS_START; _bootargs_ram_end = BOOTARGS_START + BOOTARGS_SIZE; diff --git a/core/embed/sys/linker/stm32f4/firmware.ld b/core/embed/sys/linker/stm32f4/firmware.ld index ae00b64757..0cfa4db9bf 100644 --- a/core/embed/sys/linker/stm32f4/firmware.ld +++ b/core/embed/sys/linker/stm32f4/firmware.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32f4/memory.ld"; - ENTRY(reset_handler) MEMORY { diff --git a/core/embed/sys/linker/stm32f4/kernel.ld b/core/embed/sys/linker/stm32f4/kernel.ld index 8ce21d3a7d..730fa4e50c 100644 --- a/core/embed/sys/linker/stm32f4/kernel.ld +++ b/core/embed/sys/linker/stm32f4/kernel.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32f4/memory.ld"; - ENTRY(reset_handler) MEMORY { @@ -25,11 +23,6 @@ _confidential_section_loadaddr = 0; _confidential_section_start = 0; _confidential_section_end = 0; -_accessible_ram_0_start = MCU_CCMRAM; -_accessible_ram_0_end = MCU_CCMRAM + MCU_CCMRAM_SIZE; -_accessible_ram_1_start = MCU_SRAM; -_accessible_ram_1_end = MCU_SRAM + MCU_SRAM_SIZE; - _bootargs_ram_start = BOOTARGS_START; _bootargs_ram_end = BOOTARGS_START + BOOTARGS_SIZE; diff --git a/core/embed/sys/linker/stm32f4/memory.ld b/core/embed/sys/linker/stm32f4/memory.ld deleted file mode 100644 index edb57837b6..0000000000 --- a/core/embed/sys/linker/stm32f4/memory.ld +++ /dev/null @@ -1,6 +0,0 @@ - MCU_FLASH_ORIGIN = 0x08000000; - MCU_FLASH_SIZE = 2M; - MCU_CCMRAM = 0x10000000; - MCU_CCMRAM_SIZE = 64K; - MCU_SRAM = 0x20000000; - MCU_SRAM_SIZE = 192K; diff --git a/core/embed/sys/linker/stm32f4/prodtest.ld b/core/embed/sys/linker/stm32f4/prodtest.ld index 9ab16107c6..20f58539c9 100644 --- a/core/embed/sys/linker/stm32f4/prodtest.ld +++ b/core/embed/sys/linker/stm32f4/prodtest.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32f4/memory.ld"; - ENTRY(reset_handler) MEMORY { @@ -25,11 +23,6 @@ _confidential_section_loadaddr = 0; _confidential_section_start = 0; _confidential_section_end = 0; -_accessible_ram_0_start = MCU_CCMRAM; -_accessible_ram_0_end = MCU_CCMRAM + MCU_CCMRAM_SIZE; -_accessible_ram_1_start = MCU_SRAM; -_accessible_ram_1_end = MCU_SRAM + MCU_SRAM_SIZE; - _bootargs_ram_start = BOOTARGS_START; _bootargs_ram_end = BOOTARGS_START + BOOTARGS_SIZE; diff --git a/core/embed/sys/linker/stm32u58/boardloader.ld b/core/embed/sys/linker/stm32u58/boardloader.ld index d900b1399c..6589e87555 100644 --- a/core/embed/sys/linker/stm32u58/boardloader.ld +++ b/core/embed/sys/linker/stm32u58/boardloader.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32u58/memory.ld"; - ENTRY(reset_handler) MEMORY { @@ -28,11 +26,6 @@ _confidential_section_loadaddr = LOADADDR(.confidential); _confidential_section_start = ADDR(.confidential); _confidential_section_end = ADDR(.confidential) + SIZEOF(.confidential); -_accessible_ram_0_start = MCU_SRAM1; -_accessible_ram_0_end = MCU_SRAM3 + MCU_SRAM3_SIZE; -_accessible_ram_1_start = MCU_SRAM4; -_accessible_ram_1_end = MCU_SRAM4 + MCU_SRAM4_SIZE; - _bootargs_ram_start = BOOTARGS_START; _bootargs_ram_end = BOOTARGS_START + BOOTARGS_SIZE; diff --git a/core/embed/sys/linker/stm32u58/bootloader.ld b/core/embed/sys/linker/stm32u58/bootloader.ld index 692c19a394..c3707d44eb 100644 --- a/core/embed/sys/linker/stm32u58/bootloader.ld +++ b/core/embed/sys/linker/stm32u58/bootloader.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32u58/memory.ld"; - ENTRY(reset_handler) MEMORY { @@ -27,11 +25,6 @@ _confidential_section_loadaddr = LOADADDR(.confidential); _confidential_section_start = ADDR(.confidential); _confidential_section_end = ADDR(.confidential) + SIZEOF(.confidential); -_accessible_ram_0_start = MCU_SRAM1; -_accessible_ram_0_end = MCU_SRAM3 + MCU_SRAM3_SIZE; -_accessible_ram_1_start = MCU_SRAM4; -_accessible_ram_1_end = MCU_SRAM4 + MCU_SRAM4_SIZE; - _bootargs_ram_start = BOOTARGS_START; _bootargs_ram_end = BOOTARGS_START + BOOTARGS_SIZE; diff --git a/core/embed/sys/linker/stm32u58/firmware.ld b/core/embed/sys/linker/stm32u58/firmware.ld index 6f6223fc2b..7d79a24236 100644 --- a/core/embed/sys/linker/stm32u58/firmware.ld +++ b/core/embed/sys/linker/stm32u58/firmware.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32u58/memory.ld"; - ENTRY(reset_handler) MEMORY { diff --git a/core/embed/sys/linker/stm32u58/kernel.ld b/core/embed/sys/linker/stm32u58/kernel.ld index 21213c2408..608e49c9ed 100644 --- a/core/embed/sys/linker/stm32u58/kernel.ld +++ b/core/embed/sys/linker/stm32u58/kernel.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32u58/memory.ld"; - ENTRY(reset_handler) MEMORY { @@ -30,11 +28,6 @@ _confidential_section_loadaddr = LOADADDR(.confidential); _confidential_section_start = ADDR(.confidential); _confidential_section_end = ADDR(.confidential) + SIZEOF(.confidential); -_accessible_ram_0_start = MCU_SRAM1; -_accessible_ram_0_end = MCU_SRAM3 + MCU_SRAM3_SIZE; -_accessible_ram_1_start = MCU_SRAM4; -_accessible_ram_1_end = MCU_SRAM4 + MCU_SRAM4_SIZE; - _bootargs_ram_start = BOOTARGS_START; _bootargs_ram_end = BOOTARGS_START + BOOTARGS_SIZE; diff --git a/core/embed/sys/linker/stm32u58/memory.ld b/core/embed/sys/linker/stm32u58/memory.ld deleted file mode 100644 index 1eb785b524..0000000000 --- a/core/embed/sys/linker/stm32u58/memory.ld +++ /dev/null @@ -1,14 +0,0 @@ - - -MCU_FLASH_S_ORIGIN = 0x0C000000; -MCU_FLASH_ORIGIN = 0x08000000; -MCU_FLASH_SIZE = 2M; - -MCU_SRAM1 = 0x30000000; -MCU_SRAM1_SIZE = 192K; -MCU_SRAM2 = 0x30030000; -MCU_SRAM2_SIZE = 64K; -MCU_SRAM3 = 0x30040000; -MCU_SRAM3_SIZE = 512K; -MCU_SRAM4 = 0x38000000; -MCU_SRAM4_SIZE = 16K; diff --git a/core/embed/sys/linker/stm32u58/prodtest.ld b/core/embed/sys/linker/stm32u58/prodtest.ld index 9757958bf8..3ee8cf93f6 100644 --- a/core/embed/sys/linker/stm32u58/prodtest.ld +++ b/core/embed/sys/linker/stm32u58/prodtest.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32u58/memory.ld"; - ENTRY(reset_handler) MEMORY { @@ -27,11 +25,6 @@ _confidential_section_loadaddr = LOADADDR(.confidential); _confidential_section_start = ADDR(.confidential); _confidential_section_end = ADDR(.confidential) + SIZEOF(.confidential); -_accessible_ram_0_start = MCU_SRAM1; -_accessible_ram_0_end = MCU_SRAM3 + MCU_SRAM3_SIZE; -_accessible_ram_1_start = MCU_SRAM4; -_accessible_ram_1_end = MCU_SRAM4 + MCU_SRAM4_SIZE; - _bootargs_ram_start = BOOTARGS_START; _bootargs_ram_end = BOOTARGS_START + BOOTARGS_SIZE; diff --git a/core/embed/sys/linker/stm32u5g/boardloader.ld b/core/embed/sys/linker/stm32u5g/boardloader.ld index f32f17c0a7..8eb50a0580 100644 --- a/core/embed/sys/linker/stm32u5g/boardloader.ld +++ b/core/embed/sys/linker/stm32u5g/boardloader.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32u5g/memory.ld"; - ENTRY(reset_handler) MEMORY { @@ -27,11 +25,6 @@ _confidential_section_loadaddr = LOADADDR(.confidential); _confidential_section_start = ADDR(.confidential); _confidential_section_end = ADDR(.confidential) + SIZEOF(.confidential); -_accessible_ram_0_start = MCU_SRAM1; -_accessible_ram_0_end = MCU_SRAM6 + MCU_SRAM6_SIZE; -_accessible_ram_1_start = MCU_SRAM4; -_accessible_ram_1_end = MCU_SRAM4 + MCU_SRAM4_SIZE; - _bootargs_ram_start = BOOTARGS_START; _bootargs_ram_end = BOOTARGS_START + BOOTARGS_SIZE; diff --git a/core/embed/sys/linker/stm32u5g/bootloader.ld b/core/embed/sys/linker/stm32u5g/bootloader.ld index b7c75e16c4..1e694d6d42 100644 --- a/core/embed/sys/linker/stm32u5g/bootloader.ld +++ b/core/embed/sys/linker/stm32u5g/bootloader.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32u5g/memory.ld"; - ENTRY(reset_handler) MEMORY { @@ -26,11 +24,6 @@ _confidential_section_loadaddr = LOADADDR(.confidential); _confidential_section_start = ADDR(.confidential); _confidential_section_end = ADDR(.confidential) + SIZEOF(.confidential); -_accessible_ram_0_start = MCU_SRAM1; -_accessible_ram_0_end = MCU_SRAM6 + MCU_SRAM6_SIZE; -_accessible_ram_1_start = MCU_SRAM4; -_accessible_ram_1_end = MCU_SRAM4 + MCU_SRAM4_SIZE; - _bootargs_ram_start = BOOTARGS_START; _bootargs_ram_end = BOOTARGS_START + BOOTARGS_SIZE; diff --git a/core/embed/sys/linker/stm32u5g/firmware.ld b/core/embed/sys/linker/stm32u5g/firmware.ld index 6588b9efe5..df1b503e35 100644 --- a/core/embed/sys/linker/stm32u5g/firmware.ld +++ b/core/embed/sys/linker/stm32u5g/firmware.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32u5g/memory.ld"; - ENTRY(reset_handler) MEMORY { diff --git a/core/embed/sys/linker/stm32u5g/kernel.ld b/core/embed/sys/linker/stm32u5g/kernel.ld index 97c5538043..31c79030cd 100644 --- a/core/embed/sys/linker/stm32u5g/kernel.ld +++ b/core/embed/sys/linker/stm32u5g/kernel.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32u5g/memory.ld"; - ENTRY(reset_handler) MEMORY { @@ -25,11 +23,6 @@ _confidential_section_loadaddr = LOADADDR(.confidential); _confidential_section_start = ADDR(.confidential); _confidential_section_end = ADDR(.confidential) + SIZEOF(.confidential); -_accessible_ram_0_start = MCU_SRAM1; -_accessible_ram_0_end = MCU_SRAM6 + MCU_SRAM6_SIZE; -_accessible_ram_1_start = MCU_SRAM4; -_accessible_ram_1_end = MCU_SRAM4 + MCU_SRAM4_SIZE; - _bootargs_ram_start = BOOTARGS_START; _bootargs_ram_end = BOOTARGS_START + BOOTARGS_SIZE; diff --git a/core/embed/sys/linker/stm32u5g/memory.ld b/core/embed/sys/linker/stm32u5g/memory.ld deleted file mode 100644 index ab00700baf..0000000000 --- a/core/embed/sys/linker/stm32u5g/memory.ld +++ /dev/null @@ -1,18 +0,0 @@ - - -MCU_FLASH_S_ORIGIN = 0x0C000000; -MCU_FLASH_ORIGIN = 0x08000000; -MCU_FLASH_SIZE = 4M; - -MCU_SRAM1 = 0x30000000; -MCU_SRAM1_SIZE = 768K; -MCU_SRAM2 = 0x300C0000; -MCU_SRAM2_SIZE = 64K; -MCU_SRAM3 = 0x300D0000; -MCU_SRAM3_SIZE = 832K; -MCU_SRAM4 = 0x38000000; -MCU_SRAM4_SIZE = 16K; -MCU_SRAM5 = 0x301A0000; -MCU_SRAM5_SIZE = 832K; -MCU_SRAM6 = 0x30270000; -MCU_SRAM6_SIZE = 512K ; diff --git a/core/embed/sys/linker/stm32u5g/prodtest.ld b/core/embed/sys/linker/stm32u5g/prodtest.ld index 643fda7a99..aa7f377733 100644 --- a/core/embed/sys/linker/stm32u5g/prodtest.ld +++ b/core/embed/sys/linker/stm32u5g/prodtest.ld @@ -1,5 +1,3 @@ -INCLUDE "./embed/sys/linker/stm32u5g/memory.ld"; - ENTRY(reset_handler) MEMORY { @@ -26,11 +24,6 @@ _confidential_section_loadaddr = LOADADDR(.confidential); _confidential_section_start = ADDR(.confidential); _confidential_section_end = ADDR(.confidential) + SIZEOF(.confidential); -_accessible_ram_0_start = MCU_SRAM1; -_accessible_ram_0_end = MCU_SRAM6 + MCU_SRAM6_SIZE; -_accessible_ram_1_start = MCU_SRAM4; -_accessible_ram_1_end = MCU_SRAM4 + MCU_SRAM4_SIZE; - _bootargs_ram_start = BOOTARGS_START; _bootargs_ram_end = BOOTARGS_START + BOOTARGS_SIZE;