Skip to content

Add generic wolfHAL Ethernet port with STM32H563ZI Nucleo board support - #97

Merged
dgarske merged 2 commits into
wolfSSL:masterfrom
AlexLanzano:wolfHAL-integration
Aug 4, 2026
Merged

Add generic wolfHAL Ethernet port with STM32H563ZI Nucleo board support#97
dgarske merged 2 commits into
wolfSSL:masterfrom
AlexLanzano:wolfHAL-integration

Conversation

@AlexLanzano

@AlexLanzanoAlexLanzano commented Apr 7, 2026

Copy link
Copy Markdown
Member

Summary

  • Add a generic wolfIP port that bridges to wolfHAL's whal_Eth / whal_EthPhy API — any board with a wolfHAL Ethernet driver can use wolfIP with no platform-specific port code
  • Include STM32H563ZI Nucleo-144 as the first reference board (boards/stm32h563zi_nucleo)
  • Port waits for PHY link negotiation, starts the MAC with correct speed/duplex, and wires wolfIP_ll_dev poll/send to
    whal_Eth_Recv/whal_Eth_Send

Structure

src/port/wolfHAL/
├── Makefile, main.c, wolfhal_eth.c/h # Generic (board-independent)
└── boards/stm32h563zi_nucleo/ # Board-specific: clock, GPIO, ETH, UART, linker

Adding a new board requires only a boards/<name>/ directory with board.c/h, board.mk, and bare-metal startup files. The generic main.c and wolfhal_eth.c are shared across all boards.

Build

cd src/port/wolfHAL
make BOARD=stm32h563zi_nucleo

Requires arm-none-eabi-gcc and wolfHAL cloned as a sibling directory (overridable via WOLFHAL_ROOT).

Testing

I tested this by doing a ping 192.168.1.100 on my host PC. I successfully got a responses back.

CopilotAI review requested due to automatic review settings April 7, 2026 16:01
@AlexLanzano
AlexLanzano marked this pull request as draft April 7, 2026 16:01

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds a new src/port/wolfHAL/ port intended to let wolfIP run on any target that provides wolfHAL whal_Eth / whal_EthPhy, with STM32H563ZI Nucleo-144 as the first reference board and a standalone Makefile-based bare-metal build.

Changes:

  • Introduces a generic wolfHAL-based link-layer adapter (wolfhal_eth.c/.h) that bridges wolfIP ll_dev poll/send to whal_Eth_Recv / whal_Eth_Send and starts the MAC after PHY negotiation.
  • Adds a generic bare-metal main.c for bringing up wolfIP, configuring a static IPv4 address, and starting a TCP echo server.
  • Adds a complete STM32H563ZI Nucleo board package (startup/IVT/linker/board init/syscalls + board.mk) and a port-local build system + .gitignore.

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
src/port/wolfHAL/wolfhal_eth.hPublic API/docs for the generic wolfHAL Ethernet bridge.
src/port/wolfHAL/wolfhal_eth.cImplements wolfIP ll_dev poll/send via wolfHAL and link negotiation + MAC start.
src/port/wolfHAL/main.cBare-metal reference app wiring board init + wolfIP + echo server.
src/port/wolfHAL/MakefileNew Makefile entrypoint for BOARD-based builds.
src/port/wolfHAL/.gitignoreIgnores build artifacts.
src/port/wolfHAL/boards/stm32h563zi_nucleo/board.mkToolchain flags and board + wolfHAL driver source list.
src/port/wolfHAL/boards/stm32h563zi_nucleo/board.hBoard API and exported wolfHAL device instances.
src/port/wolfHAL/boards/stm32h563zi_nucleo/board.cSTM32H563ZI init: flash latency, clocks, GPIO, ETH/PHY, SysTick timer, UART.
src/port/wolfHAL/boards/stm32h563zi_nucleo/syscalls.cNewlib stubs + wolfIP hooks (incl. RNG).
src/port/wolfHAL/boards/stm32h563zi_nucleo/startup.cMinimal reset handler (data/bss init + libc init + main).
src/port/wolfHAL/boards/stm32h563zi_nucleo/ivt.cCortex-M33 vector table.
src/port/wolfHAL/boards/stm32h563zi_nucleo/linker.ldMemory map and sections for STM32H563ZI.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadsrc/port/wolfHAL/main.c Outdated
Comment threadsrc/port/wolfHAL/boards/stm32h563zi_nucleo/syscalls.c Outdated
Comment threadsrc/port/wolfHAL/boards/stm32h563zi_nucleo/board.c Outdated
Comment threadsrc/port/wolfHAL/Makefile Outdated
Comment threadsrc/port/wolfHAL/main.c Outdated
CopilotAI review requested due to automatic review settings April 7, 2026 16:38

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 15 changed files in this pull request and generated 4 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadsrc/port/wolfHAL/boards/stm32h563zi_nucleo/board.mk Outdated
Comment threadsrc/port/wolfHAL/boards/stm32h563zi_nucleo/board.c Outdated
Comment threadsrc/port/wolfHAL/boards/stm32h563zi_nucleo/board.h
Comment threadsrc/port/wolfHAL/README.md Outdated
@AlexLanzano
AlexLanzano marked this pull request as ready for review April 7, 2026 17:20
CopilotAI review requested due to automatic review settings April 7, 2026 17:20

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 15 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadsrc/port/wolfHAL/main.c Outdated
Comment threadsrc/port/wolfHAL/boards/stm32h563zi_nucleo/board.c Outdated
Comment threadsrc/port/wolfHAL/Makefile Outdated
@AlexLanzano
AlexLanzanoforce-pushed the wolfHAL-integration branch 2 times, most recently from 9fbb31e to 878c293CompareMay 4, 2026 20:29
@dgarskedgarske removed their assignment May 4, 2026

