From 3e8058948a7c67a2f36a4804ffc602c4fe477caa Mon Sep 17 00:00:00 2001 From: Alex Lanzano Date: Mon, 26 Jan 2026 17:13:05 -0500 Subject: [PATCH 1/4] Integrate wolfHAL --- .gitmodules | 3 + Makefile | 10 +++ arch.mk | 6 ++ config/examples/stm32wb-wolfhal.config | 14 ++++ config/wolfHAL/stm32wb55_nucleo.c | 101 +++++++++++++++++++++++++ config/wolfHAL/stm32wb55_nucleo.mk | 25 ++++++ hal/uart/uart_drv_wolfhal.c | 72 ++++++++++++++++++ hal/wolfhal.c | 89 ++++++++++++++++++++++ lib/wolfHAL | 1 + options.mk | 8 ++ test-app/Makefile | 7 ++ test-app/app_wolfhal.c | 83 ++++++++++++++++++++ 12 files changed, 419 insertions(+) create mode 100644 config/examples/stm32wb-wolfhal.config create mode 100644 config/wolfHAL/stm32wb55_nucleo.c create mode 100644 config/wolfHAL/stm32wb55_nucleo.mk create mode 100644 hal/uart/uart_drv_wolfhal.c create mode 100644 hal/wolfhal.c create mode 160000 lib/wolfHAL create mode 100644 test-app/app_wolfhal.c diff --git a/.gitmodules b/.gitmodules index 6cd81662fe..13396fd2ec 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,6 @@ [submodule "lib/wolfPSA"] path = lib/wolfPSA url = https://github.com/wolfSSL/wolfPSA.git +[submodule "lib/wolfHAL"] + path = lib/wolfHAL + url = https://github.com/wolfSSL/wolfHAL.git diff --git a/Makefile b/Makefile index 1d72f3285e..88d2984840 100644 --- a/Makefile +++ b/Makefile @@ -142,6 +142,7 @@ WOLFBOOT_LIB_WOLFTPM?=lib/wolfTPM WOLFBOOT_LIB_WOLFPKCS11?=lib/wolfPKCS11 WOLFBOOT_LIB_WOLFPSA?=lib/wolfPSA WOLFBOOT_LIB_WOLFHSM?=lib/wolfHSM +WOLFBOOT_LIB_WOLFHAL?=lib/wolfHAL # Convert to absolute paths using abspath function WOLFBOOT_LIB_WOLFSSL:=$(abspath $(WOLFBOOT_LIB_WOLFSSL)) @@ -149,6 +150,7 @@ WOLFBOOT_LIB_WOLFTPM:=$(abspath $(WOLFBOOT_LIB_WOLFTPM)) WOLFBOOT_LIB_WOLFPKCS11:=$(abspath $(WOLFBOOT_LIB_WOLFPKCS11)) WOLFBOOT_LIB_WOLFPSA:=$(abspath $(WOLFBOOT_LIB_WOLFPSA)) WOLFBOOT_LIB_WOLFHSM:=$(abspath $(WOLFBOOT_LIB_WOLFHSM)) +WOLFBOOT_LIB_WOLFHAL:=$(abspath $(WOLFBOOT_LIB_WOLFHAL)) # Export variables so they are available to sub-makefiles export WOLFBOOT_LIB_WOLFSSL @@ -156,6 +158,7 @@ export WOLFBOOT_LIB_WOLFTPM export WOLFBOOT_LIB_WOLFPKCS11 export WOLFBOOT_LIB_WOLFPSA export WOLFBOOT_LIB_WOLFHSM +export WOLFBOOT_LIB_WOLFHAL ## Architecture/CPU configuration include arch.mk @@ -227,6 +230,13 @@ ifeq ($(TARGET),stm32h5) endif endif # TZEN=1 +ifeq ($(TARGET),wolfhal) + LSCRIPT_IN:=hal/$(WOLFHAL_TARGET).ld + CFLAGS+= -I$(WOLFBOOT_LIB_WOLFHAL) + OBJS+=config/wolfHAL/$(WOLFHAL_BOARD).o + include config/wolfHAL/$(WOLFHAL_BOARD).mk +endif + ifeq ($(TARGET),x86_64_efi) MAIN_TARGET:=wolfboot.efi endif diff --git a/arch.mk b/arch.mk index d4467bf886..34acaebd6f 100644 --- a/arch.mk +++ b/arch.mk @@ -203,6 +203,12 @@ ifeq ($(ARCH),ARM) endif endif + ifeq ($(TARGET),wolfhal) + ifeq ($(WOLFHAL_TARGET),stm32wb) + ARCH_FLASH_OFFSET=0x08000000 + SPI_TARGET=stm32 + endif + endif ifeq ($(TARGET),stm32l5) CORTEX_M33=1 diff --git a/config/examples/stm32wb-wolfhal.config b/config/examples/stm32wb-wolfhal.config new file mode 100644 index 0000000000..6e8ba2d7fd --- /dev/null +++ b/config/examples/stm32wb-wolfhal.config @@ -0,0 +1,14 @@ +TARGET=wolfhal +SIGN=ECC256 +HASH=SHA256 +WOLFBOOT_SECTOR_SIZE=0x1000 +WOLFBOOT_PARTITION_SIZE=0x20000 +WOLFBOOT_PARTITION_BOOT_ADDRESS=0x08010000 +WOLFBOOT_PARTITION_UPDATE_ADDRESS=0x08028000 +WOLFBOOT_PARTITION_SWAP_ADDRESS=0x08048000 +NVM_FLASH_WRITEONCE=1 +PKA=0 +WOLFHAL_TARGET=stm32wb +WOLFHAL_BOARD=stm32wb55_nucleo +WOLFHAL_FLASH_SIZE=0x100000 +WOLFHAL_INIT_HOOKS=1 diff --git a/config/wolfHAL/stm32wb55_nucleo.c b/config/wolfHAL/stm32wb55_nucleo.c new file mode 100644 index 0000000000..3db7ca23ec --- /dev/null +++ b/config/wolfHAL/stm32wb55_nucleo.c @@ -0,0 +1,101 @@ +#include + +whal_StRcc_PeriphClk periphClkEn[] = +{ + WHAL_ST_RCC_PERIPH_GPIOA, + WHAL_ST_RCC_PERIPH_GPIOB, + WHAL_ST_RCC_PERIPH_LPUART1, + WHAL_ST_RCC_PERIPH_FLASH, +}; + +whal_Clock wbClock = { + WHAL_STM32WB55_RCC_DEVICE, + + .cfg = &(whal_StRcc_Cfg){ + .sysClkSrc = WHAL_ST_RCC_SYSCLK_SRC_PLL, + .sysClkCfg.pll = + { + .clkSrc = WHAL_ST_RCC_PLLCLK_SRC_MSI, + /* 64 MHz */ + .n = 32, + .m = 0, + .r = 1, + .q = 0, + .p = 0, + }, + .periphClkEn = periphClkEn, + .periphClkEnCount = sizeof(periphClkEn) / sizeof(whal_StRcc_PeriphClk), + }, +}; + +whal_Gpio wbGpio = { + WHAL_STM32WB55_GPIO_DEVICE, + + .pinCfg = &(whal_StGpio_Cfg[3]){ + { /* LED */ + .port = WHAL_STGPIO_PORT_B, + .pin = 5, + .mode = WHAL_STGPIO_MODE_OUT, + .outType = WHAL_STGPIO_OUTTYPE_PUSHPULL, + .speed = WHAL_STGPIO_SPEED_LOW, + .pull = WHAL_STGPIO_PULL_UP, + .altFn = 0, + }, + { /* LPUART1 TX */ + .port = WHAL_STGPIO_PORT_A, + .pin = 2, + .mode = WHAL_STGPIO_MODE_ALTFN, + .outType = WHAL_STGPIO_OUTTYPE_PUSHPULL, + .speed = WHAL_STGPIO_SPEED_FAST, + .pull = WHAL_STGPIO_PULL_UP, + .altFn = 8, + }, + { /* LPUART1 RX */ + .port = WHAL_STGPIO_PORT_A, + .pin = 3, + .mode = WHAL_STGPIO_MODE_ALTFN, + .outType = WHAL_STGPIO_OUTTYPE_PUSHPULL, + .speed = WHAL_STGPIO_SPEED_FAST, + .pull = WHAL_STGPIO_PULL_UP, + .altFn = 8, + }, + }, + .pinCount = 3, +}; + +whal_Uart wbUart = { + WHAL_STM32WB55_LPUART1_DEVICE, + + .cfg = &(whal_StUart_Cfg){ + .baud = 115200, + .sysClk = &wbClock, + }, +}; + +whal_Flash wbFlash = { + WHAL_STM32WB55_FLASH_DEVICE, + + .cfg = &(whal_StFlash_Cfg) { + .startAddr = 0x08000000, + .size = 0x100000, + }, +}; + +void hal_pre_init() +{ + /* The flash read latency needs to be set prior to + * calling whal_Clock_Enable in hal_init() */ + + whal_StFlash_SetLatencyArgs wbFlashLatency = { + .latency = WHAL_ST_FLASH_LATENCY_3 + }; + whal_Flash_Cmd(&wbFlash, WHAL_ST_FLASH_CMD_SET_LATENCY, &wbFlashLatency); +} + +void hal_post_prepare_boot() +{ + whal_StFlash_SetLatencyArgs wbFlashLatency = { + .latency = WHAL_ST_FLASH_LATENCY_0 + }; + whal_Flash_Cmd(&wbFlash, WHAL_ST_FLASH_CMD_SET_LATENCY, &wbFlashLatency); +} diff --git a/config/wolfHAL/stm32wb55_nucleo.mk b/config/wolfHAL/stm32wb55_nucleo.mk new file mode 100644 index 0000000000..9c64d23602 --- /dev/null +++ b/config/wolfHAL/stm32wb55_nucleo.mk @@ -0,0 +1,25 @@ +OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/reg.o + +OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/clock.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/uart/uart.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/gpio.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/flash/flash.o + + +OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/st_rcc.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/uart/st_uart.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/st_gpio.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/flash/st_flash.o + +APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/reg.o + +APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/clock.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/uart/uart.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/gpio.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/flash/flash.o + + +APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/st_rcc.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/uart/st_uart.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/st_gpio.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/flash/st_flash.o diff --git a/hal/uart/uart_drv_wolfhal.c b/hal/uart/uart_drv_wolfhal.c new file mode 100644 index 0000000000..ca85eded9b --- /dev/null +++ b/hal/uart/uart_drv_wolfhal.c @@ -0,0 +1,72 @@ +/* uart_drv_stm32wb.c + * + * Driver for the back-end of the UART_FLASH module. + * + * Example implementation for stm32WB, using UART1. + * + * Pinout: RX=PB7, TX=PB6 (VCOM port UART1 -> STLINK USB) + * + * Copyright (C) 2025 wolfSSL Inc. + * + * This file is part of wolfBoot. + * + * wolfBoot is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * wolfBoot is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + +#ifdef TARGET_wolfhal + +#include +#include + +extern whal_Uart wbUart; + +int uart_tx(const uint8_t c) +{ + whal_Uart_Send(&wbUart, &c, 1); + return 1; +} + +int uart_rx(uint8_t *c) +{ + whal_Uart_Recv(&wbUart, c, 1); + /* ALEX NOTE: this function also returns zero if no data is available... */ + return 1; +} + +int uart_init(uint32_t bitrate, uint8_t data, char parity, uint8_t stop) +{ + /* Handle these configure options in the wolfHAL UART config */ + (void)bitrate; + (void)data; + (void)parity; + (void)stop; + + whal_Error err; + err = whal_Uart_Init(&wbUart); + if (err) { + return 1; + } + + return 0; +} + +#ifdef DEBUG_UART +void uart_write(const char *buf, unsigned int len) +{ + whal_Uart_Send(&wbUart, (uint8_t *)buf, len); +} +#endif + +#endif /* TARGET_wolfhal */ diff --git a/hal/wolfhal.c b/hal/wolfhal.c new file mode 100644 index 0000000000..82ca2a178a --- /dev/null +++ b/hal/wolfhal.c @@ -0,0 +1,89 @@ +/* stm32wb.c + * + * Copyright (C) 2025 wolfSSL Inc. + * + * This file is part of wolfBoot. + * + * wolfBoot is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * wolfBoot is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + +#include +#include +#include "image.h" + +extern whal_Clock wbClock; +extern whal_Gpio wbGpio; +extern whal_Uart wbUart; +extern whal_Flash wbFlash; + +#ifdef WOLFHAL_INIT_HOOKS +extern void hal_pre_init(); +extern void hal_post_prepare_boot(); +#endif /* WOLFHAL_INIT_HOOKS */ + +void RAMFUNCTION hal_flash_unlock(void) +{ + whal_Flash_Unlock(&wbFlash, + 0, WOLFHAL_FLASH_SIZE); +} + +void RAMFUNCTION hal_flash_lock(void) +{ + whal_Flash_Lock(&wbFlash, + 0, WOLFHAL_FLASH_SIZE); +} + +int RAMFUNCTION hal_flash_write(uint32_t address, const uint8_t *data, int len) +{ + whal_Flash_Write(&wbFlash, address, data, len); + return 0; +} + +int RAMFUNCTION hal_flash_erase(uint32_t address, int len) +{ + if (len == 0) + return -1; + + whal_Flash_Erase(&wbFlash, address, len); + return 0; +} + +void hal_init(void) +{ +#ifdef WOLFHAL_INIT_HOOKS + hal_pre_init(); +#endif /* WOLFHAL_INIT_HOOKS */ + + whal_Clock_Init(&wbClock); + whal_Clock_Enable(&wbClock); + + whal_Gpio_Init(&wbGpio); + whal_Uart_Init(&wbUart); + whal_Flash_Init(&wbFlash); +} + +void hal_prepare_boot(void) +{ + whal_Flash_Deinit(&wbFlash); + whal_Uart_Deinit(&wbUart); + whal_Gpio_Deinit(&wbGpio); + + whal_Clock_Disable(&wbClock); + whal_Clock_Deinit(&wbClock); + +#ifdef WOLFHAL_INIT_HOOKS + hal_post_prepare_boot(); +#endif /* WOLFHAL_INIT_HOOKS */ +} diff --git a/lib/wolfHAL b/lib/wolfHAL new file mode 160000 index 0000000000..6a463b2f06 --- /dev/null +++ b/lib/wolfHAL @@ -0,0 +1 @@ +Subproject commit 6a463b2f06b13edebb5920b18893b6bd3fc9be43 diff --git a/options.mk b/options.mk index d55dd160c4..1e9c713cd0 100644 --- a/options.mk +++ b/options.mk @@ -1145,3 +1145,11 @@ endif ifeq ($(TZEN),1) CFLAGS+=-DTZEN endif + +ifneq ($(WOLFHAL_FLASH_SIZE),) + CFLAGS+=-DWOLFHAL_FLASH_SIZE=$(WOLFHAL_FLASH_SIZE) +endif + +ifeq ($(WOLFHAL_INIT_HOOKS),1) + CFLAGS+=-DWOLFHAL_INIT_HOOKS=$(WOLFHAL_INIT_HOOKS) +endif diff --git a/test-app/Makefile b/test-app/Makefile index d2e39d218b..bef588b1d8 100644 --- a/test-app/Makefile +++ b/test-app/Makefile @@ -64,6 +64,13 @@ else endif endif +ifeq ($(TARGET),wolfhal) + WOLFBOOT_LIB_WOLFHAL?=../lib/wolfHAL + CFLAGS += -I$(WOLFBOOT_LIB_WOLFHAL) + APP_OBJS += ../config/wolfHAL/$(WOLFHAL_BOARD).o + include ../config/wolfHAL/$(WOLFHAL_BOARD).mk +endif + include ../arch.mk # Setup default linker flags diff --git a/test-app/app_wolfhal.c b/test-app/app_wolfhal.c new file mode 100644 index 0000000000..e8b932f39e --- /dev/null +++ b/test-app/app_wolfhal.c @@ -0,0 +1,83 @@ +/* main.c + * + * Test bare-metal boot-led-on application + * + * Copyright (C) 2025 wolfSSL Inc. + * + * This file is part of wolfBoot. + * + * wolfBoot is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * wolfBoot is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ +#define WOLFBOOT_FIXED_PARTITIONS + +#include +#include +#include +#include "wolfboot/wolfboot.h" +#include +#include "target.h" +#include "hal.h" + +#ifdef TARGET_wolfhal + +#define BOOT_LED_PIN 0 + +extern whal_Clock wbClock; +extern whal_Gpio wbGpio; +extern whal_Uart wbUart; +extern whal_Flash wbFlash; + +/* Matches all keys: + * - chacha (32 + 12) + * - aes128 (16 + 16) + * - aes256 (32 + 16) + */ +/* Longest key possible: AES256 (32 key + 16 IV = 48) */ +char enc_key[] = "0123456789abcdef0123456789abcdef" + "0123456789abcdef"; + +volatile uint32_t time_elapsed = 0; +void main(void) { + uint32_t version; + uint32_t l = 0; + uint32_t updv; + + hal_init(); + + whal_Gpio_Set(&wbGpio, BOOT_LED_PIN, 1); + + version = wolfBoot_current_firmware_version(); + updv = wolfBoot_update_firmware_version(); + + whal_Uart_Send(&wbUart, "*", 1); + whal_Uart_Send(&wbUart, (uint8_t *)&version, 4); + + if ((version == 1) && (updv != 8)) { + uint32_t sz; + whal_Gpio_Set(&wbGpio, BOOT_LED_PIN, 0); +#if EXT_ENCRYPTED + wolfBoot_set_encrypt_key((uint8_t *)enc_key,(uint8_t *)(enc_key + 32)); +#endif + wolfBoot_update_trigger(); + whal_Gpio_Set(&wbGpio, BOOT_LED_PIN, 1); + } else { + if (version != 7) + wolfBoot_success(); + } + /* Wait for reboot */ + while(1) + asm volatile("wfi"); +} +#endif /** PLATFROM_stm32wb **/ From 55979c245ab5b81d8f9a6484915e35b3707cf532 Mon Sep 17 00:00:00 2001 From: Alex Lanzano Date: Sun, 1 Feb 2026 14:11:03 -0500 Subject: [PATCH 2/4] Move wolfHAL board config and build file to hal/. Optimize wolfHAL build image --- Makefile | 4 +- config/examples/stm32wb-wolfhal.config | 2 +- config/examples/stm32wb.config | 2 +- config/wolfHAL/stm32wb55_nucleo.c | 101 ----------------------- config/wolfHAL/stm32wb55_nucleo.mk | 25 ------ hal/stm32wb.c | 2 + hal/uart/uart_drv_wolfhal.c | 22 ++--- hal/wolfHAL/stm32wb55_nucleo.c | 107 +++++++++++++++++++++++++ hal/wolfHAL/stm32wb55_nucleo.mk | 21 +++++ hal/wolfhal.c | 77 +++++++----------- include/hal.h | 21 +++++ lib/wolfHAL | 2 +- options.mk | 8 +- test-app/Makefile | 4 +- test-app/app_wolfhal.c | 8 +- 15 files changed, 211 insertions(+), 195 deletions(-) delete mode 100644 config/wolfHAL/stm32wb55_nucleo.c delete mode 100644 config/wolfHAL/stm32wb55_nucleo.mk create mode 100644 hal/wolfHAL/stm32wb55_nucleo.c create mode 100644 hal/wolfHAL/stm32wb55_nucleo.mk diff --git a/Makefile b/Makefile index 88d2984840..6726c757a9 100644 --- a/Makefile +++ b/Makefile @@ -233,8 +233,8 @@ endif # TZEN=1 ifeq ($(TARGET),wolfhal) LSCRIPT_IN:=hal/$(WOLFHAL_TARGET).ld CFLAGS+= -I$(WOLFBOOT_LIB_WOLFHAL) - OBJS+=config/wolfHAL/$(WOLFHAL_BOARD).o - include config/wolfHAL/$(WOLFHAL_BOARD).mk + OBJS+=hal/wolfHAL/$(WOLFHAL_BOARD).o + include hal/wolfHAL/$(WOLFHAL_BOARD).mk endif ifeq ($(TARGET),x86_64_efi) diff --git a/config/examples/stm32wb-wolfhal.config b/config/examples/stm32wb-wolfhal.config index 6e8ba2d7fd..0d3ad0c200 100644 --- a/config/examples/stm32wb-wolfhal.config +++ b/config/examples/stm32wb-wolfhal.config @@ -10,5 +10,5 @@ NVM_FLASH_WRITEONCE=1 PKA=0 WOLFHAL_TARGET=stm32wb WOLFHAL_BOARD=stm32wb55_nucleo +WOLFHAL_FLASH_START=0x08000000 WOLFHAL_FLASH_SIZE=0x100000 -WOLFHAL_INIT_HOOKS=1 diff --git a/config/examples/stm32wb.config b/config/examples/stm32wb.config index 81baaf6930..c2e012c1bc 100644 --- a/config/examples/stm32wb.config +++ b/config/examples/stm32wb.config @@ -3,7 +3,7 @@ SIGN=ECC256 HASH=SHA256 WOLFBOOT_SECTOR_SIZE=0x1000 WOLFBOOT_PARTITION_SIZE=0x20000 -WOLFBOOT_PARTITION_BOOT_ADDRESS=0x08008000 +WOLFBOOT_PARTITION_BOOT_ADDRESS=0x08010000 WOLFBOOT_PARTITION_UPDATE_ADDRESS=0x08028000 WOLFBOOT_PARTITION_SWAP_ADDRESS=0x08048000 NVM_FLASH_WRITEONCE=1 diff --git a/config/wolfHAL/stm32wb55_nucleo.c b/config/wolfHAL/stm32wb55_nucleo.c deleted file mode 100644 index 3db7ca23ec..0000000000 --- a/config/wolfHAL/stm32wb55_nucleo.c +++ /dev/null @@ -1,101 +0,0 @@ -#include - -whal_StRcc_PeriphClk periphClkEn[] = -{ - WHAL_ST_RCC_PERIPH_GPIOA, - WHAL_ST_RCC_PERIPH_GPIOB, - WHAL_ST_RCC_PERIPH_LPUART1, - WHAL_ST_RCC_PERIPH_FLASH, -}; - -whal_Clock wbClock = { - WHAL_STM32WB55_RCC_DEVICE, - - .cfg = &(whal_StRcc_Cfg){ - .sysClkSrc = WHAL_ST_RCC_SYSCLK_SRC_PLL, - .sysClkCfg.pll = - { - .clkSrc = WHAL_ST_RCC_PLLCLK_SRC_MSI, - /* 64 MHz */ - .n = 32, - .m = 0, - .r = 1, - .q = 0, - .p = 0, - }, - .periphClkEn = periphClkEn, - .periphClkEnCount = sizeof(periphClkEn) / sizeof(whal_StRcc_PeriphClk), - }, -}; - -whal_Gpio wbGpio = { - WHAL_STM32WB55_GPIO_DEVICE, - - .pinCfg = &(whal_StGpio_Cfg[3]){ - { /* LED */ - .port = WHAL_STGPIO_PORT_B, - .pin = 5, - .mode = WHAL_STGPIO_MODE_OUT, - .outType = WHAL_STGPIO_OUTTYPE_PUSHPULL, - .speed = WHAL_STGPIO_SPEED_LOW, - .pull = WHAL_STGPIO_PULL_UP, - .altFn = 0, - }, - { /* LPUART1 TX */ - .port = WHAL_STGPIO_PORT_A, - .pin = 2, - .mode = WHAL_STGPIO_MODE_ALTFN, - .outType = WHAL_STGPIO_OUTTYPE_PUSHPULL, - .speed = WHAL_STGPIO_SPEED_FAST, - .pull = WHAL_STGPIO_PULL_UP, - .altFn = 8, - }, - { /* LPUART1 RX */ - .port = WHAL_STGPIO_PORT_A, - .pin = 3, - .mode = WHAL_STGPIO_MODE_ALTFN, - .outType = WHAL_STGPIO_OUTTYPE_PUSHPULL, - .speed = WHAL_STGPIO_SPEED_FAST, - .pull = WHAL_STGPIO_PULL_UP, - .altFn = 8, - }, - }, - .pinCount = 3, -}; - -whal_Uart wbUart = { - WHAL_STM32WB55_LPUART1_DEVICE, - - .cfg = &(whal_StUart_Cfg){ - .baud = 115200, - .sysClk = &wbClock, - }, -}; - -whal_Flash wbFlash = { - WHAL_STM32WB55_FLASH_DEVICE, - - .cfg = &(whal_StFlash_Cfg) { - .startAddr = 0x08000000, - .size = 0x100000, - }, -}; - -void hal_pre_init() -{ - /* The flash read latency needs to be set prior to - * calling whal_Clock_Enable in hal_init() */ - - whal_StFlash_SetLatencyArgs wbFlashLatency = { - .latency = WHAL_ST_FLASH_LATENCY_3 - }; - whal_Flash_Cmd(&wbFlash, WHAL_ST_FLASH_CMD_SET_LATENCY, &wbFlashLatency); -} - -void hal_post_prepare_boot() -{ - whal_StFlash_SetLatencyArgs wbFlashLatency = { - .latency = WHAL_ST_FLASH_LATENCY_0 - }; - whal_Flash_Cmd(&wbFlash, WHAL_ST_FLASH_CMD_SET_LATENCY, &wbFlashLatency); -} diff --git a/config/wolfHAL/stm32wb55_nucleo.mk b/config/wolfHAL/stm32wb55_nucleo.mk deleted file mode 100644 index 9c64d23602..0000000000 --- a/config/wolfHAL/stm32wb55_nucleo.mk +++ /dev/null @@ -1,25 +0,0 @@ -OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/reg.o - -OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/clock.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/uart/uart.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/gpio.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/flash/flash.o - - -OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/st_rcc.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/uart/st_uart.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/st_gpio.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/flash/st_flash.o - -APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/reg.o - -APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/clock.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/uart/uart.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/gpio.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/flash/flash.o - - -APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/st_rcc.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/uart/st_uart.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/st_gpio.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/flash/st_flash.o diff --git a/hal/stm32wb.c b/hal/stm32wb.c index aae1184108..8f7f74b9e5 100644 --- a/hal/stm32wb.c +++ b/hal/stm32wb.c @@ -359,3 +359,5 @@ uint32_t HAL_GetTick(void) } #endif + +#endif diff --git a/hal/uart/uart_drv_wolfhal.c b/hal/uart/uart_drv_wolfhal.c index ca85eded9b..2a46538eeb 100644 --- a/hal/uart/uart_drv_wolfhal.c +++ b/hal/uart/uart_drv_wolfhal.c @@ -1,10 +1,6 @@ -/* uart_drv_stm32wb.c +/* uart_drv_wolfhal.c * - * Driver for the back-end of the UART_FLASH module. - * - * Example implementation for stm32WB, using UART1. - * - * Pinout: RX=PB7, TX=PB6 (VCOM port UART1 -> STLINK USB) + * A generic UART driver using the wolfHAL API module. * * Copyright (C) 2025 wolfSSL Inc. * @@ -34,14 +30,22 @@ extern whal_Uart wbUart; int uart_tx(const uint8_t c) { - whal_Uart_Send(&wbUart, &c, 1); + whal_Error err; + err = whal_Uart_Send(&wbUart, &c, 1); + if (err) { + return err; + } return 1; } int uart_rx(uint8_t *c) { - whal_Uart_Recv(&wbUart, c, 1); + whal_Error err; /* ALEX NOTE: this function also returns zero if no data is available... */ + err = whal_Uart_Recv(&wbUart, c, 1); + if (err) { + return err; + } return 1; } @@ -56,7 +60,7 @@ int uart_init(uint32_t bitrate, uint8_t data, char parity, uint8_t stop) whal_Error err; err = whal_Uart_Init(&wbUart); if (err) { - return 1; + return err; } return 0; diff --git a/hal/wolfHAL/stm32wb55_nucleo.c b/hal/wolfHAL/stm32wb55_nucleo.c new file mode 100644 index 0000000000..ee98aa4e4e --- /dev/null +++ b/hal/wolfHAL/stm32wb55_nucleo.c @@ -0,0 +1,107 @@ +#include + +/* + * STM32WB55 Nucleo board configuration for wolfHAL. + * + * This file wires up the board-level clock, flash, GPIO, and optional UART + * instances used by wolfBoot. Most values are board defaults; override with + * build-time defines (e.g., DEBUG_UART/UART_FLASH) as needed. + */ + +whal_Clock wbClockController; +whal_Flash wbFlash; + +/* Core clock controller (MSI -> PLL -> SYSCLK at 64 MHz). */ +whal_Clock wbClockController = { + WHAL_STM32WB55_RCC_PLL_DEVICE, + + .cfg = &(whal_StRcc_Cfg) { + .flash = &wbFlash, + .flashLatency = WHAL_ST_FLASH_LATENCY_3, + + .sysClkSrc = WHAL_ST_RCC_SYSCLK_SRC_PLL, + .sysClkCfg = &(whal_StRcc_PllClkCfg) + { + .clkSrc = WHAL_ST_RCC_PLLCLK_SRC_MSI, + /* 64 MHz */ + .n = 32, + .m = 0, + .r = 1, + .q = 0, + .p = 0, + }, + }, +}; + +/* Internal flash mapping used by wolfBoot. */ +whal_Flash wbFlash = { + WHAL_STM32WB55_FLASH_DEVICE, + + .cfg = &(whal_StFlash_Cfg) { + .clkCtrl = &wbClockController, + .clk = &(whal_StRcc_Clk){WHAL_STM32WB55_FLASH_CLOCK}, + + .startAddr = 0x08000000, + .size = 0x100000, + }, +}; + +/* GPIO pin configuration: LED on PB5 and optional UART1 pins. */ +whal_StGpio_PinCfg pinCfg[] = { + { /* LED */ + .port = WHAL_STGPIO_PORT_B, + .pin = 5, + .mode = WHAL_STGPIO_MODE_OUT, + .outType = WHAL_STGPIO_OUTTYPE_PUSHPULL, + .speed = WHAL_STGPIO_SPEED_LOW, + .pull = WHAL_STGPIO_PULL_UP, + .altFn = 0, + }, +#if defined(DEBUG_UART) || defined(UART_FLASH) + { /* UART1 TX */ + .port = WHAL_STGPIO_PORT_B, + .pin = 6, + .mode = WHAL_STGPIO_MODE_ALTFN, + .outType = WHAL_STGPIO_OUTTYPE_PUSHPULL, + .speed = WHAL_STGPIO_SPEED_FAST, + .pull = WHAL_STGPIO_PULL_UP, + .altFn = 7, + }, + { /* UART1 RX */ + .port = WHAL_STGPIO_PORT_B, + .pin = 7, + .mode = WHAL_STGPIO_MODE_ALTFN, + .outType = WHAL_STGPIO_OUTTYPE_PUSHPULL, + .speed = WHAL_STGPIO_SPEED_FAST, + .pull = WHAL_STGPIO_PULL_UP, + .altFn = 7, + }, +#endif /* DEBUG_UART || UART_FLASH */ +}; + +/* GPIO controller for configured pins. */ +whal_Gpio wbGpio = { + WHAL_STM32WB55_GPIO_DEVICE, + + .cfg = &(whal_StGpio_Cfg) { + .clkCtrl = &wbClockController, + .clk = &(whal_StRcc_Clk) {WHAL_STM32WB55_GPIOB_CLOCK}, + + .pinCfg = pinCfg, + .pinCount = sizeof(pinCfg) / sizeof(whal_StGpio_PinCfg), + }, +}; + +#if defined(DEBUG_UART) || defined(UART_FLASH) +/* UART1 configuration for debug/flash operations. */ +whal_Uart wbUart = { + WHAL_STM32WB55_UART1_DEVICE, + + .cfg = &(whal_StUart_Cfg){ + .clkCtrl = &wbClockController, + .clk = &(whal_StRcc_Clk) {WHAL_STM32WB55_UART1_CLOCK}, + + .baud = 115200, + }, +}; +#endif /* DEBUG_UART || UART_FLASH */ diff --git a/hal/wolfHAL/stm32wb55_nucleo.mk b/hal/wolfHAL/stm32wb55_nucleo.mk new file mode 100644 index 0000000000..ecd959bd8a --- /dev/null +++ b/hal/wolfHAL/stm32wb55_nucleo.mk @@ -0,0 +1,21 @@ +CFLAGS += -DWHAL_CFG_NO_CALLBACKS=1 + +OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/reg.o + +OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/st_rcc.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/st_gpio.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/flash/st_flash.o + +ifeq ($(DEBUG_UART),1) + OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/uart/st_uart.o +endif + +APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/reg.o + +APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/st_rcc.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/st_gpio.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/flash/st_flash.o + +ifeq ($(DEBUG_UART),1) + APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/uart/st_uart.o +endif diff --git a/hal/wolfhal.c b/hal/wolfhal.c index 82ca2a178a..256d6e8882 100644 --- a/hal/wolfhal.c +++ b/hal/wolfhal.c @@ -23,67 +23,50 @@ #include #include "image.h" -extern whal_Clock wbClock; +extern whal_Clock wbClockController; extern whal_Gpio wbGpio; -extern whal_Uart wbUart; extern whal_Flash wbFlash; +#if defined(DEBUG_UART) || defined(UART_FLASH) +extern whal_Uart wbUart; +#endif /* DEBUG_UART || UART_FLASH */ -#ifdef WOLFHAL_INIT_HOOKS -extern void hal_pre_init(); -extern void hal_post_prepare_boot(); -#endif /* WOLFHAL_INIT_HOOKS */ - -void RAMFUNCTION hal_flash_unlock(void) -{ - whal_Flash_Unlock(&wbFlash, - 0, WOLFHAL_FLASH_SIZE); -} - -void RAMFUNCTION hal_flash_lock(void) -{ - whal_Flash_Lock(&wbFlash, - 0, WOLFHAL_FLASH_SIZE); -} - -int RAMFUNCTION hal_flash_write(uint32_t address, const uint8_t *data, int len) +void hal_init(void) { - whal_Flash_Write(&wbFlash, address, data, len); - return 0; -} + whal_Error err; -int RAMFUNCTION hal_flash_erase(uint32_t address, int len) -{ - if (len == 0) - return -1; + err = whal_Clock_Init(&wbClockController); + if (err) { + return; + } - whal_Flash_Erase(&wbFlash, address, len); - return 0; -} + err = whal_Gpio_Init(&wbGpio); + if (err) { + return; + } -void hal_init(void) -{ -#ifdef WOLFHAL_INIT_HOOKS - hal_pre_init(); -#endif /* WOLFHAL_INIT_HOOKS */ + err = whal_Flash_Init(&wbFlash); + if (err) { + return; + } - whal_Clock_Init(&wbClock); - whal_Clock_Enable(&wbClock); +#if defined(DEBUG_UART) || defined(UART_FLASH) + err = whal_Uart_Init(&wbUart); + if (err) { + return; + } +#endif /* DEBUG_UART || UART_FLASH */ - whal_Gpio_Init(&wbGpio); - whal_Uart_Init(&wbUart); - whal_Flash_Init(&wbFlash); } void hal_prepare_boot(void) { - whal_Flash_Deinit(&wbFlash); +#if defined(DEBUG_UART) || defined(UART_FLASH) whal_Uart_Deinit(&wbUart); - whal_Gpio_Deinit(&wbGpio); +#endif /* DEBUG_UART || UART_FLASH */ - whal_Clock_Disable(&wbClock); - whal_Clock_Deinit(&wbClock); + whal_Flash_Deinit(&wbFlash); + + whal_Gpio_Deinit(&wbGpio); -#ifdef WOLFHAL_INIT_HOOKS - hal_post_prepare_boot(); -#endif /* WOLFHAL_INIT_HOOKS */ + whal_Clock_Deinit(&wbClockController); } diff --git a/include/hal.h b/include/hal.h index 1804e05465..f746f0d147 100644 --- a/include/hal.h +++ b/include/hal.h @@ -31,6 +31,17 @@ extern "C" { #include "target.h" #include +#ifdef TARGET_wolfhal +#include +extern whal_Clock wbClockController; +extern whal_Flash wbFlash; +extern whal_Flash wbFlash; +extern whal_Gpio wbGpio; +#if defined(DEBUG_UART) || defined(UART_FLASH) +extern whal_Uart wbUart; +#endif /* DEBUG_UART || UART_FLASH */ +#endif + /* Architecture specific calls */ #ifdef MMU extern void do_boot(const uint32_t *app_offset, const uint32_t* dts_offset); @@ -62,13 +73,23 @@ uint64_t hal_get_timer_us(void); typedef uintptr_t haladdr_t; /* 64-bit platforms */ int hal_flash_write(uintptr_t address, const uint8_t *data, int len); int hal_flash_erase(uintptr_t address, int len); +#elif TARGET_wolfhal + #define hal_flash_write(address, data, len) whal_Flash_Write(&wbFlash, address, data, len) + #define hal_flash_erase(address, len) whal_Flash_Erase(&wbFlash, address, len) #else typedef uint32_t haladdr_t; /* original 32-bit */ int hal_flash_write(uint32_t address, const uint8_t *data, int len); int hal_flash_erase(uint32_t address, int len); #endif + +#ifdef TARGET_wolfhal + #define hal_flash_unlock() whal_Flash_Unlock(&wbFlash, WOLFHAL_FLASH_START, WOLFHAL_FLASH_SIZE) + #define hal_flash_lock() whal_Flash_Lock(&wbFlash, WOLFHAL_FLASH_START, WOLFHAL_FLASH_SIZE) +#else void hal_flash_unlock(void); void hal_flash_lock(void); +#endif + void hal_prepare_boot(void); #ifdef DUALBANK_SWAP diff --git a/lib/wolfHAL b/lib/wolfHAL index 6a463b2f06..9324a5a0a9 160000 --- a/lib/wolfHAL +++ b/lib/wolfHAL @@ -1 +1 @@ -Subproject commit 6a463b2f06b13edebb5920b18893b6bd3fc9be43 +Subproject commit 9324a5a0a90af6391981fab43e1813c8ef7f1695 diff --git a/options.mk b/options.mk index 1e9c713cd0..d59d49f20e 100644 --- a/options.mk +++ b/options.mk @@ -1146,10 +1146,10 @@ ifeq ($(TZEN),1) CFLAGS+=-DTZEN endif -ifneq ($(WOLFHAL_FLASH_SIZE),) - CFLAGS+=-DWOLFHAL_FLASH_SIZE=$(WOLFHAL_FLASH_SIZE) +ifneq ($(WOLFHAL_FLASH_START),) + CFLAGS+=-DWOLFHAL_FLASH_START=$(WOLFHAL_FLASH_START) endif -ifeq ($(WOLFHAL_INIT_HOOKS),1) - CFLAGS+=-DWOLFHAL_INIT_HOOKS=$(WOLFHAL_INIT_HOOKS) +ifneq ($(WOLFHAL_FLASH_SIZE),) + CFLAGS+=-DWOLFHAL_FLASH_SIZE=$(WOLFHAL_FLASH_SIZE) endif diff --git a/test-app/Makefile b/test-app/Makefile index bef588b1d8..82829ac5c0 100644 --- a/test-app/Makefile +++ b/test-app/Makefile @@ -67,8 +67,8 @@ endif ifeq ($(TARGET),wolfhal) WOLFBOOT_LIB_WOLFHAL?=../lib/wolfHAL CFLAGS += -I$(WOLFBOOT_LIB_WOLFHAL) - APP_OBJS += ../config/wolfHAL/$(WOLFHAL_BOARD).o - include ../config/wolfHAL/$(WOLFHAL_BOARD).mk + APP_OBJS += ../hal/wolfHAL/$(WOLFHAL_BOARD).o + include ../hal/wolfHAL/$(WOLFHAL_BOARD).mk endif include ../arch.mk diff --git a/test-app/app_wolfhal.c b/test-app/app_wolfhal.c index e8b932f39e..a299b9127d 100644 --- a/test-app/app_wolfhal.c +++ b/test-app/app_wolfhal.c @@ -36,8 +36,10 @@ extern whal_Clock wbClock; extern whal_Gpio wbGpio; -extern whal_Uart wbUart; extern whal_Flash wbFlash; +#if defined(DEBUG_UART) || defined(UART_FLASH) +extern whal_Uart wbUart; +#endif /* DEBUG_UART || UART_FLASH */ /* Matches all keys: * - chacha (32 + 12) @@ -61,8 +63,10 @@ void main(void) { version = wolfBoot_current_firmware_version(); updv = wolfBoot_update_firmware_version(); +#if defined(DEBUG_UART) || defined(UART_FLASH) whal_Uart_Send(&wbUart, "*", 1); whal_Uart_Send(&wbUart, (uint8_t *)&version, 4); +#endif /* DEBUG_UART || UART_FLASH */ if ((version == 1) && (updv != 8)) { uint32_t sz; @@ -80,4 +84,4 @@ void main(void) { while(1) asm volatile("wfi"); } -#endif /** PLATFROM_stm32wb **/ +#endif /** PLATFROM_wolfhal **/ From 9ede28650bc48ee3d1d7d76f86b69f97dead3a6a Mon Sep 17 00:00:00 2001 From: Alex Lanzano Date: Sun, 1 Feb 2026 21:34:00 -0500 Subject: [PATCH 3/4] Update wolfHAL driver name. Add option to not compile in wolfhal gpio --- config/examples/stm32wb-wolfhal.config | 1 + hal/wolfHAL/stm32wb55_nucleo.c | 59 ++++++++++++++------------ hal/wolfHAL/stm32wb55_nucleo.mk | 20 +++++---- hal/wolfhal.c | 6 +++ lib/wolfHAL | 2 +- options.mk | 4 ++ test-app/app_wolfhal.c | 8 ++++ 7 files changed, 63 insertions(+), 37 deletions(-) diff --git a/config/examples/stm32wb-wolfhal.config b/config/examples/stm32wb-wolfhal.config index 0d3ad0c200..0307f97a31 100644 --- a/config/examples/stm32wb-wolfhal.config +++ b/config/examples/stm32wb-wolfhal.config @@ -12,3 +12,4 @@ WOLFHAL_TARGET=stm32wb WOLFHAL_BOARD=stm32wb55_nucleo WOLFHAL_FLASH_START=0x08000000 WOLFHAL_FLASH_SIZE=0x100000 +WOLFHAL_NO_GPIO=1 diff --git a/hal/wolfHAL/stm32wb55_nucleo.c b/hal/wolfHAL/stm32wb55_nucleo.c index ee98aa4e4e..ea93d61841 100644 --- a/hal/wolfHAL/stm32wb55_nucleo.c +++ b/hal/wolfHAL/stm32wb55_nucleo.c @@ -11,18 +11,19 @@ whal_Clock wbClockController; whal_Flash wbFlash; + /* Core clock controller (MSI -> PLL -> SYSCLK at 64 MHz). */ whal_Clock wbClockController = { WHAL_STM32WB55_RCC_PLL_DEVICE, - .cfg = &(whal_StRcc_Cfg) { + .cfg = &(whal_Stm32wbRcc_Cfg) { .flash = &wbFlash, - .flashLatency = WHAL_ST_FLASH_LATENCY_3, + .flashLatency = WHAL_STM32WB_FLASH_LATENCY_3, - .sysClkSrc = WHAL_ST_RCC_SYSCLK_SRC_PLL, - .sysClkCfg = &(whal_StRcc_PllClkCfg) + .sysClkSrc = WHAL_STM32WB_RCC_SYSCLK_SRC_PLL, + .sysClkCfg = &(whal_Stm32wbRcc_PllClkCfg) { - .clkSrc = WHAL_ST_RCC_PLLCLK_SRC_MSI, + .clkSrc = WHAL_STM32WB_RCC_PLLCLK_SRC_MSI, /* 64 MHz */ .n = 32, .m = 0, @@ -37,43 +38,44 @@ whal_Clock wbClockController = { whal_Flash wbFlash = { WHAL_STM32WB55_FLASH_DEVICE, - .cfg = &(whal_StFlash_Cfg) { + .cfg = &(whal_Stm32wbFlash_Cfg) { .clkCtrl = &wbClockController, - .clk = &(whal_StRcc_Clk){WHAL_STM32WB55_FLASH_CLOCK}, + .clk = &(whal_Stm32wbRcc_Clk){WHAL_STM32WB55_FLASH_CLOCK}, .startAddr = 0x08000000, .size = 0x100000, }, }; +#ifndef WOLFHAL_NO_GPIO /* GPIO pin configuration: LED on PB5 and optional UART1 pins. */ -whal_StGpio_PinCfg pinCfg[] = { +whal_Stm32wbGpio_PinCfg pinCfg[] = { { /* LED */ - .port = WHAL_STGPIO_PORT_B, + .port = WHAL_STM32WB_GPIO_PORT_B, .pin = 5, - .mode = WHAL_STGPIO_MODE_OUT, - .outType = WHAL_STGPIO_OUTTYPE_PUSHPULL, - .speed = WHAL_STGPIO_SPEED_LOW, - .pull = WHAL_STGPIO_PULL_UP, + .mode = WHAL_STM32WB_GPIO_MODE_OUT, + .outType = WHAL_STM32WB_GPIO_OUTTYPE_PUSHPULL, + .speed = WHAL_STM32WB_GPIO_SPEED_LOW, + .pull = WHAL_STM32WB_GPIO_PULL_UP, .altFn = 0, }, #if defined(DEBUG_UART) || defined(UART_FLASH) { /* UART1 TX */ - .port = WHAL_STGPIO_PORT_B, + .port = WHAL_STM32WB_GPIO_PORT_B, .pin = 6, - .mode = WHAL_STGPIO_MODE_ALTFN, - .outType = WHAL_STGPIO_OUTTYPE_PUSHPULL, - .speed = WHAL_STGPIO_SPEED_FAST, - .pull = WHAL_STGPIO_PULL_UP, + .mode = WHAL_STM32WB_GPIO_MODE_ALTFN, + .outType = WHAL_STM32WB_GPIO_OUTTYPE_PUSHPULL, + .speed = WHAL_STM32WB_GPIO_SPEED_FAST, + .pull = WHAL_STM32WB_GPIO_PULL_UP, .altFn = 7, }, { /* UART1 RX */ - .port = WHAL_STGPIO_PORT_B, + .port = WHAL_STM32WB_GPIO_PORT_B, .pin = 7, - .mode = WHAL_STGPIO_MODE_ALTFN, - .outType = WHAL_STGPIO_OUTTYPE_PUSHPULL, - .speed = WHAL_STGPIO_SPEED_FAST, - .pull = WHAL_STGPIO_PULL_UP, + .mode = WHAL_STM32WB_GPIO_MODE_ALTFN, + .outType = WHAL_STM32WB_GPIO_OUTTYPE_PUSHPULL, + .speed = WHAL_STM32WB_GPIO_SPEED_FAST, + .pull = WHAL_STM32WB_GPIO_PULL_UP, .altFn = 7, }, #endif /* DEBUG_UART || UART_FLASH */ @@ -83,23 +85,24 @@ whal_StGpio_PinCfg pinCfg[] = { whal_Gpio wbGpio = { WHAL_STM32WB55_GPIO_DEVICE, - .cfg = &(whal_StGpio_Cfg) { + .cfg = &(whal_Stm32wbGpio_Cfg) { .clkCtrl = &wbClockController, - .clk = &(whal_StRcc_Clk) {WHAL_STM32WB55_GPIOB_CLOCK}, + .clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_GPIOB_CLOCK}, .pinCfg = pinCfg, - .pinCount = sizeof(pinCfg) / sizeof(whal_StGpio_PinCfg), + .pinCount = sizeof(pinCfg) / sizeof(whal_Stm32wbGpio_PinCfg), }, }; +#endif #if defined(DEBUG_UART) || defined(UART_FLASH) /* UART1 configuration for debug/flash operations. */ whal_Uart wbUart = { WHAL_STM32WB55_UART1_DEVICE, - .cfg = &(whal_StUart_Cfg){ + .cfg = &(whal_Stm32wbUart_Cfg){ .clkCtrl = &wbClockController, - .clk = &(whal_StRcc_Clk) {WHAL_STM32WB55_UART1_CLOCK}, + .clk = &(whal_Stm32wbRcc_Clk) {WHAL_STM32WB55_UART1_CLOCK}, .baud = 115200, }, diff --git a/hal/wolfHAL/stm32wb55_nucleo.mk b/hal/wolfHAL/stm32wb55_nucleo.mk index ecd959bd8a..b26337a850 100644 --- a/hal/wolfHAL/stm32wb55_nucleo.mk +++ b/hal/wolfHAL/stm32wb55_nucleo.mk @@ -2,20 +2,24 @@ CFLAGS += -DWHAL_CFG_NO_CALLBACKS=1 OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/reg.o -OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/st_rcc.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/st_gpio.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/flash/st_flash.o +OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/stm32wb_rcc.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/flash/stm32wb_flash.o ifeq ($(DEBUG_UART),1) - OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/uart/st_uart.o endif APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/reg.o -APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/st_rcc.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/st_gpio.o \ - $(WOLFBOOT_LIB_WOLFHAL)/src/flash/st_flash.o +APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/clock/stm32wb_rcc.o \ + $(WOLFBOOT_LIB_WOLFHAL)/src/flash/stm32wb_flash.o + + +ifeq ($(WOLFHAL_NO_GPIO),) + OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/stm32wb_gpio.o + APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/gpio/stm32wb_gpio.o +endif ifeq ($(DEBUG_UART),1) - APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/uart/st_uart.o + OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/uart/stm32wb_uart.o + APP_OBJS += $(WOLFBOOT_LIB_WOLFHAL)/src/uart/stm32wb_uart.o endif diff --git a/hal/wolfhal.c b/hal/wolfhal.c index 256d6e8882..4e90354837 100644 --- a/hal/wolfhal.c +++ b/hal/wolfhal.c @@ -24,7 +24,9 @@ #include "image.h" extern whal_Clock wbClockController; +#ifndef WOLFHAL_NO_GPIO extern whal_Gpio wbGpio; +#endif extern whal_Flash wbFlash; #if defined(DEBUG_UART) || defined(UART_FLASH) extern whal_Uart wbUart; @@ -39,10 +41,12 @@ void hal_init(void) return; } +#ifndef WOLFHAL_NO_GPIO err = whal_Gpio_Init(&wbGpio); if (err) { return; } +#endif err = whal_Flash_Init(&wbFlash); if (err) { @@ -66,7 +70,9 @@ void hal_prepare_boot(void) whal_Flash_Deinit(&wbFlash); +#ifndef WOLFHAL_NO_GPIO whal_Gpio_Deinit(&wbGpio); +#endif whal_Clock_Deinit(&wbClockController); } diff --git a/lib/wolfHAL b/lib/wolfHAL index 9324a5a0a9..76f4822837 160000 --- a/lib/wolfHAL +++ b/lib/wolfHAL @@ -1 +1 @@ -Subproject commit 9324a5a0a90af6391981fab43e1813c8ef7f1695 +Subproject commit 76f48228379465113fac6a90a31affb311849752 diff --git a/options.mk b/options.mk index d59d49f20e..ece18cb0ea 100644 --- a/options.mk +++ b/options.mk @@ -1153,3 +1153,7 @@ endif ifneq ($(WOLFHAL_FLASH_SIZE),) CFLAGS+=-DWOLFHAL_FLASH_SIZE=$(WOLFHAL_FLASH_SIZE) endif + +ifneq ($(WOLFHAL_NO_GPIO),) + CFLAGS+=-DWOLFHAL_NO_GPIO=$(WOLFHAL_NO_GPIO) +endif diff --git a/test-app/app_wolfhal.c b/test-app/app_wolfhal.c index a299b9127d..af7a1ea0b0 100644 --- a/test-app/app_wolfhal.c +++ b/test-app/app_wolfhal.c @@ -35,7 +35,9 @@ #define BOOT_LED_PIN 0 extern whal_Clock wbClock; +#ifndef WOLFHAL_NO_GPIO extern whal_Gpio wbGpio; +#endif extern whal_Flash wbFlash; #if defined(DEBUG_UART) || defined(UART_FLASH) extern whal_Uart wbUart; @@ -58,7 +60,9 @@ void main(void) { hal_init(); +#ifndef WOLFHAL_NO_GPIO whal_Gpio_Set(&wbGpio, BOOT_LED_PIN, 1); +#endif version = wolfBoot_current_firmware_version(); updv = wolfBoot_update_firmware_version(); @@ -70,12 +74,16 @@ void main(void) { if ((version == 1) && (updv != 8)) { uint32_t sz; +#ifndef WOLFHAL_NO_GPIO whal_Gpio_Set(&wbGpio, BOOT_LED_PIN, 0); +#endif #if EXT_ENCRYPTED wolfBoot_set_encrypt_key((uint8_t *)enc_key,(uint8_t *)(enc_key + 32)); #endif wolfBoot_update_trigger(); +#ifndef WOLFHAL_NO_GPIO whal_Gpio_Set(&wbGpio, BOOT_LED_PIN, 1); +#endif } else { if (version != 7) wolfBoot_success(); From 54cdcf8ec0a2d59b70e7d967ad647db69a52365a Mon Sep 17 00:00:00 2001 From: Alex Lanzano Date: Sun, 1 Feb 2026 21:39:29 -0500 Subject: [PATCH 4/4] Add build test --- .github/workflows/test-configs.yml | 6 ++++++ hal/stm32wb.c | 2 -- hal/uart/uart_drv_wolfhal.c | 1 - hal/wolfHAL/stm32wb55_nucleo.c | 1 - 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test-configs.yml b/.github/workflows/test-configs.yml index d173cdec91..7b70330050 100644 --- a/.github/workflows/test-configs.yml +++ b/.github/workflows/test-configs.yml @@ -546,6 +546,12 @@ jobs: arch: arm config-file: ./config/examples/stm32wb.config + stm32wb_wolfhal_test: + uses: ./.github/workflows/test-build.yml + with: + arch: arm + config-file: ./config/examples/stm32wb-wolfhal.config + # TODO: ti-tms570lc435.config requires F021 Flash API (Windows installer only) # ti_tms570lc435_test: # uses: ./.github/workflows/test-build-ti-hercules.yml diff --git a/hal/stm32wb.c b/hal/stm32wb.c index 8f7f74b9e5..aae1184108 100644 --- a/hal/stm32wb.c +++ b/hal/stm32wb.c @@ -359,5 +359,3 @@ uint32_t HAL_GetTick(void) } #endif - -#endif diff --git a/hal/uart/uart_drv_wolfhal.c b/hal/uart/uart_drv_wolfhal.c index 2a46538eeb..17a5bfbf39 100644 --- a/hal/uart/uart_drv_wolfhal.c +++ b/hal/uart/uart_drv_wolfhal.c @@ -41,7 +41,6 @@ int uart_tx(const uint8_t c) int uart_rx(uint8_t *c) { whal_Error err; - /* ALEX NOTE: this function also returns zero if no data is available... */ err = whal_Uart_Recv(&wbUart, c, 1); if (err) { return err; diff --git a/hal/wolfHAL/stm32wb55_nucleo.c b/hal/wolfHAL/stm32wb55_nucleo.c index ea93d61841..4546cbcadd 100644 --- a/hal/wolfHAL/stm32wb55_nucleo.c +++ b/hal/wolfHAL/stm32wb55_nucleo.c @@ -11,7 +11,6 @@ whal_Clock wbClockController; whal_Flash wbFlash; - /* Core clock controller (MSI -> PLL -> SYSCLK at 64 MHz). */ whal_Clock wbClockController = { WHAL_STM32WB55_RCC_PLL_DEVICE,