Skip to content

Commit 19fdbb8

Browse files
committed
Initial support for STM32H5, sunny day boot
STM32H5: Tested sunny day boot - Temporarily decreased clock speed to 125MHz - Test app working - Re-mapped Nucleo board LEDs - Tested on STM32H563ZI
1 parent dc92ac3 commit 19fdbb8

18 files changed

+1250
-977
lines changed

arch.mk

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,21 @@ ifeq ($(ARCH),ARM)
164164
SPI_TARGET=stm32
165165
endif
166166

167+
ifeq ($(TARGET),stm32h5)
168+
CORTEX_M33=1
169+
CFLAGS+=-Ihal
170+
ARCH_FLASH_OFFSET=0x08000000
171+
ifeq ($(TZEN),1)
172+
WOLFBOOT_ORIGIN=0x0C000000
173+
else
174+
WOLFBOOT_ORIGIN=0x08000000
175+
endif
176+
ifneq ($(TZEN),1)
177+
LSCRIPT_IN=hal/$(TARGET)-ns.ld
178+
endif
179+
SPI_TARGET=stm32
180+
endif
181+
167182
## Cortex-M CPU
168183
ifeq ($(CORTEX_M33),1)
169184
CFLAGS+=-mcpu=cortex-m33 -DCORTEX_M33
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
ARCH?=ARM
2+
TZEN?=0
3+
TARGET?=stm32h5
4+
SIGN?=ECC256
5+
HASH?=SHA256
6+
DEBUG?=1
7+
VTOR?=1
8+
CORTEX_M0?=0
9+
CORTEX_M33?=1
10+
NO_ASM?=0
11+
NO_MPU=1
12+
EXT_FLASH?=0
13+
SPI_FLASH?=0
14+
ALLOW_DOWNGRADE?=0
15+
NVM_FLASH_WRITEONCE?=1
16+
WOLFBOOT_VERSION?=1
17+
V?=0
18+
SPMATH?=1
19+
RAM_CODE?=0
20+
DUALBANK_SWAP?=1
21+
WOLFBOOT_PARTITION_SIZE?=0x20000
22+
WOLFBOOT_SECTOR_SIZE?=0x2000
23+
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x08100000
24+
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x817F000
25+
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x81FE000
26+
FLAGS_HOME=0
27+
DISABLE_BACKUP=0

config/examples/stm32h5.config

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
ARCH?=ARM
2+
TZEN?=0
3+
TARGET?=stm32h5
4+
SIGN?=ECC256
5+
HASH?=SHA256
6+
DEBUG?=1
7+
VTOR?=1
8+
CORTEX_M0?=0
9+
CORTEX_M33?=1
10+
NO_ASM?=0
11+
NO_MPU=1
12+
EXT_FLASH?=0
13+
SPI_FLASH?=0
14+
ALLOW_DOWNGRADE?=0
15+
NVM_FLASH_WRITEONCE?=1
16+
WOLFBOOT_VERSION?=1
17+
V?=0
18+
SPMATH?=1
19+
RAM_CODE?=0
20+
DUALBANK_SWAP?=0
21+
WOLFBOOT_PARTITION_SIZE?=0x20000
22+
WOLFBOOT_SECTOR_SIZE?=0x2000
23+
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x08100000
24+
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x817F000
25+
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x81FE000
26+
FLAGS_HOME=0
27+
DISABLE_BACKUP=0

hal/stm32_tz.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
#include "hal/stm32u5.h"
3030
#endif
3131

32+
#ifdef PLATFORM_stm32h5
33+
#include "hal/stm32h5.h"
34+
#endif
35+
3236
#include "image.h"
3337
#include "hal.h"
3438
#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) && (!defined(FLAGS_HOME) || !defined(DISABLE_BACKUP))
@@ -81,15 +85,25 @@ void hal_tz_claim_nonsecure_area(uint32_t address, int len)
8185
hal_flash_wait_complete(0);
8286
hal_flash_nonsecure_lock();
8387
/* Erase claimed non-secure page, in secure mode */
88+
#ifndef PLATFORM_stm32h5
8489
reg = FLASH_CR & (~((FLASH_CR_PNB_MASK << FLASH_CR_PNB_SHIFT) | FLASH_CR_PER | FLASH_CR_BKER | FLASH_CR_PG | FLASH_CR_MER1 | FLASH_CR_MER2));
85-
FLASH_CR = reg | ((page_n << FLASH_CR_PNB_SHIFT) | FLASH_CR_PER | FLASH_CR_BKER);
90+
FLASH_CR = reg | ((page_n << FLASH_CR_PNB_SHIFT) | FLASH_CR_PER);
91+
#else
92+
reg = FLASH_CR & (~((FLASH_CR_PNB_MASK << FLASH_CR_PNB_SHIFT) | FLASH_CR_SER | FLASH_CR_BER | FLASH_CR_PG | FLASH_CR_MER));
93+
FLASH_CR = reg | ((page_n << FLASH_CR_PNB_SHIFT) | FLASH_CR_SER);
94+
#endif
95+
8696
DMB();
8797
FLASH_CR |= FLASH_CR_STRT;
8898
ISB();
8999
hal_flash_wait_complete(0);
90100
address += FLASH_PAGE_SIZE;
91101
}
102+
#ifndef PLATFORM_stm32h5
92103
FLASH_CR &= ~FLASH_CR_PER ;
104+
#else
105+
FLASH_CR &= ~FLASH_CR_SER ;
106+
#endif
93107
}
94108
#else
95109
#define claim_nonsecure_area(...) do{}while(0)

hal/stm32h5-ns.ld

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
MEMORY
2+
{
3+
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = @BOOTLOADER_PARTITION_SIZE@
4+
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 /* mapping TCM only */
5+
}
6+
7+
SECTIONS
8+
{
9+
.text :
10+
{
11+
_start_text = .;
12+
KEEP(*(.isr_vector))
13+
*(.text*)
14+
*(.rodata*)
15+
. = ALIGN(4);
16+
_end_text = .;
17+
} > FLASH
18+
19+
.edidx :
20+
{
21+
. = ALIGN(4);
22+
*(.ARM.exidx*)
23+
} > FLASH
24+
25+
_stored_data = .;
26+
.data : AT (_stored_data)
27+
{
28+
_start_data = .;
29+
KEEP(*(.data*))
30+
. = ALIGN(4);
31+
KEEP(*(.ramcode))
32+
. = ALIGN(4);
33+
_end_data = .;
34+
} > RAM
35+
36+
.bss (NOLOAD) :
37+
{
38+
_start_bss = .;
39+
__bss_start__ = .;
40+
*(.bss*)
41+
*(COMMON)
42+
. = ALIGN(4);
43+
_end_bss = .;
44+
__bss_end__ = .;
45+
_end = .;
46+
} > RAM
47+
. = ALIGN(4);
48+
}
49+
50+
END_STACK = ORIGIN(RAM) + LENGTH(RAM);

0 commit comments

Comments
 (0)