From 13d11a85bc261958f83164229668d0c93e3d6771 Mon Sep 17 00:00:00 2001 From: Thomas Cook Date: Mon, 28 Sep 2026 12:18:32 -0400 Subject: [PATCH] Misc cleanup --- CMakeLists.txt | 2 +- Makefile | 8 +- arch.mk | 13 +- .../{ti-am64x.config => ti-am64x-r5.config} | 19 +- .../mcuplussdk_11.02.00_sa2ul.c.patch | 0 .../ti-am64x-r5_hal.syscfg | 0 .../ti-am64x-r5_test-app.syscfg | 54 ++++-- docs/Targets.md | 168 +++++++++++++++++- hal/{ti_am64x.c => ti_am64x_r5.c} | 166 +++++++++-------- hal/{ti_am64x.ld => ti_am64x_r5.ld} | 10 +- include/user_settings.h | 7 +- options.mk | 2 +- src/image.c | 2 +- .../{ARM-ti_am64x.ld => ARM-ti_am64x_r5.ld} | 12 +- test-app/Makefile | 44 +++-- .../{app_ti_am64x.c => app_ti_am64x_r5.c} | 71 ++++---- test-app/wolfcrypt_support.c | 12 +- 17 files changed, 400 insertions(+), 190 deletions(-) rename config/examples/{ti-am64x.config => ti-am64x-r5.config} (61%) rename config/examples/{ti-am64x => ti-am64x-r5}/mcuplussdk_11.02.00_sa2ul.c.patch (100%) rename config/examples/{ti-am64x => ti-am64x-r5}/ti-am64x-r5_hal.syscfg (100%) rename config/examples/{ti-am64x => ti-am64x-r5}/ti-am64x-r5_test-app.syscfg (86%) rename hal/{ti_am64x.c => ti_am64x_r5.c} (70%) rename hal/{ti_am64x.ld => ti_am64x_r5.ld} (87%) rename test-app/{ARM-ti_am64x.ld => ARM-ti_am64x_r5.ld} (88%) rename test-app/{app_ti_am64x.c => app_ti_am64x_r5.c} (72%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c25d721..fd7d1d46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -413,7 +413,7 @@ if(NOT DEFINED ARM_TARGETS) stm32u5 stm32wb ti - ti_am64x + ti_am64x_r5 zynqmp ) set(ARM_TARGETS diff --git a/Makefile b/Makefile index 4cfc7e63..81e0c748 100644 --- a/Makefile +++ b/Makefile @@ -588,7 +588,7 @@ wolfboot.efi: wolfboot.elf $(Q)$(SIZE) wolfboot.efi @echo -ifeq ($(TARGET),ti_am64x) +ifeq ($(TARGET),ti_am64x_r5) $(GENERATED_SRCS): @echo "\t[TI SYSCONFIG] generated/hal/" $(Q)$(TI_SYSCONFIG)/nodejs/node \ @@ -596,11 +596,11 @@ $(GENERATED_SRCS): --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 + config/examples/ti-am64x-r5/ti-am64x-r5_hal.syscfg endif wolfboot.bin: wolfboot.elf -ifeq ($(TARGET),ti_am64x) +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" @@ -783,7 +783,7 @@ 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 -ifeq ($(ELF_FLASH_SCATTER),1) +ifneq (,$(ELF_FLASH_SCATTER)$(filter ti_am64x_r5,$(TARGET))) $(Q)$(SIZE) test-app/image-orig.elf else $(Q)$(SIZE) test-app/image.elf diff --git a/arch.mk b/arch.mk index 2239292a..e71d19c9 100644 --- a/arch.mk +++ b/arch.mk @@ -2152,7 +2152,7 @@ ifeq ($(TARGET),ti_hercules) OPTIMIZATION_LEVEL=2 endif -ifeq ($(TARGET),ti_am64x) +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_*") @@ -2216,12 +2216,20 @@ ifeq ($(TARGET),ti_am64x) 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 \ @@ -2264,8 +2272,7 @@ ifeq ($(TARGET),ti_am64x) $(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/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 \ diff --git a/config/examples/ti-am64x.config b/config/examples/ti-am64x-r5.config similarity index 61% rename from config/examples/ti-am64x.config rename to config/examples/ti-am64x-r5.config index 995be294..ee1c33cb 100644 --- a/config/examples/ti-am64x.config +++ b/config/examples/ti-am64x-r5.config @@ -1,5 +1,5 @@ ARCH?=ARM -TARGET?=ti_am64x +TARGET?=ti_am64x_r5 SIGN?=ECC256 HASH?=SHA256 CORTEX_R5?=1 @@ -11,7 +11,7 @@ VTOR?=1 NO_ASM?=1 NO_ARM_ASM=1 NO_MPU=1 -EXT_FLASH?=1 +EXT_FLASH?=0 SPI_FLASH?=0 NO_XIP?=1 ALLOW_DOWNGRADE?=0 @@ -21,19 +21,20 @@ V?=0 SPMATH?=1 RAM_CODE?=0 DUALBANK_SWAP?=0 -FLASH_MULTI_SECTOR_ERASE?=1 -ELF=1 -ELF_FLASH_SCATTER=1 +FLASH_MULTI_SECTOR_ERASE?=0 +ELF?=1 PKA?=0 -WOLFBOOT_SECTOR_SIZE?=0x200 +WOLFBOOT_SECTOR_SIZE?=0x40000 # Default configuration -WOLFBOOT_PARTITION_SIZE?=0x40000 +WOLFBOOT_PARTITION_SIZE?=0x100000 WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x60080000 -WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x600c0000 -WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x600e0000 +WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x60180000 +WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x60280000 + +WOLFBOOT_LOAD_ADDRESS?=0x70080000 WOLFCRYPT_TEST?=1 WOLFCRYPT_BENCHMARK?=1 diff --git a/config/examples/ti-am64x/mcuplussdk_11.02.00_sa2ul.c.patch b/config/examples/ti-am64x-r5/mcuplussdk_11.02.00_sa2ul.c.patch similarity index 100% rename from config/examples/ti-am64x/mcuplussdk_11.02.00_sa2ul.c.patch rename to config/examples/ti-am64x-r5/mcuplussdk_11.02.00_sa2ul.c.patch diff --git a/config/examples/ti-am64x/ti-am64x-r5_hal.syscfg b/config/examples/ti-am64x-r5/ti-am64x-r5_hal.syscfg similarity index 100% rename from config/examples/ti-am64x/ti-am64x-r5_hal.syscfg rename to config/examples/ti-am64x-r5/ti-am64x-r5_hal.syscfg diff --git a/config/examples/ti-am64x/ti-am64x-r5_test-app.syscfg b/config/examples/ti-am64x-r5/ti-am64x-r5_test-app.syscfg similarity index 86% rename from config/examples/ti-am64x/ti-am64x-r5_test-app.syscfg rename to config/examples/ti-am64x-r5/ti-am64x-r5_test-app.syscfg index d0b8ea91..8e33ad78 100644 --- a/config/examples/ti-am64x/ti-am64x-r5_test-app.syscfg +++ b/config/examples/ti-am64x-r5/ti-am64x-r5_test-app.syscfg @@ -23,8 +23,12 @@ scripting.excludeFromBuild("linker_defines.h"); /** * Import the modules used in this configuration. */ +const flash = scripting.addModule("/board/flash/flash", {}, false); +const flash1 = flash.addInstance(); const firewall = scripting.addModule("/drivers/firewall/firewall", {}, false); const firewall1 = firewall.addInstance(); +const qos = scripting.addModule("/drivers/qos/qos", {}, false); +const qos1 = qos.addInstance(); const debug_log = scripting.addModule("/kernel/dpl/debug_log"); const dpl_cfg = scripting.addModule("/kernel/dpl/dpl_cfg"); const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); @@ -33,7 +37,6 @@ const mpu_armv72 = mpu_armv7.addInstance(); const mpu_armv73 = mpu_armv7.addInstance(); const mpu_armv74 = mpu_armv7.addInstance(); const mpu_armv75 = mpu_armv7.addInstance(); -const mpu_armv76 = mpu_armv7.addInstance(); const default_linker = scripting.addModule("/memory_configurator/default_linker", {}, false); const default_linker1 = default_linker.addInstance(); const general = scripting.addModule("/memory_configurator/general", {}, false); @@ -58,6 +61,14 @@ const crypto1 = crypto.addInstance(); /** * Write custom configuration values to the imported modules. */ +flash1.$name = "CONFIG_FLASH0"; +flash1.peripheralDriver.$name = "CONFIG_OSPI0"; +flash1.peripheralDriver.phyEnable = true; +flash1.peripheralDriver.advanced = true; +flash1.peripheralDriver.inputClkFreq = 166666666; +flash1.peripheralDriver.dmaEnable = true; +flash1.peripheralDriver.child.$name = "drivers_ospi_v0_ospi_v0_template0"; + firewall1.$name = "CONFIG_FIREWALL0"; firewall1.regCfg.create(1); firewall1.regCfg[0].$name = "FWL_REG_CFG0"; @@ -67,6 +78,13 @@ firewall1.regCfg[0].interName = "MMRA"; firewall1.regCfg[0].fwlCache = true; firewall1.regCfg[0].fwlPriv1 = "MAIN_0_R5_0_SECURE"; +qos1.$name = "CONFIG_QOS0"; + +const udma = scripting.addModule("/drivers/udma/udma", {}, false); +const udma1 = udma.addInstance({}, false); +udma1.$name = "CONFIG_UDMA0"; +flash1.peripheralDriver.udmaDriver = udma1; + debug_log.enableUartLog = true; debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; debug_log.uartLog.UART.$assign = "USART0"; @@ -96,14 +114,9 @@ mpu_armv74.baseAddr = 0x70000000; mpu_armv74.size = 21; mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; -mpu_armv75.$name = "CONFIG_MPU_REGION4"; -mpu_armv75.baseAddr = 0x60000000; -mpu_armv75.size = 28; -mpu_armv75.accessPermissions = "Supervisor RD, User RD"; - -mpu_armv76.$name = "CONFIG_MPU_REGION5"; -mpu_armv76.baseAddr = 0x80000000; -mpu_armv76.size = 31; +mpu_armv75.baseAddr = 0x80000000; +mpu_armv75.size = 31; +mpu_armv75.$name = "CONFIG_MPU_REGION4"; default_linker1.$name = "memory_configurator_default_linker0"; @@ -275,15 +288,26 @@ section11.output_section[0].alignment = 0; crypto1.$name = "CONFIG_CRYPTO0"; crypto1.sa2ul.$name = "CONFIG_SA2UL0"; -const udma = scripting.addModule("/drivers/udma/udma", {}, false); -const udma1 = udma.addInstance({}, false); -udma1.$name = "CONFIG_UDMA0"; -crypto1.sa2ul.udmaPKTDMA = udma1; +const udma2 = udma.addInstance({}, false); +udma2.$name = "CONFIG_UDMA1"; +crypto1.sa2ul.udmaPKTDMA = udma2; /** * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to * re-solve from scratch. */ -debug_log.uartLog.UART.RXD.$suggestSolution = "UART0_RXD"; -debug_log.uartLog.UART.TXD.$suggestSolution = "UART0_TXD"; +flash1.peripheralDriver.OSPI.$suggestSolution = "OSPI0"; +flash1.peripheralDriver.OSPI.CLK.$suggestSolution = "OSPI0_CLK"; +flash1.peripheralDriver.OSPI.CSn0.$suggestSolution = "OSPI0_CSn0"; +flash1.peripheralDriver.OSPI.DQS.$suggestSolution = "OSPI0_DQS"; +flash1.peripheralDriver.OSPI.D7.$suggestSolution = "OSPI0_D7"; +flash1.peripheralDriver.OSPI.D6.$suggestSolution = "OSPI0_D6"; +flash1.peripheralDriver.OSPI.D5.$suggestSolution = "OSPI0_D5"; +flash1.peripheralDriver.OSPI.D4.$suggestSolution = "OSPI0_D4"; +flash1.peripheralDriver.OSPI.D3.$suggestSolution = "OSPI0_D3"; +flash1.peripheralDriver.OSPI.D2.$suggestSolution = "OSPI0_D2"; +flash1.peripheralDriver.OSPI.D1.$suggestSolution = "OSPI0_D1"; +flash1.peripheralDriver.OSPI.D0.$suggestSolution = "OSPI0_D0"; +debug_log.uartLog.UART.RXD.$suggestSolution = "UART0_RXD"; +debug_log.uartLog.UART.TXD.$suggestSolution = "UART0_TXD"; diff --git a/docs/Targets.md b/docs/Targets.md index 917e2856..91a9d7d7 100644 --- a/docs/Targets.md +++ b/docs/Targets.md @@ -73,6 +73,7 @@ This README describes configuration of supported targets. * [STM32L5](#stm32l5) * [STM32U5](#stm32u5) * [STM32WB55](#stm32wb55) +* [TI AM6442](#ti-am6442) * [TI C2000 C28x (LAUNCHXL-F28P55X)](#ti-c2000-c28x-launchxl-f28p55x) * [TI Hercules TMS570LC435](#ti-hercules-tms570lc435) * [Vorago VA416x0](#vorago-va416x0) @@ -7317,8 +7318,6 @@ cmd> See [/config/examples/ti-tms570lc435.config](/config/examples/ti-tms570lc435.config) for example configuration. - - ## Nordic nRF52840 We have full Nordic nRF5280 examples for Contiki and RIOT-OS in our [wolfBoot-examples repo](https://github.com/wolfSSL/wolfboot-examples) @@ -10379,6 +10378,171 @@ Stage 1 is built by `make -C stage1` and takes its own options, separately from The two bring-up options exist to get a new board talking; neither belongs in a shipped configuration, and the build refuses to combine either with authentication rather than letting a boot continue past a refusal. + + + + + + +## TI AM6442 + +The TI AM6442 is a multi-core SoC, with one dual-core Cortex-A53, two dual-core Cortex-R5F, +a Cortex-M4F, and a dedicated security core based on a Cortex-M3. This support has been +tested on the TMDS64EVM board (rev 101D). + +### AM64x: Setup Software Tools + +Software builds require the TI MCU Plus SDK and the TI Arm Clang toolchain, plus +a couple other TI tools. + +Download the SDK: +[MCU Plus SDK for AM64x v11.02](https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-SfkcjYAjGS/11.02.00.24/mcu_plus_sdk_am64x_11_02_00_24-linux-x64-installer.run) + +To set up the TI SDK and toolchain: + +``` +# from the wolfBoot directory... +mkdir ../TI +cd ../TI + +# Install SDK +/path/to/mcu_plus_sdk_am64x_11_02_00_24-linux-x64-installer.run --mode unattended --prefix . + +# Clone the setup repo +git clone --branch REL.MCUSDK.K3.11.02.00.24 https://github.com/TexasInstruments/mcupsdk-setup.git + +# Run the download_components.sh script +chmod +x mcupsdk-setup/releases/11_00_00/am64x/download_components.sh +mcupsdk-setup/am64x/download_components.sh --install_dir=./tools --skip_nodejs=true --skip_doxygen=true --skip_ccs=true +``` + +### AM64x: Hardware Acceleration + +wolfBoot / wolfCrypt provide support for the TI AM64x hardware acceleration +blocks via the device's SA2UL peripheral. By default, this +support is turned off in the config files, and all crypto is software based. +To turn on hardware acceleration, set PKA=1 in the config file. + +Basic hardware acceleration supported: +- AES-CBC (128, 256 key sizes) +- AES-ECB (128, 256 key sizes) +- AES-GCM (128, 256 key sizes) +- SHA-256, SHA-512 + +See [Test and Benchmark](#am64x-test-and-benchmark) for a comparison with and without hardware acceleration. + +### AM64x: Configuring and compiling + +Copy the example configuration file and build with make: + +```sh +cp config/examples/lpc55s69.config .config +make +``` + +We also provide a TrustZone configuration at `config/examples/lpc55s69-tz.config` +and a benchmarking configuration at `config/examples/lpc55s69-benchmark.config`. + +### AM64x: Loading the firmware + +Download and install the LinkServer tool: +[@NXP: LinkServer for microcontrollers](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/linkserver-for-microcontrollers:LINKERSERVER#downloads) + +NOTE: The LPCXpresso55S69's on-board LINK2 debugger comes loaded with CMSIS-DAP protocol, but it can be +optionally updated to use JLink protocol instead. See the EVK user manual for how to do this, if desired. +The below examples were tested with the default CMSIS-DAP protocol. CMSIS-DAP is supported by default in +the MCUXpresso IDE for debugging purposes. + +Connect a USB cable from your development PC to P6 on the dev board. + +Open a terminal to the virtual COM port with putty or similar app, settings 115200-N-8-1. + +### AM64x: Testing firmware factory.bin + +1) Erase the entire flash: + +```sh +LinkServer flash LPC55S69 erase +``` + +2) Program the factory.bin, which contains both wolfBoot and the test-app version 1: + +```sh +LinkServer flash LPC55S69 load factory.bin:0 +``` +NOTE: See [tools/scripts/lpc55s69/lpc55s69_flash_factory_bin.cmm](/tools/scripts/lpc55s69/lpc55s69_flash_factory_bin.cmm) for the lauterbach equivalent of 1 and 2 combined. + +3) The LED will light up blue to indicate version 1 of the firmware is running. You should also see output +like this in the terminal window: + +```sh +lpc55s69 init +Boot partition: 0xD000 (sz 22460, ver 0x1, type 0x601) +Partition 1 header magic 0xFFFFFFFF invalid at 0x18000 +Boot partition: 0xD000 (sz 22460, ver 0x1, type 0x601) +Booting version: 0x1 + +================================== +LPC55S69 wolfBoot demo Application +Copyright 2026 wolfSSL Inc +================================== + boot: ver=0x1 state=0xFF + update: ver=0x0 state=0xFF +Calling wolfBoot_success() + boot: ver=0x1 state=0x00 + update: ver=0x0 state=0xFF +``` + +### AM64x: Debugging + +Debugging with GDB: + +Note: We include a `.gdbinit` in the wolfBoot root that loads the wolfboot and test-app elf files. + +In one terminal: `LinkServer gdbserver LPC55S69` + +In another terminal use `gdb`: + +``` +b main +mon reset +c +``` +NOTE: See [tools/scripts/lpc55s69/lpc55s69_debug.cmm](/tools/scripts/lpc55s69/lpc55s69_debug.cmm) for the lauterbach equivalent. + + +### AM64x Test and Benchmark + +Here is an example of how to run wolfCrypt test and benchmarking on actual hardware. + +1. Start with [lpc55s69-benchmark.config](/config/examples/lpc55s69-benchmark.config) + - By default, the config file has PKA?=0, which means hardware acceleration of crypto is off. Let's try that first. +```sh +cp config/examples/lpc55s69-benchmark.config .config +make clean +make +``` + +2. Flash the factory.bin and reboot... +```sh +``` + +2. Now try changing to PKA?=1 in the config file, rebuild, and reflash... +```sh +``` + + + + + + + + + + + + + ## TI C2000 C28x (LAUNCHXL-F28P55X) wolfBoot runs on the Texas Instruments C2000 C28x DSP (TMS320F28P550SJ, 150 MHz) as a secure execute-in-place (XIP) bootloader. The C28x is word-addressed with `CHAR_BIT == 16` (no 8-bit type -- each octet occupies one 16-bit cell), built with the TI `cl2000` toolchain against wolfSSL's wide-byte (`CHAR_BIT != 8`) support. diff --git a/hal/ti_am64x.c b/hal/ti_am64x_r5.c similarity index 70% rename from hal/ti_am64x.c rename to hal/ti_am64x_r5.c index 5c6d87fa..fb0bb6d0 100644 --- a/hal/ti_am64x.c +++ b/hal/ti_am64x_r5.c @@ -1,4 +1,4 @@ -/* ti_am64x.c +/* ti_am64x_r5.c * * Copyright (C) 2026 wolfSSL Inc. * @@ -27,29 +27,10 @@ #include -// static flash_config_t pflash; -// static const uint32_t pflash_page_size = 512U; -// uint32_t SystemCoreClock; /* set in clock_config.c */ - -// static void hal_flash_fix_ecc(void) -// { -// uint8_t page_buf[512]; -// uint32_t addr; -// uint32_t start = WOLFBOOT_PARTITION_BOOT_ADDRESS; -// uint32_t end = WOLFBOOT_PARTITION_SWAP_ADDRESS + WOLFBOOT_SECTOR_SIZE; - -// memset(page_buf, 0xFF, sizeof(page_buf)); - -// for (addr = start; addr < end; addr += pflash_page_size) { -// if (FLASH_VerifyErase(&pflash, addr, pflash_page_size) -// == kStatus_FLASH_Success) { -// FLASH_Program(&pflash, addr, page_buf, pflash_page_size); -// } -// } -// } - #include "DebugP.h" +#include "board/flash.h" #include "drivers/sciclient.h" +#include "drivers/ospi.h" #include "drivers/bootloader/soc/am64x_am243x/bootloader_soc.h" #include "kernel/dpl/ClockP.h" #include "security/security_common/drivers/crypto/rng/rng.h" @@ -57,9 +38,9 @@ void System_init(void); void Drivers_open(void); -void Drivers_udmaOpen(void); -void Drivers_uartOpen(void); -extern ClockP_Config gClockConfig; +int32_t Board_driversOpen(void); +extern OSPI_Handle gOspiHandle[1]; +extern Flash_Handle gFlashHandle[1]; #ifndef __WOLFBOOT #include @@ -75,6 +56,32 @@ void putchar__(char character) } #endif +static void flashFixUpOspiBoot(OSPI_Handle oHandle) +{ + int32_t status = SystemP_FAILURE; + OSPI_setProtocol(oHandle, OSPI_NOR_PROTOCOL(8,8,8,1)); + OSPI_enableDDR(oHandle); + OSPI_setDualOpCodeMode(oHandle); + + /* Do a soft reset of the OSPI flash */ + OSPI_WriteCmdParams wrParams; + + OSPI_WriteCmdParams_init(&wrParams); + wrParams.cmd = 0x66; + status = OSPI_writeCmd(oHandle, &wrParams); + if(status == SystemP_SUCCESS) + { + wrParams.cmd = 0x99; + status = OSPI_writeCmd(oHandle, &wrParams); + } + /* Wait for the flash to reset */ + ClockP_usleep(100); + + OSPI_enableSDR(oHandle); + OSPI_clearDualOpCodeMode(oHandle); + OSPI_setProtocol(oHandle, OSPI_NOR_PROTOCOL(1,1,1,0)); +} + void hal_init(void) { #ifdef __WOLFBOOT @@ -86,12 +93,6 @@ void hal_init(void) Sciclient_waitForBootNotification(); - /* Warm Reset Workaround to prevent CPSW register lockup */ - if (!Bootloader_socIsMCUResetIsoEnabled()) - { - Bootloader_socResetWorkaround(); - } - if (!Bootloader_socIsMCUResetIsoEnabled()) { /* Update devGrp to ALL to initialize MCU domain when reset isolation is @@ -116,41 +117,28 @@ void hal_init(void) (void)Sciclient_boardCfgRm(&boardCfgPrms_rm); - /* Enable MCU PLL. MCU PLL will not be enabled by DMSC when devGrp is set - to Main in boardCfg */ Bootloader_enableMCUPLL(); } System_init(); - Bootloader_socOpenFirewalls(); - Bootloader_socNotifyFirewallOpen(); - - Drivers_udmaOpen(); - Drivers_uartOpen(); + Drivers_open(); + uart_write("ti_am64x_r5 init\n", 14); Sciclient_getVersionCheck(1); - #else - gClockConfig.timerBaseAddr = 0x0e080000UL; /* fixes sdk syscfg bug */ + // asm( + // "_debug_loop_start:\n" + // " b _debug_loop_start\n" + // ); + System_init(); Drivers_open(); #endif /* __WOLFBOOT */ -#ifdef __WOLFBOOT - -# ifdef DEBUG_UART - uart_init(); - uart_write("ti_am64x init\n", 14); -# endif - -#endif /* __WOLFBOOT */ - -#if defined(__WOLFBOOT) - // memset(&pflash, 0, sizeof(pflash)); - // FLASH_Init(&pflash); - // hal_flash_fix_ecc(); -#endif + flashFixUpOspiBoot(gOspiHandle[0]); + Board_driversOpen(); + OSPI_enableDacMode(gOspiHandle[0]); } #ifdef __WOLFBOOT @@ -171,10 +159,36 @@ void hal_prepare_boot(void) } #endif +#define PAGE_SIZE 256 + int RAMFUNCTION hal_flash_write(uint32_t address, const uint8_t *data, int len) { + int status = 0; + uint32_t page_addr; + uint32_t offset; + uint32_t chunk; + uint8_t page_buf[PAGE_SIZE]; - return 0; + while (len > 0) { + page_addr = address & ~(PAGE_SIZE - 1); + offset = address - page_addr; + chunk = PAGE_SIZE - offset; + if ((uint32_t)len < chunk) + chunk = (uint32_t)len; + + memcpy(page_buf, (void *)page_addr, PAGE_SIZE); + memcpy(page_buf + offset, data, chunk); + + OSPI_disableDacMode(gOspiHandle[0]); + status |= Flash_write(gFlashHandle[0], page_addr - ARCH_FLASH_OFFSET, page_buf, PAGE_SIZE); + OSPI_enableDacMode(gOspiHandle[0]); + + address += chunk; + data += chunk; + len -= (int)chunk; + } + + return status; } void RAMFUNCTION hal_flash_unlock(void) @@ -187,9 +201,18 @@ void RAMFUNCTION hal_flash_lock(void) int RAMFUNCTION hal_flash_erase(uint32_t address, int len) { + uint32_t offset = address - ARCH_FLASH_OFFSET; + uint32_t blk, page; + int status; + OSPI_disableDacMode(gOspiHandle[0]); + status = Flash_offsetToBlkPage(gFlashHandle[0], offset, &blk, &page); + if (status == 0) { + status = Flash_eraseBlk(gFlashHandle[0], blk); + } + OSPI_enableDacMode(gOspiHandle[0]); - return 0; + return status; } #ifdef WOLFCRYPT_SECURE_MODE @@ -278,34 +301,6 @@ void uart_write(const char *buf, unsigned int sz) } #endif -#ifdef EXT_FLASH -int ext_flash_read(uintptr_t address, uint8_t *data, int len) -{ - XMEMCPY(data, (void *)address, len); - return len; -} - -int ext_flash_erase(uintptr_t address, int len) -{ - XMEMSET((void *)address, 0xFF, len); - return len; -} - -int ext_flash_write(uintptr_t address, const uint8_t *data, int len) -{ - XMEMCPY((void *)address, data, len); - return len; -} - -void ext_flash_lock(void) -{ -} - -void ext_flash_unlock(void) -{ -} -#endif /* EXT_FLASH */ - #include #include @@ -316,5 +311,8 @@ void do_boot(const uint32_t *app_offset) HwiP_disable(); CacheP_wbInvAll(CacheP_TYPE_ALL); Bootloader_socCpuResetReleaseSelf(); + while (1) { + asm("nop"); + } } #endif /* __WOLFBOOT */ diff --git a/hal/ti_am64x.ld b/hal/ti_am64x_r5.ld similarity index 87% rename from hal/ti_am64x.ld rename to hal/ti_am64x_r5.ld index a438fac2..1db7c829 100644 --- a/hal/ti_am64x.ld +++ b/hal/ti_am64x_r5.ld @@ -11,8 +11,8 @@ __UNDEFINED_STACK_SIZE = 256; MEMORY { MSRAM_VECS : ORIGIN = 0x70000000 , LENGTH = 0x100 - MSRAM_0 : ORIGIN = 0x70000100 , LENGTH = 0x6FF00 - MSRAM_1 : ORIGIN = 0x70070000 , LENGTH = 0x10000 + MSRAM_0 : ORIGIN = 0x70000100 , LENGTH = 0x1FF00 + MSRAM_01 : ORIGIN = 0x70020000 , LENGTH = 0x60000 } SECTIONS @@ -40,13 +40,13 @@ SECTIONS . = ALIGN(4); _end_bss = .; _end = .; - } > MSRAM_1 , palign(8) + } > MSRAM_01 , palign(8) RUN_START(__BSS_START) RUN_END(__BSS_END) .stack : { - } > MSRAM_1 , palign(8) + } > MSRAM_01 , palign(8) GROUP : { .irqstack : { @@ -74,5 +74,5 @@ SECTIONS } align(8) RUN_START(__UNDEFINED_STACK_START) RUN_END(__UNDEFINED_STACK_END) - } > MSRAM_1 + } > MSRAM_01 } diff --git a/include/user_settings.h b/include/user_settings.h index db842c86..9b8d17b9 100644 --- a/include/user_settings.h +++ b/include/user_settings.h @@ -745,8 +745,8 @@ extern int tolower(int c); #define WOLFSSL_SHA256 #define WOLFSSL_SHA384 #define WOLFSSL_SHA512 - #elif defined(TARGET_ti_am64x) - #ifndef WOLFSSL_TI_AM64X + #elif defined(TARGET_ti_am64x_r5) + #ifndef WOLFSSL_TI_AM64X_R5 #define WC_NO_RNG #endif #define HAVE_AES_ECB @@ -755,11 +755,8 @@ extern int tolower(int c); #define WOLFSSL_AES_DIRECT #define WOLFSSL_CMAC #define WOLFSSL_SHA512 - #define WOLFMEM_DIST 49,10,6,14,5,6,9,1,2 #define WOLFSSL_STATIC_MEMORY_TEST_SZ (50 * 1024) #define WOLFSSL_BENCHMARK_FIXED_UNITS_MB - #define GENERATE_MACHINE_PARSEABLE_REPORT - #define WOLFSSL_BENCHMARK_FIXED_CSV #else /* Use custom RNG for tests/benchmarks (saves ~7KB vs HASHDRBG). * WARNING: my_rng_seed_gen is NOT cryptographically secure. diff --git a/options.mk b/options.mk index 7e682e96..9335dd63 100644 --- a/options.mk +++ b/options.mk @@ -1333,7 +1333,7 @@ ifeq ($(DEBUG_SYMBOLS),1) ifeq ($(USE_GCC),1) CFLAGS+=-ggdb3 else ifneq ($(ARCH),AURIX) - ifneq ($(TARGET),ti_am64x) + ifneq ($(TARGET),ti_am64x_r5) ifneq ($(USE_CLANG),1) # -gstabs was removed in GCC 12; -gdwarf-4 works on old and new GCC CFLAGS+=-gdwarf-4 diff --git a/src/image.c b/src/image.c index 2459eeed..d770b417 100644 --- a/src/image.c +++ b/src/image.c @@ -2392,7 +2392,7 @@ static int read_flash_fwimage(struct wolfBoot_image* img, uint32_t offset, */ static int read_flash_addr(void* src, void* buffer, uint32_t size, int src_ext) { - if (buffer == NULL) { + if (src == NULL || buffer == NULL) { return -1; } diff --git a/test-app/ARM-ti_am64x.ld b/test-app/ARM-ti_am64x_r5.ld similarity index 88% rename from test-app/ARM-ti_am64x.ld rename to test-app/ARM-ti_am64x_r5.ld index 37364feb..f98e90a9 100644 --- a/test-app/ARM-ti_am64x.ld +++ b/test-app/ARM-ti_am64x_r5.ld @@ -1,4 +1,4 @@ ---stack_size=16384 +--stack_size=32768 --heap_size=1024 __IRQ_STACK_SIZE = 4096; __FIQ_STACK_SIZE = 256; @@ -11,7 +11,7 @@ __UNDEFINED_STACK_SIZE = 256; MEMORY { R5F_VECS : ORIGIN = 0x0 , LENGTH = 0x40 - MSRAM : ORIGIN = 0x70080000 , LENGTH = 0x80000 + MSRAM_45 : ORIGIN = 0x70100000 , LENGTH = 0xC0000 } SECTIONS @@ -24,18 +24,18 @@ SECTIONS *(.text*) *(.rodata*) *(.data*) - } > MSRAM , palign(8) + } > MSRAM_45 , palign(8) .bss : { *(.bss*) - } > MSRAM , palign(8) + } > MSRAM_45 , palign(8) RUN_START(__BSS_START) RUN_END(__BSS_END) .stack : { - } > MSRAM , palign(8) + } > MSRAM_45 , palign(8) GROUP : { .irqstack : { @@ -63,7 +63,7 @@ SECTIONS } align(8) RUN_START(__UNDEFINED_STACK_START) RUN_END(__UNDEFINED_STACK_END) - } > MSRAM + } > MSRAM_45 } _wolfboot_partition_boot_address = @WOLFBOOT_PARTITION_BOOT_ADDRESS@; diff --git a/test-app/Makefile b/test-app/Makefile index a7d1ba39..72c94248 100644 --- a/test-app/Makefile +++ b/test-app/Makefile @@ -103,7 +103,7 @@ else CFLAGS+=-Wall -ffreestanding -Wno-unused -ffunction-sections -fdata-sections # Stack usage computation not supported on TriCore ifneq ($(ARCH),AURIX) - ifneq ($(TARGET),ti_am64x) + ifneq ($(TARGET),ti_am64x_r5) ifneq ($(USE_CLANG),1) CFLAGS+=-Wstack-usage=$(STACK_USAGE_LIMIT) endif @@ -114,7 +114,7 @@ else ifeq ($(USE_GCC),1) CFLAGS+=-ggdb3 else ifneq ($(ARCH),AURIX) - ifneq ($(TARGET),ti_am64x) + ifneq ($(TARGET),ti_am64x_r5) ifneq ($(USE_CLANG),1) # -gstabs was removed in GCC 12; -gdwarf-4 works on old and new GCC CFLAGS+=-gdwarf-4 @@ -187,8 +187,8 @@ endif # Setup default linker flags (gcc-driver form). Renesas RX links with ld # directly (USE_GCC=0) and gets its -T/-gc-sections/oformat from arch.mk, so # these gcc-driver flags (-Wl,/-nostartfiles and a duplicate -T) are skipped. -ifeq ($(TARGET),ti_am64x) - LDFLAGS+=-Wl,$(LSCRIPT) -Wl,-m=image.map -Wl,--symbol_map=putchar_=putchar__ +ifeq ($(TARGET),ti_am64x_r5) + LDFLAGS+=-Wl,$(LSCRIPT) -Wl,-m=image.map -Wl,--symbol_map=putchar_=putchar__ -Wl,--honor_cmdfile_order else ifneq ($(ARCH),RENESAS_RX) LDFLAGS+=-T $(LSCRIPT) -Wl,-gc-sections -Wl,-Map=image.map -nostartfiles endif @@ -288,7 +288,7 @@ endif ifeq ($(WOLFCRYPT_SUPPORT),1) # Add support infrastructure APP_OBJS+=wolfcrypt_support.o - ifneq ($(TARGET),ti_am64x) + ifneq ($(TARGET),ti_am64x_r5) APP_OBJS+=syscalls.o endif @@ -912,8 +912,8 @@ ifeq ($(TARGET),ti_hercules) OBJCOPY_FLAGS= endif -ifeq ($(TARGET),ti_am64x) - LSCRIPT_TEMPLATE=ARM-ti_am64x.ld +ifeq ($(TARGET),ti_am64x_r5) + LSCRIPT_TEMPLATE=ARM-ti_am64x_r5.ld endif ifeq ($(TARGET),va416x0) @@ -1198,7 +1198,7 @@ ifeq ($(TARGET),rw612) endif endif -ifeq ($(TARGET),ti_am64x) +ifeq ($(TARGET),ti_am64x_r5) GENERATED_APP_SRCS= GENERATED_APP_SRCS+=../generated/test-app/ti_board_config.c GENERATED_APP_SRCS+=../generated/test-app/ti_board_open_close.c @@ -1210,13 +1210,22 @@ ifeq ($(TARGET),ti_am64x) ORIGINAL_SA2UL_C=$(TI_MCU_PLUS_SDK)/source/security/security_common/drivers/crypto/sa2ul/sa2ul.c PATCHED_SA2UL_C=$(abspath ../generated/common/sa2ul.c) - PATCHFILE_SA2UL_C=$(abspath ../config/examples/ti-am64x/mcuplussdk_11.02.00_sa2ul.c.patch) + PATCHFILE_SA2UL_C=$(abspath ../config/examples/ti-am64x-r5/mcuplussdk_11.02.00_sa2ul.c.patch) APP_OBJS+=$(patsubst %.c,%.o,$(GENERATED_APP_SRCS)) APP_OBJS+=$(patsubst %.c,%.o,$(PATCHED_SA2UL_C)) APP_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/firewall/v0/firewall.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/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 \ @@ -1253,8 +1262,7 @@ ifeq ($(TARGET),ti_am64x) $(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/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 \ @@ -1273,11 +1281,11 @@ ifeq ($(TARGET),ti_am64x) $(TI_MCU_PLUS_SDK)/source/security/security_common/drivers/crypto/rng/rng.o ifeq ($(PKA),1) - CFLAGS+=-DWOLFSSL_TI_AM64X + CFLAGS+=-DWOLFSSL_TI_AM64X_R5 CFLAGS+=-DWOLFSSL_TI_AM64X_RNG_CTR_DRBG APP_OBJS+=\ $(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/cryptocb.o \ - $(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/ti/ti-sa2ul_port.o + $(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/ti/ti-sa2ul_r5_port.o endif endif @@ -1769,7 +1777,7 @@ ifeq ($(WOLFHSM_SERVER),1) APP_OBJS += $(sort $(patsubst $(WOLFBOOT_LIB_WOLFSSL)/%, $(WOLFBOOT_LIB_WOLFSSL)/%, $(WOLFCRYPT_OBJS))) endif -ifeq ($(TARGET),ti_am64x) +ifeq ($(TARGET),ti_am64x_r5) $(GENERATED_APP_SRCS): @echo "\t[TI SYSCONFIG] ../generated/test-app/" $(Q)$(TI_SYSCONFIG)/nodejs/node \ @@ -1777,7 +1785,7 @@ $(GENERATED_APP_SRCS): --product $(TI_MCU_PLUS_SDK)/.metadata/product.json \ --context r5fss0-0 --part Default --package ALV \ --output ../generated/test-app/ \ - ../config/examples/ti-am64x/ti-am64x-r5_test-app.syscfg + ../config/examples/ti-am64x-r5/ti-am64x-r5_test-app.syscfg $(PATCHED_SA2UL_C): $(ORIGINAL_SA2UL_C) $(PATCHFILE_SA2UL_C) @echo "\t[PATCH] $(PATCHED_SA2UL_C)" @@ -1815,8 +1823,8 @@ APP_OBJS := $(patsubst $(WOLFBOOT_LIB_WOLFSSL)/%, \ APP_OBJS := $(patsubst $(WOLFBOOT_LIB_WOLFIP)/%, \ $(WOLFIP_LOCAL_OBJDIR)/%, $(APP_OBJS)) -ifeq ($(ELF_FLASH_SCATTER),1) -# When ELF_FLASH_SCATTER=1, preprocess the ELF file with the squashelf tool +# squashelf if either ELF_FLASH_SCATTER==1 or TARGET==ti_am64x_r5 +ifneq (,$(ELF_FLASH_SCATTER)$(filter ti_am64x_r5,$(TARGET))) SQUASHELF_TOOL = ../tools/squashelf/squashelf OBJCOPY_SRC_ELF=image-orig.elf image-orig.elf: $(APP_OBJS) $(LSCRIPT) @@ -1827,7 +1835,7 @@ image.elf: image-orig.elf @echo "\t[SQUASHELF] $@" $(Q)$(SQUASHELF_TOOL) -v --nosht $< $@ else -# Default behavior when ELF_FLASH_SCATTER is not set +# Default behavior image.elf: $(APP_OBJS) $(LSCRIPT) @echo "\t[LD] $@" $(Q)$(LD) $(LDFLAGS) $(APP_OBJS) $(LIBS) $(OUTPUT_FLAG) $@ diff --git a/test-app/app_ti_am64x.c b/test-app/app_ti_am64x_r5.c similarity index 72% rename from test-app/app_ti_am64x.c rename to test-app/app_ti_am64x_r5.c index 22f3b04a..8e97feaf 100644 --- a/test-app/app_ti_am64x.c +++ b/test-app/app_ti_am64x_r5.c @@ -1,4 +1,4 @@ -/* app_ti_am64x.c +/* app_ti_am64x_r5.c * * Copyright (C) 2026 wolfSSL Inc. * @@ -77,37 +77,37 @@ void main(void) wolfBoot_printf("Copyright 2026 wolfSSL Inc\n"); wolfBoot_printf("==================================\n"); -// check_parts(&boot_ver, &update_ver, &boot_state, &update_state); + check_parts(&boot_ver, &update_ver, &boot_state, &update_state); -// if ( -// boot_ver != 0 && -// (boot_state == IMG_STATE_TESTING || boot_state == IMG_STATE_NEW) -// ) -// { -// #ifdef WOLFCRYPT_SECURE_MODE -// wolfBoot_printf("Calling wolfBoot_nsc_success()\n"); -// wolfBoot_nsc_success(); -// #else -// wolfBoot_printf("Calling wolfBoot_success()\n"); -// wolfBoot_success(); -// #endif -// check_parts(&boot_ver, &update_ver, &boot_state, &update_state); -// } + if ( + boot_ver != 0 && + (boot_state == IMG_STATE_TESTING || boot_state == IMG_STATE_NEW) + ) + { +#ifdef WOLFCRYPT_SECURE_MODE + wolfBoot_printf("Calling wolfBoot_nsc_success()\n"); + wolfBoot_nsc_success(); +#else + wolfBoot_printf("Calling wolfBoot_success()\n"); + wolfBoot_success(); +#endif + check_parts(&boot_ver, &update_ver, &boot_state, &update_state); + } -// if (boot_ver == 1) -// { -// if (update_ver != 0) { -// wolfBoot_printf("Update detected, version: 0x%lx\n", update_ver); -// wolfBoot_printf("Triggering update...\n"); -// #ifdef WOLFCRYPT_SECURE_MODE -// wolfBoot_nsc_update_trigger(); -// #else -// wolfBoot_update_trigger(); -// #endif -// check_parts(&boot_ver, &update_ver, &boot_state, &update_state); -// wolfBoot_printf("...done. Reboot to apply.\n"); -// } -// } + if (boot_ver == 1) + { + if (update_ver != 0) { + wolfBoot_printf("Update detected, version: 0x%lx\n", update_ver); + wolfBoot_printf("Triggering update...\n"); +#ifdef WOLFCRYPT_SECURE_MODE + wolfBoot_nsc_update_trigger(); +#else + wolfBoot_update_trigger(); +#endif + check_parts(&boot_ver, &update_ver, &boot_state, &update_state); + wolfBoot_printf("...done. Reboot to apply.\n"); + } + } #if defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK) wolfCrypt_Init(); @@ -120,7 +120,18 @@ void main(void) # ifdef WOLFCRYPT_BENCHMARK wolfBoot_printf("\nRunning wolfCrypt benchmarks...\n"); +#if 1 benchmark_test(NULL); +#else + { + word32 bs; + for (bs = BENCH_SIZE_EMBEDDED; bs >= 16; bs >>= 1) { + wolfBoot_printf("\n"); + benchmark_configure(bs); + benchmark_test(NULL); + } + } +#endif wolfBoot_printf("Benchmarks complete.\n\n"); # endif diff --git a/test-app/wolfcrypt_support.c b/test-app/wolfcrypt_support.c index 640fe040..db1828e0 100644 --- a/test-app/wolfcrypt_support.c +++ b/test-app/wolfcrypt_support.c @@ -192,8 +192,8 @@ return (uint64_t)csr_read(time); #endif } -#elif defined(TARGET_ti_am64x) - #define RTI_RTIFRC0 0x0e080010ul /* free running counter at 1000 Hz */ +#elif defined(TARGET_ti_am64x_r5) + extern uint64_t ClockP_getTimeUsec(void); #else /* Simple tick counter fallback */ static volatile unsigned int tick_counter = 0; @@ -246,8 +246,8 @@ unsigned long my_time(unsigned long* timer) } #elif defined(TARGET_mpfs250) unsigned long t = (unsigned long)(mpfs_get_ticks() / RISCV_SMODE_TIMER_FREQ); -#elif defined(TARGET_ti_am64x) - unsigned long t = (unsigned long)(*((volatile uint32_t *)RTI_RTIFRC0) / 1000); +#elif defined(TARGET_ti_am64x_r5) + unsigned long t = (unsigned long)(ClockP_getTimeUsec() / 1000000); if (timer) *timer = t; return t; #else @@ -302,9 +302,9 @@ double current_time(int reset) if (reset) mpfs_start_ticks = mpfs_get_ticks(); return (double)(mpfs_get_ticks() - mpfs_start_ticks) / (double)RISCV_SMODE_TIMER_FREQ; -#elif defined(TARGET_ti_am64x) +#elif defined(TARGET_ti_am64x_r5) (void)reset; - return (double)*((volatile uint32_t *)RTI_RTIFRC0) / 1000.0; + return (double)(ClockP_getTimeUsec()) / 1000000.0; #else /* Simple counter-based timing */ if (reset)