Skip to content

Commit 2916a8d

Browse files
committed
Added Vorago VA416x0 wolfBoot support
1 parent a559b75 commit 2916a8d

File tree

21 files changed

+1666
-25
lines changed

21 files changed

+1666
-25
lines changed

.github/workflows/test-configs.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,12 @@ jobs:
463463

464464
# TODO: ti-tms570lc435.config requires CCS_ROOT
465465

466+
vorago_va416x0_test:
467+
uses: ./.github/workflows/test-build.yml
468+
with:
469+
arch: arm
470+
config-file: ./config/examples/vorago_va416x0.config
471+
466472
x86_64_efi_test:
467473
uses: ./.github/workflows/test-build.yml
468474
with:

arch.mk

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,26 @@ ifeq ($(ARCH),ARM)
266266
CFLAGS+=-DWOLFBOOT_USE_STDLIBC
267267
endif
268268

269+
ifeq ($(TARGET),va416x0)
270+
CFLAGS+=-I$(WOLFBOOT_ROOT)/include/vorago/ \
271+
-I$(VORAGO_SDK_DIR)/common/drivers/hdr/ \
272+
-I$(VORAGO_SDK_DIR)/common/mcu/hdr/ \
273+
-I$(VORAGO_SDK_DIR)/common/utils/hdr/
274+
SDK_OBJS=$(VORAGO_SDK_DIR)/common/drivers/src/va416xx_hal.o \
275+
$(VORAGO_SDK_DIR)/common/drivers/src/va416xx_hal_spi.o \
276+
$(VORAGO_SDK_DIR)/common/drivers/src/va416xx_hal_clkgen.o \
277+
$(VORAGO_SDK_DIR)/common/drivers/src/va416xx_hal_ioconfig.o \
278+
$(VORAGO_SDK_DIR)/common/drivers/src/va416xx_hal_irqrouter.o \
279+
$(VORAGO_SDK_DIR)/common/drivers/src/va416xx_hal_uart.o \
280+
$(VORAGO_SDK_DIR)/common/drivers/src/va416xx_hal_timer.o \
281+
$(VORAGO_SDK_DIR)/common/mcu/src/system_va416xx.o
282+
ifeq ($(USE_HAL_SPI_FRAM),1)
283+
SDK_OBJS+=$(VORAGO_SDK_DIR)/common/utils/src/spi_fram.o
284+
CFLAGS+=-DUSE_HAL_SPI_FRAM
285+
endif
286+
OBJS+=$(SDK_OBJS)
287+
endif
288+
269289
## Cortex CPU
270290

271291
ifeq ($(CORTEX_A5),1)
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
ARCH?=ARM
2+
CORTEX_M4?=1
3+
TARGET?=va416x0
4+
SIGN?=ECC384
5+
HASH?=SHA384
6+
IMAGE_HEADER_SIZE=512
7+
WOLFBOOT_VERSION?=1
8+
ARMORED?=1
9+
DEBUG?=0
10+
DEBUG_SYMBOLS?=1
11+
DEBUG_UART?=1
12+
VTOR?=1
13+
EXT_FLASH?=1
14+
SPI_FLASH?=0
15+
NO_XIP?=1
16+
NVM_FLASH_WRITEONCE?=0
17+
UART_FLASH?=0
18+
V?=0
19+
NO_MPU?=1
20+
RAM_CODE?=0
21+
SPMATH?=1
22+
DUALBANK_SWAP?=0
23+
PKA?=0
24+
ENCRYPT=0
25+
WOLFTPM?=0
26+
27+
# Optionally allow downgrade to older valid version in update partition
28+
ALLOW_DOWNGRADE?=0
29+
30+
# Use assembly version of ECDSA and SHA
31+
NO_ASM?=0
32+
NO_ARM_ASM?=0
33+
34+
# Optional: Use smaller SHA512
35+
#CFLAGS_EXTRA+=-DUSE_SLOW_SHA512
36+
37+
# 1KB sector
38+
WOLFBOOT_SECTOR_SIZE?=0x400
39+
40+
# 32KB boot, 112KB partitions, 1KB swap
41+
WOLFBOOT_PARTITION_SIZE?=0x1C000
42+
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x8000
43+
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x24000
44+
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x3FC00
45+
46+
# Alternate layout for DEBUG=1 wolfBoot
47+
# 63KB boot, 96KB partitions, 1KB swap
48+
#WOLFBOOT_PARTITION_SIZE?=0x18000
49+
#WOLFBOOT_PARTITION_BOOT_ADDRESS?=0xFC00
50+
#WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x27C00
51+
#WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x3FC00
52+
53+
# Vorago SDK common drivers directory
54+
VORAGO_SDK_DIR?=$(PWD)/../VA416xx_SDK/
55+
56+
# Use Verago FRAM driver
57+
USE_HAL_SPI_FRAM=1
58+
59+
#CFLAGS_EXTRA+=-DDEBUG_EXT_FLASH