@dgarskedgarske left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Can wolfHAL be less intrusive? Or show what an update of the existing STM32H5 wolfIP port look for the H5? Have you compare code size between the two (existing and this)? I'd almost like to see instead a proper update to a wolfHAL version of the drivers. Not src/port/wolfHAL but src/port/stm32h5 optionally using the wolfHAL to compare.

@AlexLanzano

AlexLanzano commented May 5, 2026

Copy link
Copy Markdown
MemberAuthor

Can wolfHAL be less intrusive? Or show what an update of the existing STM32H5 wolfIP port look for the H5? Have you compare code size between the two (existing and this)? I'd almost like to see instead a proper update to a wolfHAL version of the drivers. Not src/port/wolfHAL but src/port/stm32h5 optionally using the wolfHAL to compare.

@dgarske The nice thing about having this in a separate src/port/wolfHAL is that we can maintain a generic application and layer on things like FreeRTOS, MQTT, TLS client/servers without having to re-implement this in each port.

Having this generic wolfHAL port structure makes it much easier to port existing platforms in wolfHAL to wolfip. You just add a new entry in boards/ that contains all the platform specific config instead of spinning up a new src/port/ dir and then having to re-implement all the same application level code.

I can move all of this out of src/port/wolfHAL and into src/port/stm32h5 but this would lose a lot of the nice things that wolfHAL provides IMO

Also, I'll get this size comparison between the existing H5 port and the wolfHAL port soon

@AlexLanzano
AlexLanzano requested a review from dgarskeJune 3, 2026 14:49
@AlexLanzano
AlexLanzanoforce-pushed the wolfHAL-integration branch 2 times, most recently from 9009c88 to 3974801CompareJune 4, 2026 23:00
@AlexLanzanoAlexLanzano removed their assignment Jul 10, 2026
@dgarske
dgarske requested a review from aidangarskeJuly 31, 2026 17:27

@aidangarskeaidangarske left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Skoll Code Review

Scan type:securityOverall recommendation:COMMENT
Findings: 2 total — 2 posted, 0 skipped

Posted findings

  • [Medium] Unpinned wolfHAL checkout makes the CI firmware build depend on mutable upstream HEAD.github/workflows/wolfhal-stm32h563zi-nucleo.yml:1-38
  • [Medium] wolfHAL Ethernet init failure is logged but networking still startssrc/port/stm32h563/main.c:849-1453

Review generated by Skoll

@aidangarskeaidangarske left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Skoll Code Review

Scan type:review-securityOverall recommendation:COMMENT
Findings: 6 total — 6 posted, 0 skipped
6 finding(s) posted as inline comments (see file-level comments below)

Posted findings

  • [Medium] wolfHAL syscalls omit wall-clock hooks required by TLSsrc/port/stm32h563/boards/stm32h563zi_nucleo/syscalls.c:23-121
  • [Medium] 32-bit tick wraps while wolfIP expects a monotonic 64-bit clocksrc/port/stm32h563/main.c:1095-1098
  • [Medium] wolfHAL backend conflicts with the existing DOT1X SysTick handlersrc/port/stm32h563/boards/stm32h563zi_nucleo/board.c:34-37
  • [Medium] CI builds against mutable wolfHAL HEAD.github/workflows/wolfhal-stm32h563zi-nucleo.yml:23-26
  • [Low] DEBUG_H5_ETH still references the removed STM32 Ethernet driversrc/port/stm32h563/main.c:1062-1128
  • [Low] New wolfHAL bridge has no automated behavioral coveragesrc/port/wolfHAL/wolfhal_eth.c:27-96

Review generated by Skoll

Comment threadsrc/port/stm32h563/boards/stm32h563zi_nucleo/syscalls.c Outdated
Comment threadsrc/port/stm32h563/main.c
Comment threadsrc/port/stm32h563/boards/stm32h563zi_nucleo/board.c
Comment thread.github/workflows/wolfhal-stm32h563zi-nucleo.yml Outdated
Comment threadsrc/port/stm32h563/main.c Outdated
Comment threadsrc/port/wolfHAL/wolfhal_eth.c
@AlexLanzano

Copy link
Copy Markdown
MemberAuthor

Need to wait for 64bit tick support to land in wolfHAL (PR is open here wolfSSL/wolfHAL#53) for the wolfHAL CI build checks to pass

@aidangarskeaidangarske left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ran on HW and it looks good! Just a few nits you might want to cover

Comment thread.github/workflows/wolfhal-stm32h563zi-nucleo.yml
Comment threadsrc/port/stm32h563/main.c Outdated
Comment threadsrc/port/wolfHAL/README.md
@AlexLanzano
AlexLanzanoforce-pushed the wolfHAL-integration branch 2 times, most recently from cb2f399 to ec2daf0CompareAugust 3, 2026 22:30
@AlexLanzano
AlexLanzanoforce-pushed the wolfHAL-integration branch 2 times, most recently from ec2daf0 to 152fb65CompareAugust 4, 2026 17:09
@dgarske
dgarske merged commit 994ba6f into wolfSSL:masterAug 4, 2026
49 of 75 checks passed
Sign up for freeto 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.

5 participants

@AlexLanzano@dgarske@aidangarske@danielinux