Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,9 @@ language.settings.xml
/**/build
/**/build-**

# Any generated directories
/**/generated

# User config
# See cmake/config_defaults_user.cmake.sample
/**/cmake/config_defaults_user.cmake
Expand Down Expand Up @@ -426,3 +429,6 @@ port/stmicro/stm32h5-tz-wolfhsm/out/

# CI-only generated Libero settings stub (see tools/ci/gen_mpfs_libero_stub.sh)
tools/ci/mpfs_libero_stub/

# VS Code
.vscode/
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,7 @@ if(NOT DEFINED ARM_TARGETS)
stm32u5
stm32wb
ti
ti_am64x
zynqmp
)
set(ARM_TARGETS
Expand Down
32 changes: 32 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -434,12 +434,39 @@ wolfboot.efi: wolfboot.elf
$(Q)$(SIZE) wolfboot.efi
@echo

ifeq ($(TARGET),ti_am64x)
$(GENERATED_SRCS):
@echo "\t[TI SYSCONFIG] generated/hal/"
$(Q)$(TI_SYSCONFIG)/nodejs/node \
$(TI_SYSCONFIG)/dist/cli.js -q \
--product $(TI_MCU_PLUS_SDK)/.metadata/product.json \
--context r5fss0-0 --part Default --package ALV \
--output generated/hal/ \
config/examples/ti-am64x/ti-am64x-r5_hal.syscfg
endif

wolfboot.bin: wolfboot.elf
ifeq ($(TARGET),ti_am64x)
@echo "\t[BIN] wolfboot.tmp"
$(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) -O binary $^ wolfboot.tmp
@echo "\t[TI BIN] ROM-bootable image: wolfboot.bin"
$(Q)python3 $(TI_MCU_PLUS_SDK)/source/security/security_common/tools/boot/signing/rom_image_gen.py \
--swrv 1 \
--sbl-bin wolfboot.tmp \
--sysfw-bin $(TI_MCU_PLUS_SDK)/source/drivers/sciclient/soc/am64x_am243x/sysfw-hs-fs-enc.bin \
--sysfw-inner-cert $(TI_MCU_PLUS_SDK)/source/drivers/sciclient/soc/am64x_am243x/sysfw-hs-fs-enc-cert.bin \
--boardcfg-blob $(TI_MCU_PLUS_SDK)/source/drivers/sciclient/sciclient_default_boardcfg/am64x/boardcfg_blob.bin \
--sbl-loadaddr 0x70000000 --sysfw-loadaddr 0x44000 --bcfg-loadaddr 0x7B000 \
--key $(TI_MCU_PLUS_SDK)/source/security/security_common/tools/boot/signing/rom_degenerateKey.pem \
--rom-image $@
$(Q)rm -f wolfboot.tmp
else
@echo "\t[BIN] $@"
$(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) -O binary $^ $@
ifeq ($(TARGET),nxp_lpc54s0xx)
@echo "\t[LPC] enhanced boot block"
$(Q)python3 tools/scripts/lpc54s0xx_patch_boot_block.py $@
endif
endif
@echo
@echo "\t[SIZE]"
Expand Down Expand Up @@ -583,7 +610,11 @@ endif

test-app/image.elf: wolfboot.elf
$(Q)$(MAKE) -C test-app WOLFBOOT_ROOT="$(WOLFBOOT_ROOT)" ELF_FLASH_SCATTER="$(ELF_FLASH_SCATTER)" LIBERO_FPGA_CONFIG_DIR="$(LIBERO_FPGA_CONFIG_DIR)" image.elf
ifeq ($(ELF_FLASH_SCATTER),1)
$(Q)$(SIZE) test-app/image-orig.elf
else
$(Q)$(SIZE) test-app/image.elf
endif

ifeq ($(ELF_FLASH_SCATTER),1)
test-app/image.elf: squashelf
Expand Down Expand Up @@ -714,6 +745,7 @@ clean:
$(Q)rm -f $(WH_NVM_BIN) $(WH_NVM_HEX)
$(Q)rm -f test-lib
$(Q)rm -f lib-fs
$(Q)rm -rf generated
$(Q)$(MAKE) -C test-app clean V=$(V)
$(Q)$(MAKE) -C tools/check_config -s clean
$(Q)$(MAKE) -C stage1 -s clean
Expand Down
143 changes: 140 additions & 3 deletions arch.mk
Original file line number Diff line number Diff line change
Expand Up @@ -441,7 +441,6 @@ ifeq ($(ARCH),ARM)
ifneq ($(DEBUG),0)
CFLAGS+=-DPKCS11_SMALL
endif

endif

ifeq ($(TARGET),stm32n6)
Expand Down Expand Up @@ -585,8 +584,15 @@ ifeq ($(ARCH),ARM)
endif

## Cortex CPU

ifeq ($(CORTEX_A5),1)
ifeq ($(CORTEX_R5),1)
CFLAGS+=-mcpu=cortex-r5 -DCORTEX_R5
LDFLAGS+=-mcpu=cortex-r5
ifeq ($(NO_ASM),1)
ifeq ($(SPMATH),1)
MATH_OBJS += $(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_c32.o
endif
endif
else ifeq ($(CORTEX_A5),1)
FPU=-mfpu=vfp4-d16
CFLAGS+=-mcpu=cortex-a5 -mtune=cortex-a5 -static -z noexecstack \
-mno-unaligned-access
Expand Down Expand Up @@ -1550,6 +1556,137 @@ ifeq ($(TARGET),ti_hercules)
OPTIMIZATION_LEVEL=2
endif

ifeq ($(TARGET),ti_am64x)
TI_MCU_PLUS_SDK=$(abspath $(wildcard $(PWD)/../TI/mcu_plus_sdk_am64x_*))
ifeq ($(TI_MCU_PLUS_SDK),)
$(error "No sdk found at $(PWD)/../TI/mcu_plus_sdk_am64x_*")
endif

TI_MPSDK_VERSION=$(shell grep version $(TI_MCU_PLUS_SDK)/.metadata/product.json | cut -c17-24)
ifneq ($(TI_MPSDK_VERSION),$(TI_MCU_PLUS_SDK_VERSION_REQUIRED))
$(error "TI MCU Plus SDK version $(TI_MCU_PLUS_SDK_VERSION_REQUIRED) required")
endif

TI_SYSCONFIG=$(abspath $(wildcard $(PWD)/../TI/tools/sysconfig_*))
ifeq ($(TI_SYSCONFIG),)
$(error "No sysconfig found at $(PWD)/../TI/tools/sysconfig_*")
endif

CROSS_COMPILE_PATH=$(abspath $(wildcard $(PWD)/../TI/tools/ti-cgt-armllvm_*))
ifeq ($(CROSS_COMPILE_PATH),)
$(error "No toolchain found at $(PWD)/../TI/tools/ti-cgt-armllvm_*")
endif

ARCH_FLASH_OFFSET=0x60000000
USE_GCC_HEADLESS=0

CROSS_COMPILE=$(CROSS_COMPILE_PATH)/bin
CC=$(CROSS_COMPILE)/tiarmclang
LD=$(CROSS_COMPILE)/tiarmclang
AS=$(CROSS_COMPILE)/tiarmasm
AR=$(CROSS_COMPILE)/tiarmar rc
OBJCOPY=$(CROSS_COMPILE)/tiarmobjcopy
SIZE=$(CROSS_COMPILE)/tiarmsize
OUTPUT_FLAG=-o
OPTIMIZATION_LEVEL=s

CFLAGS+=-DSOC_AM64X -DOS_NORTOS
CFLAGS+=-DTI_MCU_PLUS_SDK
CFLAGS+=-DWOLFBOOT_USE_STDLIBC
CFLAGS+=-DWOLFSSL_USE_ALIGN
CFLAGS+=-Wno-main-return-type -Wno-extra
CFLAGS+=\
-I$(CROSS_COMPILE_PATH)/include/c \
-I$(TI_MCU_PLUS_SDK)/source \
-I$(TI_MCU_PLUS_SDK)/source/kernel/dpl \
-I$(TI_MCU_PLUS_SDK)/source/security

LDFLAGS+=\
-Wl,--diag_suppress=10063 \
-Wl,--ram_model \
-Wl,--reread_libs \
-Wl,-i$(CROSS_COMPILE_PATH)/lib
LD_START_GROUP=
LD_END_GROUP=-Wl,$(LSCRIPT) -Wl,-m=wolfboot.map

LIBS+=-llibc.a -llibsysbm.a

GENERATED_SRCS=
GENERATED_SRCS+=generated/hal/ti_board_config.c
GENERATED_SRCS+=generated/hal/ti_board_open_close.c
GENERATED_SRCS+=generated/hal/ti_dpl_config.c
GENERATED_SRCS+=generated/hal/ti_drivers_config.c
GENERATED_SRCS+=generated/hal/ti_drivers_open_close.c
GENERATED_SRCS+=generated/hal/ti_pinmux_config.c
GENERATED_SRCS+=generated/hal/ti_power_clock_config.c

OBJS+=$(patsubst %.c,%.o,$(GENERATED_SRCS))
OBJS+=\
$(TI_MCU_PLUS_SDK)/source/drivers/bootloader/soc/am64x_am243x/bootloader_soc.o \
$(TI_MCU_PLUS_SDK)/source/drivers/ospi/v0/ospi_v0.o \
$(TI_MCU_PLUS_SDK)/source/drivers/ospi/v0/lld/dma/udma/ospi_udma_lld.o \
$(TI_MCU_PLUS_SDK)/source/drivers/ospi/v0/lld/ospi_v0_lld.o \
$(TI_MCU_PLUS_SDK)/source/drivers/sciclient/sciclient_boardcfg.o \
$(TI_MCU_PLUS_SDK)/source/drivers/sciclient/sciclient_firewall.o \
$(TI_MCU_PLUS_SDK)/source/drivers/sciclient/sciclient_procboot.o \
$(TI_MCU_PLUS_SDK)/source/drivers/firewall/v0/firewall.o \
$(TI_MCU_PLUS_SDK)/source/drivers/pinmux/am64x_am243x/pinmux.o \
$(TI_MCU_PLUS_SDK)/source/drivers/qos/v0/qos.o \
$(TI_MCU_PLUS_SDK)/source/drivers/sciclient/csl_sec_proxy.o \
$(TI_MCU_PLUS_SDK)/source/drivers/sciclient/sciclient.o \
$(TI_MCU_PLUS_SDK)/source/drivers/sciclient/sciclient_pm.o \
$(TI_MCU_PLUS_SDK)/source/drivers/sciclient/sciclient_rm.o \
$(TI_MCU_PLUS_SDK)/source/drivers/sciclient/sciclient_rm_irq.o \
$(TI_MCU_PLUS_SDK)/source/drivers/sciclient/soc/am64x_am243x/sciclient_fmwSecureProxyMap.o \
$(TI_MCU_PLUS_SDK)/source/drivers/sciclient/soc/am64x_am243x/sciclient_irq_rm.o \
$(TI_MCU_PLUS_SDK)/source/drivers/sciclient/soc/am64x_am243x/sciclient_soc_priv.o \
$(TI_MCU_PLUS_SDK)/source/drivers/soc/am64x_am243x/soc.o \
$(TI_MCU_PLUS_SDK)/source/drivers/uart/v0/uart_v0.o \
$(TI_MCU_PLUS_SDK)/source/drivers/uart/v0/lld/uart_v0_lld.o \
$(TI_MCU_PLUS_SDK)/source/drivers/uart/v0/lld/dma/soc/am64x_am243x/uart_dma_soc.o \
$(TI_MCU_PLUS_SDK)/source/drivers/uart/v0/lld/dma/udma/uart_dma_udma.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/hw_include/csl_bcdma.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/hw_include/csl_intaggr.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/hw_include/csl_lcdma_ringacc.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/hw_include/csl_pktdma.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/soc/udma_rmcfg_common.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/soc/am64x_am243x/udma_rmcfg.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/soc/am64x_am243x/udma_soc.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/v0/udma.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/v0/udma_ch.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/v0/udma_event.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/v0/udma_flow.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/v0/udma_ring_common.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/v0/udma_ring_lcdma.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/v0/udma_rm.o \
$(TI_MCU_PLUS_SDK)/source/drivers/udma/v0/udma_utils.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/common/AddrTranslateP.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/common/ClockP_nortos.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/common/DebugP_log.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/common/DebugP_nortos.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/common/DebugP_uartLogWriter.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/common/printf.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/common/SemaphoreP_nortos.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/common/TaskP_nortos.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/common/TimerP_rti_nortos.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/common/TimerP_rti_priv.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/boot_armv7r.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/boot_armv7r_asm.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/CacheP_armv7r.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/CacheP_armv7r_asm.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/ClockP_nortos_r5.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/HwiP_armv7r_asm.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/HwiP_armv7r_handlers_nortos.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/HwiP_armv7r_handlers_nortos_asm.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/HwiP_armv7r_vectors_nortos_sbl_asm.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/HwiP_armv7r_vim.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/MpuP_armv7r.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/MpuP_armv7r_asm.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/PmuP_armv7r.o \
$(TI_MCU_PLUS_SDK)/source/kernel/nortos/dpl/r5/PmuP_armv7r_asm.o \
$(TI_MCU_PLUS_SDK)/source/security/security_common/drivers/crypto/rng/rng.o
endif

ifeq ($(TARGET),lpc)
ifeq ($(MCUXSDK),1)
# Some targets in the SDK use drivers from a different target
Expand Down
39 changes: 39 additions & 0 deletions config/examples/ti-am64x.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
ARCH?=ARM
TARGET?=ti_am64x
SIGN?=ECC256
HASH?=SHA256
CORTEX_R5?=1
USE_GCC?=0
TI_MCU_PLUS_SDK_VERSION_REQUIRED=11.02.00
DEBUG?=0
DEBUG_UART?=1
VTOR?=1
NO_ASM?=1
NO_ARM_ASM=1
NO_MPU=1
EXT_FLASH?=1
SPI_FLASH?=0
NO_XIP?=1
ALLOW_DOWNGRADE?=0
NVM_FLASH_WRITEONCE?=1
WOLFBOOT_VERSION?=0
V?=0
SPMATH?=1
RAM_CODE?=0
DUALBANK_SWAP?=0
FLASH_MULTI_SECTOR_ERASE?=1
ELF=1
ELF_FLASH_SCATTER=1

PKA?=0

WOLFBOOT_SECTOR_SIZE?=0x200

# Default configuration
WOLFBOOT_PARTITION_SIZE?=0x40000
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x60080000
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x600c0000
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x600e0000

WOLFCRYPT_TEST?=1
WOLFCRYPT_BENCHMARK?=1
38 changes: 38 additions & 0 deletions config/examples/ti-am64x/mcuplussdk_11.02.00_sa2ul.c.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
--- a/sa2ul.c 2026-08-05 22:36:06.345330013 -0400
+++ b/sa2ul.c 2026-08-06 18:28:41.124171790 -0400
@@ -1123,7 +1123,7 @@
sc.u.auth.authCtx1 =
CSL_FMK(SA2UL_AUTHCTX1_MODESEL, 0u) |
CSL_FMK(SA2UL_AUTHCTX1_DEFAULT_NEXT_ENGINE_ID, SA2UL_ENGINE_CODE_DEFAULT_EGRESS_PORT) |
- CSL_FMK(SA2UL_AUTHCTX1_SW_CONTROL, 0x40u | ctxObj->ctxPrms.hashAlg);
+ CSL_FMK(SA2UL_AUTHCTX1_SW_CONTROL, 0xc0u | ctxObj->ctxPrms.hashAlg);

/* Authentication length in bits for basic hash, length in bits */
sc.u.auth.authenticationLengthLo = authLen;
@@ -1208,7 +1208,7 @@
else
{
/* Copy IV */
- SA2UL_u8LeToU32(sc.u.enc.encAux3, ctxObj->ctxPrms.iv,SA2UL_MAX_IV_SIZE_BYTES);
+ SA2UL_u8LeToU32(sc.u.enc.encAux2, ctxObj->ctxPrms.iv,SA2UL_MAX_IV_SIZE_BYTES);
}

sc.scctl.scctl1 =
@@ -1873,7 +1873,7 @@
txDescr->exPktInfo.swWord0 |= (CSL_FMK(SA2UL_SWWORD0_BYP_CMD_LBL_LEN, 1u) | CSL_FMK(SA2UL_SWWORD0_FRAGMENT, 1u));
}

- if(pCtxObj->ctxPrms.inputLen > CSL_FEXT(0xffffffffu, SA2UL_CMDLBLHDR1_LEN_TO_BE_PROCESSESED))
+// if(pCtxObj->ctxPrms.inputLen > CSL_FEXT(0xffffffffu, SA2UL_CMDLBLHDR1_LEN_TO_BE_PROCESSESED))
{
/* Update protocol specific data length, add 8 */
CSL_FINS(txDescr->pd.descInfo,
@@ -2026,7 +2026,7 @@
reg = CSL_FEXT(rxDescr->pd.descInfo, PKTDMA_CPPI5_PD_DESCINFO_PKTLEN);
pCtxObj->rxBytesCnt += reg;

- if(pCtxObj->rxBytesCnt == pCtxObj->ctxPrms.inputLen)
+// if(pCtxObj->rxBytesCnt == pCtxObj->ctxPrms.inputLen)
{
if(pCtxObj->ctxPrms.opType == SA2UL_OP_AUTH)
{
Loading