docs/Targets.md

Lines changed: 284 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ This README describes configuration of supported targets.
4545
* [STM32U5](#stm32u5)
4646
* [STM32WB55](#stm32wb55)
4747
* [TI Hercules TMS570LC435](#ti-hercules-tms570lc435)
48+
* [Vorago VA416x0](#vorago-va416x0)
4849
* [Xilinx Zynq UltraScale](#xilinx-zynq-ultrascale)
4950

5051
## STM32F4
@@ -3575,3 +3576,286 @@ Currently, wolfBoot for TC3xx is distributed as part of the wolfHSM TC3xx platfo
35753576

35763577
For access to the TC3xx platform release or for more information on using wolfBoot and wolfHSM on AURIX devices, contact [[email protected]](mailto:[email protected]).
35773578

3579+
3580+
## Vorago VA416x0
3581+
3582+
Tested on VA41620 and VA41630 MCU's.
3583+
3584+
MCU: Cortex-M4 with Triple-Mode Redundancy (TMR) RAD hardening at up to 100MHz.
3585+
FLASH: The VA41630 has 256KB of internal SPI FRAM (for the VA41620 its external). FRAM is Infineon FM25V20A.
3586+
SRAM: 64KB on-chip SRAM and 256KB on-chip program memory
3587+
3588+
Boot ROM loads at 20MHz from SPI bus to internal data SRAM
3589+
3590+
### Building Vorago VA416x0
3591+
3592+
All build settings come from .config file. For this platform use `TARGET=va416x0`.
3593+
See example configuration at `config/examples/vorago_va416x0.config`.
3594+
3595+
```sh
3596+
cp config/examples/vorago_va416x0.config .config
3597+
make VORAGO_SDK_DIR=$PWD../VA416xx_SDK/
3598+
[CC ARM] src/string.o
3599+
[CC ARM] src/image.o
3600+
[CC ARM] src/libwolfboot.o
3601+
[CC ARM] hal/hal.o
3602+
[CC ARM] hal/va416x0.o
3603+
[CC ARM] src/keystore.o
3604+
[CC ARM] src/loader.o
3605+
[CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal.o
3606+
[CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal_spi.o
3607+
[CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal_clkgen.o
3608+
[CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal_ioconfig.o
3609+
[CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal_irqrouter.o
3610+
[CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal_uart.o
3611+
[CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/drivers/src/va416xx_hal_timer.o
3612+
[CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/mcu/src/system_va416xx.o
3613+
[CC ARM] /home/davidgarske/GitHub/wolfboot/../VA416xx_SDK//common/utils/src/spi_fram.o
3614+
[CC ARM] src/boot_arm.o
3615+
[AS ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-aes-asm.o
3616+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-aes-asm_c.o
3617+
[AS ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha256-asm.o
3618+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha256-asm_c.o
3619+
[AS ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha512-asm.o
3620+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha512-asm_c.o
3621+
[AS ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha3-asm.o
3622+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-sha3-asm_c.o
3623+
[AS ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-chacha-asm.o
3624+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/port/arm/thumb2-chacha-asm_c.o
3625+
[CC ARM] src/update_flash.o
3626+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/sha256.o
3627+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/hash.o
3628+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/memory.o
3629+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/wc_port.o
3630+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/wolfmath.o
3631+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/logging.o
3632+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/asn.o
3633+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/ecc.o
3634+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/sp_int.o
3635+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/sp_cortexm.o
3636+
[CC ARM] /home/davidgarske/GitHub/wolfboot/lib/wolfssl/wolfcrypt/src/sha512.o
3637+
[LD] wolfboot.elf
3638+
[BIN] wolfboot.bin
3639+
[SIZE]
3640+
text data bss dec hex filename
3641+
33900 4 26976 60880 edd0 wolfboot.elf
3642+
```
3643+
3644+
### Flashing Vorago VA416x0
3645+
3646+
Flash using Segger JLink: `JLinkExe -CommanderScript tools/scripts/flash_va416xx.jlink`
3647+
3648+
Example JLink flash script `tools/scripts/flash_va416xx.jlink`:
3649+
3650+
```
3651+
device VA416XX
3652+
si 1
3653+
speed 2000
3654+
r
3655+
h
3656+
write4 0x40010010 0x1
3657+
loadbin factory.bin 0x0
3658+
write4 0x40010010 0x0
3659+
loadfile ../VA416xx_SDK/loader.elf
3660+
exit
3661+
```
3662+
3663+
The `loader.elf` programs the external SPI FRAM with the IRAM image. It is created with `make loader` from the SDK.
3664+
3665+
Example boot ouput on UART 0 (MCU TX):
3666+
3667+
```
3668+
wolfBoot HAL Init
3669+
Boot partition: 0xFC00 (sz 5144, ver 0x1, type 0x601)
3670+
Partition 1 header magic 0x00000000 invalid at 0x27C00
3671+
Boot partition: 0xFC00 (sz 5144, ver 0x1, type 0x601)
3672+
Booting version: 0x1
3673+
========================
3674+
VA416x0 wolfBoot demo Application
3675+
Copyright 2025 wolfSSL Inc
3676+
GPL v3
3677+
Version : 0x1
3678+
========================
3679+
3680+
System information
3681+
====================================
3682+
Firmware version : 0x1
3683+
Current firmware state: NEW
3684+
No image in update partition.
3685+
3686+
Bootloader OTP keystore information
3687+
====================================
3688+
Number of public keys: 1
3689+
3690+
Public Key #0: size 96, type 6, mask FFFFFFFF
3691+
====================================
3692+
08 A3 83 69 90 76 12 24 4E 86 17 0B 44 63 FF E7
3693+
4C 81 AD DD 15 8A 08 B7 EC 1C D2 F3 13 51 97 E1
3694+
C0 5A 7E BF D2 95 7D EC 49 FC EF 26 90 AD CC 9D
3695+
AD 4C 31 3A ED 18 6E 17 57 97 7F F5 3A 79 AA 6B
3696+
8A 0B 16 90 C5 6C 2A CF BE EE 59 99 B2 C7 B6 44
3697+
BA 3E 1A C3 92 48 1B 5C D2 AF B4 0A 83 2F 74 37
3698+
```
3699+
3700+
### Debugging Vorago VA416x0
3701+
3702+
Start the GDB server: `JLinkGDBServer -device VA416XX -if SWD -speed 2000 -port 3333`
3703+
3704+
Run: `arm-none-eabi-gdb`. This will source the `.gdbinit` to load symbols for `wolfboot.elf` and `test-app/image.elf`. It will also attempt to connect to the GDB server on default port 3333.
3705+
3706+
### Testing updates on VA416x0
3707+
3708+
Note: This test was run with DEBUG=1 and DEBUG_UART=1 to generate logging on the UART.
3709+
3710+
See `tools/scripts/vorago/build_test_update.sh`:
3711+
3712+
```sh
3713+
# Sign a new test app with version 2
3714+
IMAGE_HEADER_SIZE=512 ./tools/keytools/sign --ecc384 --sha384 test-app/image.bin wolfboot_signing_private_key.der 2
3715+
3716+
# Create a bin footer with wolfBoot trailer "BOOT" and "p" (ASCII for 0x70 == IMG_STATE_UPDATING)
3717+
echo -n "pBOOT" > trigger_magic.bin
3718+
3719+
# Assembly new factory update.bin
3720+
./tools/bin-assemble/bin-assemble \
3721+
update.bin \
3722+
0x0 wolfboot.bin \
3723+
0xFC00 test-app/image_v1_signed.bin \
3724+
0x27C00 test-app/image_v2_signed.bin \
3725+
0x3FBFB trigger_magic.bin
3726+
3727+
# Use JLink to load
3728+
device VA416XX
3729+
si 1
3730+
speed 2000
3731+
r
3732+
h
3733+
write4 0x40010010 0x1
3734+
loadbin update.bin 0x0
3735+
write4 0x40010010 0x0
3736+
loadfile ../VA416xx_SDK/loader.elf
3737+
exit
3738+
```
3739+
3740+
Example update output:
3741+
3742+
```
3743+
wolfBoot HAL Init
3744+
Boot partition: 0xFC00 (sz 8976, ver 0x1, type 0x601)
3745+
Update partition: 0x27C00 (sz 8976, ver 0x2, type 0x601)
3746+
Starting Update (fallback allowed 0)
3747+
Update partition: 0x27C00 (sz 8976, ver 0x2, type 0x601)
3748+
Boot partition: 0xFC00 (sz 8976, ver 0x1, type 0x601)
3749+
verify integrity: img 0x1FFFE844, part 1
3750+
verify authenticity: img 0x1FFFE844, part 1
3751+
Versions: Current 0x1, Update 0x2
3752+
Copy sector 0 (part 1->2)
3753+
Copy sector 0 (part 0->1)
3754+
Copy sector 0 (part 2->0)
3755+
Boot partition: 0xFC00 (sz 8976, ver 0x2, type 0x601)
3756+
Update partition: 0x27C00 (sz 8976, ver 0x1, type 0x601)
3757+
Copy sector 1 (part 1->2)
3758+
Copy sector 1 (part 0->1)
3759+
Copy sector 1 (part 2->0)
3760+
Copy sector 2 (part 1->2)
3761+
Copy sector 2 (part 0->1)
3762+
Copy sector 2 (part 2->0)
3763+
Copy sector 3 (part 1->2)
3764+
Copy sector 3 (part 0->1)
3765+
Copy sector 3 (part 2->0)
3766+
Copy sector 4 (part 1->2)
3767+
Copy sector 4 (part 0->1)
3768+
Copy sector 4 (part 2->0)
3769+
Copy sector 5 (part 1->2)
3770+
Copy sector 5 (part 0->1)
3771+
Copy sector 5 (part 2->0)
3772+
Copy sector 6 (part 1->2)
3773+
Copy sector 6 (part 0->1)
3774+
Copy sector 6 (part 2->0)
3775+
Copy sector 7 (part 1->2)
3776+
Copy sector 7 (part 0->1)
3777+
Copy sector 7 (part 2->0)
3778+
Copy sector 8 (part 1->2)
3779+
Copy sector 8 (part 0->1)
3780+
Copy sector 8 (part 2->0)
3781+
Copy sector 9 (part 1->2)
3782+
Copy sector 9 (part 0->1)
3783+
Copy sector 9 (part 2->0)
3784+
Erasing remainder of partition (85 sectors)...
3785+
Boot partition: 0xFC00 (sz 8976, ver 0x2, type 0x601)
3786+
Update partition: 0x27C00 (sz 8976, ver 0x1, type 0x601)
3787+
Copy sector 94 (part 0->2)
3788+
Copied boot sector to swap
3789+
Boot partition: 0xFC00 (sz 8976, ver 0x2, type 0x601)
3790+
Booting version: 0x1
3791+
verify integrity: img 0x1FFFE904, part 0
3792+
verify authenticity: img 0x1FFFE904, part 0
3793+
========================
3794+
VA416x0 wolfBoot demo Application
3795+
Copyright 2025 wolfSSL Inc
3796+
GPL v3
3797+
Version : 0x2
3798+
========================
3799+
3800+
System information
3801+
====================================
3802+
Firmware version : 0x2
3803+
Current firmware state: TESTING
3804+
Backup firmware version : 0x1
3805+
Update state: NEW
3806+
Update image older than current.
3807+
3808+
Bootloader OTP keystore information
3809+
====================================
3810+
Number of public keys: 1
3811+
3812+
Public Key #0: size 96, type 6, mask FFFFFFFF
3813+
====================================
3814+
08 A3 83 69 90 76 12 24 4E 86 17 0B 44 63 FF E7
3815+
4C 81 AD DD 15 8A 08 B7 EC 1C D2 F3 13 51 97 E1
3816+
C0 5A 7E BF D2 95 7D EC 49 FC EF 26 90 AD CC 9D
3817+
AD 4C 31 3A ED 18 6E 17 57 97 7F F5 3A 79 AA 6B
3818+
8A 0B 16 90 C5 6C 2A CF BE EE 59 99 B2 C7 B6 44
3819+
BA 3E 1A C3 92 48 1B 5C D2 AF B4 0A 83 2F 74 37
3820+
3821+
Booting new firmware, marking successful boot
3822+
```
3823+
3824+
Boot logs after hard reset:
3825+
3826+
```
3827+
wolfBoot HAL Init
3828+
Boot partition: 0xFC00 (sz 8976, ver 0x2, type 0x601)
3829+
Update partition: 0x27C00 (sz 8976, ver 0x1, type 0x601)
3830+
Boot partition: 0xFC00 (sz 8976, ver 0x2, type 0x601)
3831+
Booting version: 0x2
3832+
verify integrity: img 0x1FFFE904, part 0
3833+
verify authenticity: img 0x1FFFE904, part 0
3834+
========================
3835+
VA416x0 wolfBoot demo Application
3836+
Copyright 2025 wolfSSL Inc
3837+
GPL v3
3838+
Version : 0x2
3839+
========================
3840+
3841+
System information
3842+
====================================
3843+
Firmware version : 0x2
3844+
Current firmware state: CONFIRMED
3845+
Backup firmware version : 0x1
3846+
Update state: NEW
3847+
Update image older than current.
3848+
3849+
Bootloader OTP keystore information
3850+
====================================
3851+
Number of public keys: 1
3852+
3853+
Public Key #0: size 96, type 6, mask FFFFFFFF
3854+
====================================
3855+
08 A3 83 69 90 76 12 24 4E 86 17 0B 44 63 FF E7
3856+
4C 81 AD DD 15 8A 08 B7 EC 1C D2 F3 13 51 97 E1
3857+
C0 5A 7E BF D2 95 7D EC 49 FC EF 26 90 AD CC 9D
3858+
AD 4C 31 3A ED 18 6E 17 57 97 7F F5 3A 79 AA 6B
3859+
8A 0B 16 90 C5 6C 2A CF BE EE 59 99 B2 C7 B6 44
3860+
BA 3E 1A C3 92 48 1B 5C D2 AF B4 0A 83 2F 74 37
3861+
```

0 commit comments

Comments
 (0)