Skip to content

[RFC] Integrate wolfHAL#674

Open
AlexLanzano wants to merge 4 commits intowolfSSL:masterfrom
AlexLanzano:wolfHAL-integration
Open

[RFC] Integrate wolfHAL#674
AlexLanzano wants to merge 4 commits intowolfSSL:masterfrom
AlexLanzano:wolfHAL-integration

Conversation

@AlexLanzano
Copy link
Member

I hacked together this quick wolfHAL integration using the current implementation of wolfHAL that I already worked on.

This PR is more-so meant for discussion/buy-in on how wolfHAL should be used within wolfBoot rather than getting this PR merged in.

Here's an overview of what I did:

  • Modify Makefiles to support new wolfhal TARGET
  • Add example config stm32wb-wolfhal.config
  • Add new wolfHAL config directory ./config/wolfHAL/
    • Contains board config .c file
    • Contains wolfHAL build config .mk file
  • Add generic wolfhal.c that provides the wolfBoot hal_* api functions using wolfHAL
  • Add generic uart_drv_wolfhal.c that provides the wolfBoot uart_* api functions using wolfHAL
  • Add generic app_wolfhal.c that provides a test app using wolfHAL

I've tested this on the stm32wb nucleo board and I'm able to boot fully into the target app

Here is the wolfHAL repo I used to build this https://github.com/AlexLanzano/wolfHAL/tree/wolfboot-integration
As you can see the design is unchanged from what I presented in the meeting. SInce I had the stm32wb drivers already done in this design I figured it would be best to just give the integration a shot and have you guys point out the specific parts you dont like

Copy link
Member

@danielinux danielinux left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • some errors must be propagated better
  • UART drivers inclusion in bootloader should depend on whether UART is enabled in the config (default: off)
  • No tests: at least one build test is needed, but at this stage it would also be useful to have a comparison of the footprint for the extra added layer. Please check footprint test, build on the same target/compiler with wolfHAL and compare footprints
  • wrong submodule URL: it should be https://github.com/wolfssl/wolfhal, not git@github.com ...

@@ -0,0 +1,101 @@
#include <wolfHAL/platform/st/stm32wb55xx.h>

whal_StRcc_PeriphClk periphClkEn[] =
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These can't be static since they are externed in both hal/wolfhal.c and the test app

WHAL_ST_RCC_PERIPH_FLASH,
};

whal_Clock wbClock = {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These can't be static since they are externed in both hal/wolfhal.c and the test app

},
};

whal_Gpio wbGpio = {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These can't be static since they are externed in both hal/wolfhal.c and the test app

.pinCount = 3,
};

whal_Uart wbUart = {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These can't be static since they are externed in both hal/wolfhal.c and the test app

},
};

whal_Flash wbFlash = {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These can't be static since they are externed in both hal/wolfhal.c and the test app

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

inclusion of st_uart.o should be conditional to config (default is no uart enabled in bootloader)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

int uart_rx(uint8_t *c)
{
whal_Uart_Recv(&wbUart, c, 1);
/* ALEX NOTE: this function also returns zero if no data is available... */
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a better handling of whal_ return values is required

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

@AlexLanzano AlexLanzano force-pushed the wolfHAL-integration branch 2 times, most recently from 0743918 to 54cdcf8 Compare February 2, 2026 16:02
Copy link
Contributor

@rizlik rizlik left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just a partial review, I need to dig into the wolfHAL design yet.

Comment on lines +11 to +15
WOLFHAL_TARGET=stm32wb
WOLFHAL_BOARD=stm32wb55_nucleo
WOLFHAL_FLASH_START=0x08000000
WOLFHAL_FLASH_SIZE=0x100000
WOLFHAL_NO_GPIO=1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure that WOLFHAL configuration must lives in the same configuration of wolfBoot. I would like to have a better separation. I'm not sure how to drive the wolfBoot toolchain though, probably there is the need of some integration in arch.mk and similar

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are technically wolfBoot configuration options for the wolfBoot wolfHAL target. Maybe we need better naming for these?

WOLFBOOT_SECTOR_SIZE=0x1000
WOLFBOOT_PARTITION_SIZE=0x20000
WOLFBOOT_PARTITION_BOOT_ADDRESS=0x08008000
WOLFBOOT_PARTITION_BOOT_ADDRESS=0x08010000
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this unrelated to wolfHAL?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will remove. This was to have enough room for debug symbols.

#include <stdint.h>
#include <wolfHAL/wolfHAL.h>

extern whal_Uart wbUart;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NIT: if we really have an "magical" external whal_Uart, maybe we can either make it implicit or, better imo, add a whal_Uart whal_Uart_Get_Port(uint32_t id) or similar.
In general while I think the library must support compile time configuration and object, it might be nice to give a little flexibility so that can be used also in context where you want to dynamically create objects or configure the objects differently.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Im hesitant to add Get functions like whal_Uart_GetPort since that would increase image size.

Maybe I could name the externed variables better to make it more explicit of what they are?
I.E. g_whalUart or g_boardUart?

Comment on lines +8 to +9
ifeq ($(DEBUG_UART),1)
endif
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

empty?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants