Skip to content

Control plane agent for Nucleo boards - #2400

Merged
lzrd merged 2 commits into
masterfrom
nucleo-cpa
Sep 10, 2026
Merged

Control plane agent for Nucleo boards#2400
lzrd merged 2 commits into
masterfrom
nucleo-cpa

Conversation

@lzrd

@lzrd lzrd commented Feb 24, 2026

Copy link
Copy Markdown
Contributor

Improve Nucleo support for Hubris and hardware testing

The Nucleo board is a useful off-the-shelf board for prototyping and for
testing "pure Hubris" code paths. Configuring the control plane agent
into the image makes the board more useful.

The Nucleo board can also be a convenient platform for developing I2C
device drivers.

While there is enforcement in xtask to ensure that the vlan feature is
enabled for production boards, the feature results in compilation errors
if those guards are commented out and the vlan feature is removed from
the app.toml. That is fixed so that the Nucleo boards can opt out of
the vlan feature.

All of the changes in the machine code output are explained by line
number changes (ringbuf, etc.), the caboose GITC value, a different
Hubris ImageId, and one layout change due to a line number constant value
being a different size: in control_plane_agent in handle_mgs_request
a cmp.w r0, #728 became move r1,#729; cmp r0, r1

While people have prototyped a Nucleo + NXP LPC55S69 xPresso board to
simulate SP + RoT, there is no intention to officially support that
configuration.

Configuration changes to Nucleo boards:

  • add control_plane_agent (CPA)
  • add "Caboose" for Hubris image identification
  • omitting VLAN tags on Nucleo boards
  • update_server to manage firmware updates
  • sprot is assigned the appropriate pins for connection to a non-existent RoT

control_plane_agent references i2c_driver unconditionally via
task_slot!(I2C, i2c_driver), so add it to CPA's task-slots in
app-h743.toml (app-h753.toml already had it).

The Nucleo board is a useful off-the-shelf board for prototyping and for
testing "pure Hubris" code paths. Configuring the control plane agent
into the image makes the board more useful.

The Nucleo board can also be a convenient platform for developing I2C
device drivers.

While there is enforcement in xtask to ensure that the vlan feature is
enabled for production boards, the feature results in compilation errors
if those guards are commented out and the vlan feature is removed from
the `app.toml`. That is fixed so that the Nucleo boards can opt out of
the vlan feature.

All of the changes in the machine code output are explained by line
number changes (ringbuf, etc.), the caboose `GITC` value, a different
Hubris ImageId, and one layout change due to a line number constant value
being a different size: in `control_plane_agent` in `handle_mgs_request`
a `cmp.w r0, #728` became `move r1,#729; cmp r0, r1`

While people have prototyped a Nucleo + NXP LPC55S69 xPresso board to
simulate SP + RoT, there is no intention to officially support that
configuration.

Configuration changes to Nucleo boards:
  - add `control_plane_agent` (CPA)
  - add "Caboose" for Hubris image identification
  - omitting VLAN tags on Nucleo boards
  - `update_server` to manage firmware updates
  - `sprot` is assigned the appropriate pins for connection to a non-existent RoT

`control_plane_agent` references `i2c_driver` unconditionally via
`task_slot!(I2C, i2c_driver)`, so add it to CPA's task-slots in
`app-h743.toml` (`app-h753.toml` already had it).
@lzrd
lzrd marked this pull request as ready for review September 4, 2026 20:13
@lzrd
lzrd requested a review from hawkw September 4, 2026 20:15
@lzrd lzrd changed the title Support Hardware CI testing on Nucleo boards Control plane agent for Nucleo boards Sep 4, 2026

@jamesmunns jamesmunns 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.

Overall looks reasonable, one docs note


The Nucleo boards are readily available development boards for general
Hubris development. Although they are not part of any Oxide Computer
product, they are configured to work with the Management Gateway Service

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.

Might be worth mentioning that the "Management Gateway Service" task is "Control Plane Agent (CPA)", as it is referred to below.

@lzrd
lzrd enabled auto-merge (squash) September 10, 2026 05:56
@lzrd
lzrd disabled auto-merge September 10, 2026 05:57
@lzrd
lzrd merged commit 46a7fb8 into master Sep 10, 2026
190 checks passed
@lzrd
lzrd deleted the nucleo-cpa branch September 10, 2026 07:25
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.

2 participants