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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,9 @@ language.settings.xml
/**/build
/**/build-**

# Any generated directories
/**/generated

# Exception: vendored wolfGlass SBOM integration sources.
# This directory contains tracked Make/CMake fragments, not generated output.
!/tools/sbom/build/
Expand Down
34 changes: 33 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -529,12 +529,39 @@ wolfboot.efi: wolfboot.elf
$(Q)$(SIZE) wolfboot.efi
@echo

ifeq ($(TARGET),ti_am64x_r5)
$(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-r5/ti-am64x-r5_hal.syscfg
endif

wolfboot.bin: wolfboot.elf
ifeq ($(TARGET),ti_am64x_r5)
@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 @@ -681,9 +708,13 @@ 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)" WOLFHSM_MICROCHIP_PIC32CZ="$(WOLFHSM_MICROCHIP_PIC32CZ)" image.elf
ifneq (,$(filter 1,$(ELF_FLASH_SCATTER))$(filter ti_am64x_r5,$(TARGET)))
$(Q)$(SIZE) test-app/image-orig.elf
else
$(Q)$(SIZE) test-app/image.elf
endif

ifeq ($(ELF_FLASH_SCATTER),1)
ifneq (,$(filter 1,$(ELF_FLASH_SCATTER))$(filter ti_am64x_r5,$(TARGET)))
test-app/image.elf: squashelf
endif

Expand Down Expand Up @@ -815,6 +846,7 @@ clean:
$(Q)rm -f test-lib
$(Q)rm -f lib-fs
$(Q)rm -f libwolfboot.a
$(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
151 changes: 148 additions & 3 deletions arch.mk
Original file line number Diff line number Diff line change
Expand Up @@ -612,7 +612,6 @@ ifeq ($(ARCH),ARM)
ifneq ($(DEBUG),0)
CFLAGS+=-DPKCS11_SMALL
endif

endif

ifeq ($(TARGET),stm32n6)
Expand Down Expand Up @@ -756,8 +755,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 @@ -1801,6 +1807,145 @@ ifeq ($(TARGET),ti_hercules)
OPTIMIZATION_LEVEL=2
endif

ifeq ($(TARGET),ti_am64x_r5)
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

UPDATE_OBJS:=src/update_ram.o
CFLAGS+=-DWOLFBOOT_DUALBOOT -DWOLFBOOT_NO_RAMBOOT

OBJS+=$(patsubst %.c,%.o,$(GENERATED_SRCS))
OBJS+=\
$(TI_MCU_PLUS_SDK)/source/board/flash/flash.o \
$(TI_MCU_PLUS_SDK)/source/board/flash/ospi/flash_nor_ospi.o \
$(TI_MCU_PLUS_SDK)/source/drivers/bootloader/soc/am64x_am243x/bootloader_soc.o \
$(TI_MCU_PLUS_SDK)/source/drivers/ospi/v0/ospi_phy_dqs.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_phy_dqs_lld.o \
$(TI_MCU_PLUS_SDK)/source/drivers/ospi/v0/lld/ospi_v0_lld.o \
$(TI_MCU_PLUS_SDK)/source/drivers/ospi/v0/lld/ospi_tuning/ospi_tuning_algo/algo_v1/ospi_phy_tuning.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.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/Mutex_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
40 changes: 40 additions & 0 deletions config/examples/ti-am64x-r5.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
ARCH?=ARM
TARGET?=ti_am64x_r5
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?=0
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?=0
ELF?=1

PKA?=0

WOLFBOOT_SECTOR_SIZE?=0x40000

# Default configuration
WOLFBOOT_PARTITION_SIZE?=0x100000
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x60080000
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x60180000
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x60280000

WOLFBOOT_LOAD_ADDRESS?=0x70080000

WOLFCRYPT_TEST?=1
WOLFCRYPT_BENCHMARK?=1
38 changes: 38 additions & 0 deletions config/examples/ti-am64x-r5/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)
{
Comment thread
twcook86 marked this conversation as resolved.
if(pCtxObj->ctxPrms.opType == SA2UL_OP_AUTH)
{
Loading
Loading