-
Notifications
You must be signed in to change notification settings - Fork 212
Update to nightly-2025-07-20 #2169
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
7e1a8d9 to
68cd58a
Compare
68cd58a to
bfd987e
Compare
Previously, we were getting the address of `static mut`s (linker-provided addresses) using `NAME_OF_STATIC.as_ptr()`. This creates a temporary shared reference to the mutable static, as `[T]::as_ptr()` has an `&self` receiver. This can now be changed to use `&raw const NAME_OF_STATIC`, which takes the address of the static without creating a temporary shared reference.
Presumably this was meant to be publicly re-exported, and that's why it's creating `dead_code` warnings. It appears nothing is currently consuming it, since it wasn't publicly accessible, but I am assuming that it will eventually be used outside of `stage0-handoff`. cc @lzrd am I correct in this?
The `net` task itself doesn't use this enum, but its clients do. We *could* change this up a bit to only generate it when building the client, but other stuff in the `generate_socket_enum` already has `#[allow(unused)]` on it, so I didn't think it was super important.
These will need to be pointed back at `main` when oxidecomputer/idolatry#65 merges.
Cargo.toml
Outdated
| idol = { git = "https://github.com/oxidecomputer/idolatry.git", default-features = false, branch = "eliza/nightly-2025-07-20" } | ||
| idol-runtime = { git = "https://github.com/oxidecomputer/idolatry.git", default-features = false, branch = "eliza/nightly-2025-07-20" } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These should be pointed back at main when oxidecomputer/idolatry#65 merges.
|
Note that commit ced6724 is a somewhat massive diff, as it fixes a huge amount of new Clippy lints, and therefore touches a lot of files. It may be useful to review the change prior to that commit to focus on the more substantial changes. |
now that oxidecomputer/idolatry#65 has merged.
|
Thanks to @mkeeter, we now understand why the slightly less good debug info for It turns out that in Humility, pub fn lookup_definition(&self, name: &str) -> Result<&HubrisGoff> {
match self.definitions.get(name) {
Some(goff) => Ok(goff),
None => Err(anyhow!("definition {} not found", name)),
}
}AS YOU CAN MAYBE BEGIN TO GUESS, this means that if it went in So why does it go in As for fixing this, @mkeeter has opened a |
i hate clippy
|
As far as testing this change goes, thus far I've flashed a Cosmo and have confirmed that the host comes up when asked. Next I intend to test updating via |
|
Okay, after a bit of a misadventure with console session testing with cosmoeliza@lurch ~ $ pfexec humility -t cosmo-sp --archive build-cosmo-a-lab-image-default.zip flash
humility: WARNING: archive on command-line overriding archive in environment file
humility: attaching with chip set to "STM32H753ZITx"
humility: attached to 0483:3754:003F00164741500920383733 via ST-Link V3
humility: flash/archive mismatch; reflashing
humility: auxiliary flash data is already loaded in slot 14; skipping programming
humility: done with auxiliary flash
humility: flashing done
eliza@lurch ~ $ pfexec humility -t cosmo-sp --archive build-cosmo-a-lab-image-default.zip net ip
humility: WARNING: archive on command-line overriding archive in environment file
humility: attached to 0483:3754:003F00164741500920383733 via ST-Link V3
MAC address: a8:40:25:04:06:43
IPv6 address: fe80::aa40:25ff:fe04:0643
eliza@lurch ~ $ faux-mgs --interface axf2 --discovery-addr '[fe80::aa40:25ff:fe04:064b]:11111' state
Jul 24 23:15:26.726 INFO creating SP handle on interface axf2, component: faux-mgs
Jul 24 23:15:26.728 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:64b%3]:11111, interface: axf2, component: faux-mgs
Jul 24 23:15:26.734 INFO V2(SpStateV2 { hubris_archive_id: [109, 111, 90, 142, 250, 122, 151, 215], serial_number: [66, 82, 77, 49, 51, 50, 53, 48, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], model: [57, 49, 51, 45, 48, 48, 48, 48, 48, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], revision: 1, base_mac_address: [168, 64, 37, 4, 6, 67], power_state: A2, rot: Ok(RotStateV2 { active: A, persistent_boot_preference: A, pending_persistent_boot_preference: None, transient_boot_preference: None, slot_a_sha3_256_digest: Some([25, 176, 174, 225, 18, 174, 244, 13, 20, 224, 181, 35, 96, 255, 140, 93, 208, 39, 168, 10, 52, 143, 62, 79, 242, 84, 8, 164, 132, 203, 54, 155]), slot_b_sha3_256_digest: Some([38, 246, 196, 196, 89, 7, 145, 180, 170, 104, 93, 208, 83, 71, 203, 154, 34, 17, 28, 126, 67, 244, 90, 137, 73, 72, 164, 237, 0, 215, 180, 95]) }) }), hubris archive: 6d6f5a8efa7a97d7
componentserial number: BRM13250003
:model: 913-0000023
revision: 1
base MAC address: a8:40:25:04:06:43
power state: A2
faux-mgsRotStateV2 {
active: A,
persistent_boot_preference: A,
pending_persistent_boot_preference: None,
transient_boot_preference: None
slot_a_sha3_256_digest: 19b0aee112aef40d14e0b52360ff8c5dd027a80a348f3e4ff25408a484cb369b,
slot_b_sha3_256_digest: 26f6c4c4590791b4aa685dd05347cb9a22111c7e43f45a894948a4ed00d7b45f,
}
eliza@lurch ~ $ faux-mgs --interface axf2 --discovery-addr '[fe80::aa40:25ff:fe04:064b]:11111' update sp 0 build-cosmo-a-lab-image-default-master.zip
Jul 24 23:16:22.473 INFO creating SP handle on interface axf2, component: faux-mgs
Jul 24 23:16:22.474 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:64b%3]:11111, interface: axf2, component: faux-mgs
Jul 24 23:16:22.494 INFO generated update ID, id: d9d4d8c8-cfb7-4f07-ba85-50074f3aab27, component: faux-mgs
Jul 24 23:16:22.627 INFO starting SP update, sp_image_size: 688384, aux_flash_size: 1106756, aux_flash_chck: [144, 62, 165, 153, 126, 43, 184, 199, 177, 243, 151, 250, 240, 56, 171, 188, 223, 170, 249, 224, 181, 162, 68, 241, 196, 140, 5, 21, 249, 241, 45, 127], id: d9d4d8c8-cfb7-4f07-ba85-50074f3aab27, interface: axf2, component: faux-mgs
Jul 24 23:16:27.361 WARN ignoring unexpected RPC response, message: Message { header: Header { version: 19, message_id: 3 }, kind: SpResponse(Error(UpdateInProgress(Preparing(UpdatePreparationStatus { id: UpdateId([217, 212, 216, 200, 207, 183, 79, 7, 186, 133, 80, 7, 79, 58, 171, 39]), progress: Some(UpdatePreparationProgress { current: 0, total: 48 }) })))) }, interface: axf2, component: faux-mgs
Jul 24 23:16:27.362 INFO update preparing: 0/48, component: faux-mgs
Jul 24 23:16:27.867 INFO update preparation complete, update_id: d9d4d8c8-cfb7-4f07-ba85-50074f3aab27, interface: axf2, component: faux-mgs
Jul 24 23:16:28.365 INFO update in progress, total_size: 1795140, bytes_received: 1250522, component: faux-mgs
Jul 24 23:16:29.370 INFO update in progress, total_size: 1795140, bytes_received: 1525340, component: faux-mgs
Jul 24 23:16:30.650 INFO update complete, id: d9d4d8c8-cfb7-4f07-ba85-50074f3aab27, interface: axf2, component: faux-mgs
update complete
eliza@lurch ~ $ faux-mgs --interface axf2 --discovery-addr '[fe80::aa40:25ff:fe04:064b]:11111' reset
Jul 24 23:18:19.828 INFO creating SP handle on interface axf2, component: faux-mgs
Jul 24 23:18:19.830 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:64b%3]:11111, interface: axf2, component: faux-mgs
Jul 24 23:18:19.830 INFO SP is prepared to reset, component: faux-mgs
reset complete
Jul 24 23:18:33.839 INFO SP reset complete, component: faux-mgs
eliza@lurch ~ $ faux-mgs --interface axf2 --discovery-addr '[fe80::aa40:25ff:fe04:064b]:11111' state
Jul 24 23:19:20.764 INFO creating SP handle on interface axf2, component: faux-mgs
Jul 24 23:19:20.765 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:64b%3]:11111, interface: axf2, component: faux-mgs
Jul 24 23:19:20.771 INFO V2(SpStateV2 { hubris_archive_id: [94, 222, 137, 232, 184, 4, 87, 39], serial_number: [66, 82, 77, 49, 51, 50, 53, 48, 48, 48, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], model: [57, 49, 51, 45, 48, 48, 48, 48, 48, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], revision: 1, base_mac_address: [168, 64, 37, 4, 6, 67], power_state: A2, rot: Ok(RotStateV2 { active: A, persistent_boot_preference: A, pending_persistent_boot_preference: None, transient_boot_preference: None, slot_a_sha3_256_digest: Some([25, 176, 174, 225, 18, 174, 244, 13, 20, 224, 181, 35, 96, 255, 140, 93, 208, 39, 168, 10, 52, 143, 62, 79, 242, 84, 8, 164, 132, 203, 54, 155]), slot_b_sha3_256_digest: Some([38, 246, 196, 196, 89, 7, 145, 180, 170, 104, 93, 208, 83, 71, 203, 154, 34, 17, 28, 126, 67, 244, 90, 137, 73, 72, 164, 237, 0, 215, 180, 95]) }) }), component: faux-mgs
hubris archive: 5ede89e8b8045727
serial number: BRM13250003
model: 913-0000023
revision: 1
base MAC address: a8:40:25:04:06:43
power state: A2
RotStateV2 {
active: A,
persistent_boot_preference: A,
pending_persistent_boot_preference: None,
transient_boot_preference: None
slot_a_sha3_256_digest: 19b0aee112aef40d14e0b52360ff8c5dd027a80a348f3e4ff25408a484cb369b,
slot_b_sha3_256_digest: 26f6c4c4590791b4aa685dd05347cb9a22111c7e43f45a894948a4ed00d7b45f,
}
eliza@lurch ~ $ |
|
further testing (sidecar): flashing the SP, checking that it's alive, unlocking the techport, discovering other SPs over the management network, and then updating it back to how it was before over the management network: sidecar test sessioneliza@lurch ~ $
humility: WARNING: archive on command-line overriding archive in environment file
humility: attaching with chip set to "STM32H753ZITx"
humility flash failed: Could not find probe 0483:374e:0028001E4741500720383733.
Because a serial number is present, this may be due to not running humility with permission to read USB device serial numbers; if not root already, run again as root?
eliza@lurch ~ $ humility --target sidecar-sp --archive build-sidecar-b-lab-image-default.zip flash
pfexec humility --target sidecar-sp --archive build-sidecar-b-lab-image-default.zip flash
humility: WARNING: archive on command-line overriding archive in environment file
humility: attaching with chip set to "STM32H753ZITx"
humility: attached to 0483:374e:0028001E4741500720383733 via ST-Link V3
humility: flash/archive mismatch; reflashing
humility: auxiliary flash data is already loaded in slot 0; skipping programming
humility: done with auxiliary flash
humility: flashing done
eliza@lurch ~ $ pfexec humility --target sidecar-sp --archive build-sidecar-b-lab-image-default.zip tasks
humility: WARNING: archive on command-line overriding archive in environment file
humility: attached to 0483:374e:0028001E4741500720383733 via ST-Link V3
system time = 43664
ID TASK GEN PRI STATE
0 jefe 0 0 recv, notif: fault timer(T+36)
1 sys 0 1 recv, notif: exti-wildcard-irq(irq6/irq7/irq8/irq9/irq10/irq23/irq40)
2 rng_driver 0 6 recv
3 update_server 0 3 recv
4 auxflash 0 3 recv
5 net 0 5 recv, notif: eth-irq(irq61) wake-timer(T+356)
6 control_plane_agent 0 7 recv, notif: socket usart-irq timer
7 sprot 0 4 recv
8 udpecho 0 6 notif: socket
9 udpbroadcast 0 6 notif: bit31(T+24)
10 monorail 0 6 recv, notif: wake-timer(T+99)
11 i2c_driver 0 2 recv
12 hiffy 0 5 notif: bit31(T+217)
13 sensor 0 4 recv
14 ecp5_mainboard 0 3 recv
15 ecp5_front_io 0 3 recv
16 transceivers 0 6 recv, notif: socket timer(T+44)
17 packrat 0 3 recv
18 sequencer 0 4 recv, notif: timer(T+539)
19 thermal 0 5 recv, notif: timer(T+444)
20 power 0 6 recv, notif: timer(T+953)
21 validate 0 5 recv
22 ignition 0 5 recv, notif: timer(T+547)
23 vpd 0 3 recv
24 dump_agent 0 6 recv, notif: socket
25 idle 0 8 RUNNING
26 udprpc 0 6 notif: socket
eliza@lurch ~ $ pfexec humility --target sidecar-sp --archive build-sidecar-b-lab-image-default.zip net ip
humility: WARNING: archive on command-line overriding archive in environment file
humility: attached to 0483:374e:0028001E4741500720383733 via ST-Link V3
MAC address: a8:40:25:05:05:00
IPv6 address: fe80::aa40:25ff:fe05:0500
eliza@lurch ~ $ pilot sp -i axf2 ls
MAC SERIAL TYPE IMAGE IP
a8:40:25:05:05:00 BRM44220006 sidecar c074c373ef5677d1 fe80::aa40:25ff:fe05:500
eliza@lurch ~ $ pilot sp -i axf2 exec -e 'monorail unlock --time 3600s' BRM44220006
Jul 25 18:06:33.247 INFO creating SP handle on interface axf2, component: faux-mgs
Jul 25 18:06:33.252 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe05:500%3]:11111, interface: axf2, component: faux-mgs
Jul 25 18:06:33.274 INFO received challenge Trivial { timestamp: 187508 }, component: faux-mgs
done
eliza@lurch ~ $ pilot sp -i axf2 ls
MAC SERIAL TYPE IMAGE IP
0e:1d:2e:e3:e6:99 - unknown 941d849f2bd9cee6 fe80::c1d:2eff:fee3:e69a
a8:40:25:04:06:43 BRM13250003 cosmo 5ede89e8b8045727 fe80::aa40:25ff:fe04:64b
a8:40:25:05:05:00 BRM44220006 sidecar c074c373ef5677d1 fe80::aa40:25ff:fe05:500
a8:40:25:06:01:02 BRM45220003 psc dc52e0d8cc569f50 fe80::aa40:25ff:fe06:103
eliza@lurch ~ $ faux-mgs --interface axf2 --discovery-addr '[fe80::aa40:25ff:fe06:103]:11111' discover
Jul 25 18:08:40.409 INFO creating SP handle on interface axf2, component: faux-mgs
Jul 25 18:08:40.410 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe06:103%3]:11111addr=[fe80::aa40:25ff:fe06:103%3]:11111, port=Two
, interface: axf2, component: faux-mgs
Jul 25 18:08:40.410 INFO SP discovered, port: Two, addr: [fe80::aa40:25ff:fe06:103%3]:11111, interface: axf2, component: faux-mgs
eliza@lurch ~ $ faux-mgs --interface axf2 --discovery-addr '[fe80::aa40:25ff:fe05:500]:11111' state
Jul 25 18:18:18.879 INFO creating SP handle on interface axf2, component: faux-mgs
Jul 25 18:18:18.881 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe05:500%3]:11111, interface: axf2, component: faux-mgs
Jul 25 18:18:18.888hubris archive: c074c373ef5677d1
serial number: BRM44220006
INFOmodel: 913-0000006
revision: 4
base MAC address: a8:40:25:05:05:00
power state: A0
V2(SpStateV2 { hubris_archive_id: [192, 116, 195, 115, 239, 86, 119, 209], serial_number: [66, 82, 77, 52, 52, 50, 50, 48, 48, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], model: [57, 49, 51, 45, 48, 48, 48, 48, 48, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], revision: 4, base_mac_address: [168, 64, 37, 5, 5, 0], power_state: A0, rot: Ok(RotStateV2 { active: A, persistent_boot_preference: A, pending_persistent_boot_preference: None, transient_boot_preference: None, slot_a_sha3_256_digest: Some([71, 120, 43, 183, 203, 145, 239, 203, 215, 117, 68, 168, 174, 28, 25, 170, 65, 242, 204, 116, 140, 38, 103, 68, 118, 71, 164, 36, 3, 189, 45, 23]), slot_b_sha3_256_digest: Some([245, 13, 96, 186, 5, 206, 160, 79, 137, 250, 183, 184, 70, 249, 173, 246, 137, 25, 91, 182, 226, 66, 106, 50, 117, 85, 119, 88, 78, 172, 150, 105]) }) })rot: Ok(RotStateV2 {
active: A,
persistent_boot_preference: A,
pending_persistent_boot_preference: None,
transient_boot_preference: None,
slot_a_sha3_256_digest: Some("47782bb7cb91efcbd77544a8ae1c19aa41f2cc748c2667447647a42403bd2d17"),
slot_b_sha3_256_digest: Some("f50d60ba05cea04f89fab7b846f9adf689195bb6e2426a32755577584eac9669"),
}
)
, component: faux-mgs
eliza@lurch ~ $ faux-mgs --interface axf2 --discovery-addr '[fe80::aa40:25ff:fe05:500]:11111' update sp 0 /gimlet/hubris/archives/build-sidecar-b-lab-image-default.zip
Jul 25 18:19:42.219 INFO creating SP handle on interface axf2, component: faux-mgs
Jul 25 18:19:42.221 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe05:500%3]:11111, interface: axf2, component: faux-mgs
Jul 25 18:19:42.225 INFO generated update ID, id: 869268b3-82cd-4ba9-9a2a-86fb53427a25, component: faux-mgs
Jul 25 18:19:42.374 INFO starting SP update, sp_image_size: 719360, aux_flash_size: 1168916, aux_flash_chck: [185, 22, 164, 101, 114, 241, 9, 198, 155, 121, 14, 135, 124, 31, 187, 176, 94, 223, 201, 204, 27, 143, 202, 92, 102, 15, 157, 136, 46, 182, 33, 57], id: 869268b3-82cd-4ba9-9a2a-86fb53427a25, interface: axf2, component: faux-mgs
Jul 25 18:19:46.764 INFO update preparing: 0/48, component: faux-mgs
Jul 25 18:19:46.765 WARN ignoring unexpected RPC response, message: Message { header: Header { version: 19, message_id: 5 }, kind: SpResponse(UpdateStatus(Preparing(UpdatePreparationStatus { id: UpdateId([134, 146, 104, 179, 130, 205, 75, 169, 154, 42, 134, 251, 83, 66, 122, 37]), progress: Some(UpdatePreparationProgress { current: 0, total: 48 }) }))) }, interface: axf2, component: faux-mgs
Jul 25 18:19:46.765 WARN ignoring unexpected RPC response, message: Message { header: Header { version: 19, message_id: 5 }, kind: SpResponse(UpdateStatus(Preparing(UpdatePreparationStatus { id: UpdateId([134, 146, 104, 179, 130, 205, 75, 169, 154, 42, 134, 251, 83, 66, 122, 37]), progress: Some(UpdatePreparationProgress { current: 0, total: 48 }) }))) }, interface: axf2, component: faux-mgs
Jul 25 18:19:47.766 INFO aux flash scan complete, total_size: 1888276, found_match: true, component: faux-mgs
Jul 25 18:19:48.766 INFO update preparation complete, update_id: 869268b3-82cd-4ba9-9a2a-86fb53427a25, interface: axf2, component: faux-mgs
Jul 25 18:19:48.768 INFO update in progress, total_size: 1888276, bytes_received: 1169894, component: faux-mgs
Jul 25 18:19:49.773 INFO update in progress, total_size: 1888276, bytes_received: 1458404, component: faux-mgs
Jul 25 18:19:50.774 INFO update in progress, total_size: 1888276, bytes_received: 1754738, component: faux-mgs
Jul 25 18:19:51.550 INFO update complete, id: 869268b3-82cd-4ba9-9a2a-86fb53427a25, interface: axf2, component: faux-mgs
update complete
eliza@lurch ~ $ faux-mgs --interface axf2 --discovery-addr '[fe80::aa40:25ff:fe05:500]:11111' reset
Jul 25 18:23:52.068 INFO creating SP handle on interface axf2, component: faux-mgs
Jul 25 18:23:52.069 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe05:500%3]:11111, interface: axf2, component: faux-mgs
Jul 25 18:23:52.070 INFO SP is prepared to reset, component: faux-mgs
Jul 25 18:23:52.076 WARN unexpected error when checking for watchdog support: SpError(Watchdog(Rot(DongleDetected))), interface: axf2, component:Error: Error response from SP: watchdog: RoT error: the SP programming dongle is connected
faux-mgs
eliza@lurch ~ $ pfexec humility --target sidecar-sp --archive build-sidecar-b-lab-image-default.zip reset
humility: WARNING: archive on command-line overriding archive in environment file
humility: Opened 0483:374e:0028001E4741500720383733 via ST-Link V3
eliza@lurch ~ $ faux-mgs --interface axf2 --discovery-addr '[fe80::aa40:25ff:fe05:500]:11111' state
Jul 25 18:25:17.180 INFO creating SP handle on interface axf2, component: faux-mgs
Jul 25 18:25:23.185 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe05:500%3]:11111, interface: axf2, component: faux-mgs
Error: Error response from SP: monorail: management network is locked
eliza@lurch ~ $ pilot sp -i axf2 exec -e 'monorail unlock --time 3600s' BRM44220006
Jul 25 18:25:34.774 INFO creating SP handle on interface axf2, component: faux-mgs
Jul 25 18:25:34.775 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe05:500%3]:11111, interface: axf2, component: faux-mgs
Jul 25 18:25:34.797 INFO received challenge Trivial { timestamp: 22474 }, component: faux-mgs
done
eliza@lurch ~ $ faux-mgs --interface axf2 --discovery-addr '[fe80::aa40:25ff:fe05:500]:11111' state
Jul 25 18:25:48.244 INFO creating SP handle on interface axf2, component: faux-mgs
Jul 25 18:25:48.245 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe05:500%3]:11111, interface: axf2, component: faux-mgs
Jul 25 18:25:48.252 INFO V2(SpStateV2 { hubris_archive_id: [174, 56, 179, 137, 68, 221, 32, 187], serial_number: [66, 82, 77, 52, 52, 50, 50, 48, 48, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], model: [57, 49, 51, 45, 48, 48, 48, 48, 48, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], revision: 4, base_mac_address: [168, 64, 37, 5, 5, 0], power_state: A0, rot: Ok(RotStateV2 { active: A, persistent_boot_preference: A, pending_persistent_boot_preference: None, transient_boot_preference: None, slot_a_sha3_256_digest: Some([71, 120, 43, 183, 203, 145, 239, 203, 215, 117, 68, 168, 174, 28, 25, 170, 65, 242, 204, 116, 140, 38, 103, 68, 118, 71, 164, 36, 3, 189, 45, 23]), slot_b_sha3_256_digest: Some([245, 13, 96, 186, 5, 206, 160, 79, 137, 250, 183, 184, 70, 249, 173, 246, 137, 25, 91, 182, 226, 66, 106, 50, 117, 85, 119, 88, 78, 172, 150, 105]) }) }), component: faux-mgshubris archive: ae38b38944dd20bb
serial number: BRM44220006
model: 913-0000006
revision: 4
base MAC address: a8:40:25:05:05:00
power state: A0
rot: Ok(RotStateV2 {
active: A,
persistent_boot_preference: A,
pending_persistent_boot_preference: None,
transient_boot_preference: None,
slot_a_sha3_256_digest: Some("47782bb7cb91efcbd77544a8ae1c19aa41f2cc748c2667447647a42403bd2d17"),
slot_b_sha3_256_digest: Some("f50d60ba05cea04f89fab7b846f9adf689195bb6e2426a32755577584eac9669"),
}
)
eliza@lurch ~ $ |
|
Okay, I've done a similar round of testing on Gimlet, including that the system comes up to A0 and that the SP can be flashed back to a previous rev over the management network. Everything looks fine to me! somewhat lengthy console sessioneliza@castle ~ $ pilot sp ls
MAC SERIAL TYPE IMAGE IP
a8:40:25:04:02:02 BRM42220036 gimlet 3699e46b12a1db18 fe80::aa40:25ff:fe04:202
a8:40:25:04:02:47 BRM42220030 gimlet 3699e46b12a1db18 fe80::aa40:25ff:fe04:247
a8:40:25:05:07:00 BRM44220013 sidecar dcf1e97ab2e9971d fe80::aa40:25ff:fe05:700
a8:40:25:05:27:00 BRM31230004 sidecar 710e93a75e01c3c5 fe80::aa40:25ff:fe05:2700
a8:40:25:06:01:08 BRM11230017 psc 02babcfe6bda5b41 fe80::aa40:25ff:fe06:108
eliza@castle ~ $ export PILOT_RACK=london
eliza@castle ~ $ pilot sp exec -e 'update sp 0 build-gimlet-c-dev-image-default.zip' BRM42220036
Jul 28 17:28:37.488 INFO creating SP handle on interface london_sw0tp0, component: faux-mgs
Jul 28 17:28:37.491 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:202%3]:11111, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:28:37.495 INFO generated update ID, id: 8a556f30-7d2c-46dc-a0b4-edd59266876b, component: faux-mgs
Jul 28 17:28:37.567 INFO starting SP update, sp_image_size: 655616, aux_flash_size: 0, aux_flash_chck: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], id: 8a556f30-7d2c-46dc-a0b4-edd59266876b, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:28:42.400 WARN ignoring unexpected RPC response, message: Message { header: Header { version: 19, message_id: 3 }, kind: SpResponse(Error(UpdateInProgress(InProgress(UpdateInProgressStatus { id: UpdateId([138, 85, 111, 48, 125, 44, 70, 220, 160, 180, 237, 213, 146, 102, 135, 107]), bytes_received: 0, total_size: 655616 })))) }, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:28:42.405 INFO update in progress, total_size: 655616, bytes_received: 0, component: faux-mgs
Jul 28 17:28:42.412 INFO update preparation complete, update_id: 8a556f30-7d2c-46dc-a0b4-edd59266876b, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:28:43.474 INFO update in progress, total_size: 655616, bytes_received: 33252, component: faux-mgs
Jul 28 17:28:44.478 INFO update in progress, total_size: 655616, bytes_received: 263082, component: faux-mgs
Jul 28 17:28:45.541 INFO update in progress, total_size: 655616, bytes_received: 287532, component: faux-mgs
Jul 28 17:28:46.543 INFO update in progress, total_size: 655616, bytes_received: 580932, component: faux-mgs
Jul 28 17:28:47.127 INFO update complete, id: 8a556f30-7d2c-46dc-a0b4-edd59266876b, interface: london_sw0tp0, component: faux-mgs
update complete
eliza@castle ~ $ pilot sp exec -e 'reset' BRM42220036
Jul 28 17:29:01.983 INFO creating SP handle on interface london_sw0tp0, component: faux-mgs
Jul 28 17:29:01.985 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:202%3]:11111, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:29:01.986 INFO SP is prepared to reset, component: faux-mgs
Jul 28 17:29:01.991 INFO using watchdog during reset, watchdog_timeout_ms: 15000, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:29:03.993 INFO disabling watchdog, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:29:03.998 INFO SP reset complete, component: faux-mgs
reset complete
eliza@castle ~ $ pilot sp exec -e 'state' BRM42220036
Jul 28 17:29:23.816 INFO creating SP handle on interface london_sw0tp0, component: faux-mgs
Jul 28 17:29:23.818 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:202%3]:11111, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:29:23.824 INFO V2(SpStateV2 { hubris_archive_id: [30, 151, 15, 225, 90, 196, 103, 185], serial_number: [66, 82, 77, 52, 50, 50, 50, 48, 48, 51, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], model: [57, 49, 51, 45, 48, 48, 48, 48, 48, 49, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], revision: 6, base_mac_address: [168, 64, 37, 4, 2, 2], power_state: A0, rot: Ok(RotStateV2 { active: A, persistent_boot_preference: A, pending_persistent_boot_preference: None, transient_boot_preference: None, slot_a_sha3_256_digest: Some([172, 141, 158, 28, 78, 136, 79, 143, 26, 187, 166, 228, 63, 95, 38, 218, 45, 229, 44, 159, 49, 103, 89, 34, 108, 141, 139, 42, 243, 39, 3, 160]), slot_b_sha3_256_digest: Some([199, 73, 138, 93, 79, 203, 253, 141, 202, 61, 61, 211, 109, 72, 13, 175, 77, 83, 108, 29, 129, 66, 87, 70, 250, 45, 198, 129, 175, 244, 56, 245]) }) })hubris archive: 1e970fe15ac467b9
serial number: BRM42220036
, model: 913-0000019
revision: 6
base MAC address: a8:40:25:04:02:02
power state: A0
rot: Ok(RotStateV2 {
active: A,
persistent_boot_preference: A,
pending_persistent_boot_preference: None,
transient_boot_preference: None,
slot_a_sha3_256_digest: Some("ac8d9e1c4e884f8f1abba6e43f5f26da2de52c9f316759226c8d8b2af32703a0"),
slot_b_sha3_256_digest: Some("c7498a5d4fcbfd8dca3d3dd36d480daf4d536c1d81425746fa2dc681aff438f5"),
}
component)
: faux-mgs
eliza@castle ~ $ pfexec humility --archive build-gimlet-c-dev-image-default.zip --ip 'fe80::aa40:25ff:fe04:202%3' tasks
humility: connecting to fe80::aa40:25ff:fe04:202%3
humility: reading tasks remotely; state may not be consistent
system time = unavailable-via-net
ID TASK GEN PRI STATE
0 jefe ? 0 [cannot read supervisor memory]
1 net 0 5 recv, notif: eth-irq(irq61) wake-timer(T=469262)
2 sys 0 1 recv, notif: exti-wildcard-irq(irq6/irq7/irq8/irq9/irq10/irq23/irq40)
3 spi2_driver 0 3 recv
4 i2c_driver 0 3 recv
5 spd 0 2 notif: i2c1-irq(irq31/irq32)
6 packrat 0 1 recv
7 thermal 0 5 recv, notif: timer(T=469471)
8 power 0 6 recv, notif: timer(T=469752)
9 hiffy 0 5 notif: bit31(T=469267)
10 gimlet_seq 0 4 recv, notif: timer(T=469288) vcore
11 gimlet_inspector 0 6 notif: socket
12 hash_driver 0 2 recv
13 hf 0 3 recv, notif: timer
14 update_server 0 3 recv
15 sensor 0 4 recv
16 host_sp_comms 0 8 recv, notif: jefe-state-change usart-irq(irq82) multitimer(T=469606) control-plane-agent
17 udpecho 0 6 notif: socket
18 udpbroadcast 0 6 notif: bit31(T=469697)
19 control_plane_agent 0 7 recv, notif: usart-irq(irq37) socket timer
20 sprot 0 4 recv
21 validate 0 5 recv
22 vpd 0 4 recv
23 user_leds 0 2 recv, notif: timer
24 dump_agent 0 6 wait: reply from jefe/gen0
25 sbrmi 0 4 recv
26 idle 0 9 ready
27 udprpc 0 6 ready
eliza@castle ~ $ pfexec humility --archive build-gimlet-c-dev-image-default.zip --ip 'fe80::aa40:25ff:fe04:202%3' hiffy -c Sequencer.set_state -a state=A0
humility: connecting to fe80::aa40:25ff:fe04:202%3
Sequencer.set_state() => Err(IllegalTransition)
eliza@castle ~ $ pfexec humility --archive build-gimlet-c-dev-image-default.zip --ip 'fe80::aa40:25ff:fe04:202%3' hiffy -c Sequencer.set_state -a state=A2
humility: connecting to fe80::aa40:25ff:fe04:202%3
Sequencer.set_state() => Changed
eliza@castle ~ $ pfexec humility --archive build-gimlet-c-dev-image-default.zip --ip 'fe80::aa40:25ff:fe04:202%3' hiffy -c Sequencer.set_state -a state=A0
humility: connecting to fe80::aa40:25ff:fe04:202%3
Sequencer.set_state() => Changed
eliza@castle ~ $ pilot host ls
INTERFACE IP SERIAL IMAGE
london_host0 fe80::eaea:6aff:fe09:8567 BRM42220030 ci c65212d/dcce35b 2025-07-14 15:04
eliza@castle ~ $ pilot host ls
INTERFACE IP SERIAL IMAGE
london_host0 fe80::eaea:6aff:fe09:8567 BRM42220030 ci c65212d/dcce35b 2025-07-14 15:04
london_host1 fe80::eaea:6aff:fe09:865a BRM42220036 ci c65212d/dcce35b 2025-07-14 15:04
eliza@castle ~ $ wget https://github.com/oxidecomputer/hubris/releases/download/all-sp-v1.0.43/build-gimlet-c-dev-image-default.zip
--2025-07-28 17:45:27-- https://github.com/oxidecomputer/hubris/releases/download/all-sp-v1.0.43/build-gimlet-c-dev-image-default.zip
Resolving github.com... 140.82.116.4
Connecting to github.com|140.82.116.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://release-assets.githubusercontent.com/github-production-release-asset/252314296/77f46719-1c59-4ced-b510-cab3d0778936?sp=r&sv=2018-11-09&sr=b&spr=https&se=2025-07-28T18%3A25%3A58Z&rscd=attachment%3B+filename%3Dbuild-gimlet-c-dev-image-default.zip&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2025-07-28T17%3A25%3A48Z&ske=2025-07-28T18%3A25%3A58Z&sks=b&skv=2018-11-09&sig=e%2BTLFv9P%2BGI%2FzJCHkLgYXnEZQf1GRC%2BErCVoFk3fwPU%3D&jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc1MzcyNTAyNywibmJmIjoxNzUzNzI0NzI3LCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ._DoSsf3VToKizByCDYMOC4RxWg1z7_kEvglqnbDW5E8&response-content-disposition=attachment%3B%20filename%3Dbuild-gimlet-c-dev-image-default.zip&response-content-type=application%2Foctet-stream [following]
--2025-07-28 17:45:27-- https://release-assets.githubusercontent.com/github-production-release-asset/252314296/77f46719-1c59-4ced-b510-cab3d0778936?sp=r&sv=2018-11-09&sr=b&spr=https&se=2025-07-28T18%3A25%3A58Z&rscd=attachment%3B+filename%3Dbuild-gimlet-c-dev-image-default.zip&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2025-07-28T17%3A25%3A48Z&ske=2025-07-28T18%3A25%3A58Z&sks=b&skv=2018-11-09&sig=e%2BTLFv9P%2BGI%2FzJCHkLgYXnEZQf1GRC%2BErCVoFk3fwPU%3D&jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc1MzcyNTAyNywibmJmIjoxNzUzNzI0NzI3LCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ._DoSsf3VToKizByCDYMOC4RxWg1z7_kEvglqnbDW5E8&response-content-disposition=attachment%3B%20filename%3Dbuild-gimlet-c-dev-image-default.zip&response-content-type=application%2Foctet-stream
Resolving release-assets.githubusercontent.com... 185.199.108.133, 185.199.110.133, 185.199.109.133, ...
Connecting to release-assets.githubusercontent.com|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5257203 (5.0M) [application/octet-stream]
Saving to: 'build-gimlet-c-dev-image-default.zip.1'
build-gimlet-c-dev-image-default.zip.1 100%[===================================================================================================================================>] 5.01M 9.60MB/s in 0.5s
2025-07-28 17:45:28 (9.60 MB/s) - 'build-gimlet-c-dev-image-default.zip.1' saved [5257203/5257203]
eliza@castle ~ $ pilot sp exec -e 'state' BRM42220036
Jul 28 17:45:42.415 INFO creating SP handle on interface london_sw0tp0, component: faux-mgs
Jul 28 17:45:42.417 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:202%3]:11111, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:45:42.423 INFO V2(SpStateV2 { hubris_archive_id: [30, 151, 15, 225, 90, 196, 103, 185], serial_number: [66, 82, 77, 52, 50, 50, 50, 48, 48, 51, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], model: [57, 49, 51, 45, 48, 48, 48, 48, 48, 49, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], revision: 6, base_mac_address: [168, 64, 37, 4, 2, 2], power_state: A0, rot: Ok(RotStateV2 { active: A, persistent_boot_preference: A, pending_persistent_boot_preference: None, transient_boot_preference: None, slot_a_sha3_256_digest: Some([172, 141, 158, 28, 78, 136, 79, 143, 26, 187, 166, 228, 63, 95, 38, 218, 45, 229, 44, 159, 49, 103, 89, 34, 108, 141, 139, 42, 243, 39, 3, 160]), slot_b_sha3_256_digest: Some([199, 73, 138, 93, 79, 203, 253, 141, 202, 61, 61, 211, 109, 72, 13, 175, 77, 83, 108, 29, 129, 66, 87, 70, 250, 45, 198, 129, 175, 244, 56, 245]) }) }), component: faux-mgs
hubris archive: 1e970fe15ac467b9
serial number: BRM42220036
model: 913-0000019
revision: 6
base MAC address: a8:40:25:04:02:02
power state: A0
rot: Ok(RotStateV2 {
active: A,
persistent_boot_preference: A,
pending_persistent_boot_preference: None,
transient_boot_preference: None,
slot_a_sha3_256_digest: Some("ac8d9e1c4e884f8f1abba6e43f5f26da2de52c9f316759226c8d8b2af32703a0"),
slot_b_sha3_256_digest: Some("c7498a5d4fcbfd8dca3d3dd36d480daf4d536c1d81425746fa2dc681aff438f5"),
}
)
eliza@castle ~ $ pilot sp exec -e 'update sp 0 build-gimlet-c-dev-image-default.zip.1' BRM42220036
Jul 28 17:46:06.691 INFO creating SP handle on interface london_sw0tp0, component: faux-mgs
Jul 28 17:46:06.693 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:202%3]:11111, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:46:06.697 INFO generated update ID, id: ba20c8f1-64a1-4a26-ab17-ab45bd34309a, component: faux-mgs
Jul 28 17:46:06.771 INFO starting SP update, sp_image_size: 721152, aux_flash_size: 0, aux_flash_chck: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], id: ba20c8f1-64a1-4a26-ab17-ab45bd34309a, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:46:11.696 WARN ignoring unexpected RPC response, message: Message { header: Header { version: 19, message_id: 3 }, kind: SpResponse(Error(UpdateInProgress(InProgress(UpdateInProgressStatus { id: UpdateId([186, 32, 200, 241, 100, 161, 74, 38, 171, 23, 171, 69, 189, 52, 48, 154]), bytes_received: 0, total_size: 721152 })))) }, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:46:11.696 WARN ignoring unexpected RPC response, message: Message { header: Header { version: 19, message_id: 3 }, kind: SpResponse(Error(UpdateInProgress(InProgress(UpdateInProgressStatus { id: UpdateId([186, 32, 200, 241, 100, 161, 74, 38, 171, 23, 171, 69, 189, 52, 48, 154]), bytes_received: 0, total_size: 721152 })))) }, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:46:11.697 INFO update in progress, total_size: 721152, bytes_received: 0, component: faux-mgs
Jul 28 17:46:11.697 INFO update preparation complete, update_id: ba20c8f1-64a1-4a26-ab17-ab45bd34309a, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:46:12.700 INFO update in progress, total_size: 721152, bytes_received: 300246, component: faux-mgs
Jul 28 17:46:13.703 INFO update in progress, total_size: 721152, bytes_received: 622986, component: faux-mgs
Jul 28 17:46:14.451 INFO update complete, id: ba20c8f1-64a1-4a26-ab17-ab45bd34309a, interface: london_sw0tp0, component: faux-mgs
update complete
eliza@castle ~ $ pilot sp exec -e 'state' BRM42220036
Jul 28 17:46:20.986 INFO creating SP handle on interface london_sw0tp0, component: faux-mgs
Jul 28 17:46:20.988 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:202%3]:11111, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:46:20.995 INFO V2(SpStateV2 { hubris_archive_id: [30, 151, 15, 225, 90, 196, 103, 185], serial_number: [66, 82, 77, 52, 50, 50, 50, 48, 48, 51, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], model: [57, 49, 51, 45, 48, 48, 48, 48, 48, 49, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], revision: 6, base_mac_address: [168, 64, 37, 4, 2, 2], power_state: A0, rot: Ok(RotStateV2 { active: A, persistent_boot_preference: A, pending_persistent_boot_preference: None, transient_boot_preference: None, slot_a_sha3_256_digest: Some([172, 141, 158, 28, 78, 136, 79, 143, 26, 187, 166, 228, 63, 95, 38, 218, 45, 229, 44, 159, 49, 103, 89, 34, 108, 141, 139, 42, 243, 39, 3, 160]), slot_b_sha3_256_digest: Some([199, 73, 138, 93, 79, 203, 253, 141, 202, 61, 61, 211, 109, 72, 13, 175, 77, 83, 108, 29, 129, 66, 87, 70, 250, 45, 198, 129, 175, 244, 56, 245]) }) }), component: faux-mgs
hubris archive: 1e970fe15ac467b9
serial number: BRM42220036
model: 913-0000019
revision: 6
base MAC address: a8:40:25:04:02:02
power state: A0
rot: Ok(RotStateV2 {
active: A,
persistent_boot_preference: A,
pending_persistent_boot_preference: None,
transient_boot_preference: None,
slot_a_sha3_256_digest: Some("ac8d9e1c4e884f8f1abba6e43f5f26da2de52c9f316759226c8d8b2af32703a0"),
slot_b_sha3_256_digest: Some("c7498a5d4fcbfd8dca3d3dd36d480daf4d536c1d81425746fa2dc681aff438f5"),
}
)
eliza@castle ~ $ pilot sp exec -e 'reset' BRM42220036
Jul 28 17:46:31.323 INFO creating SP handle on interface london_sw0tp0, component: faux-mgs
Jul 28 17:46:31.325 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:202%3]:11111, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:46:31.326 INFO SP is prepared to reset, component: faux-mgs
Jul 28 17:46:31.331 INFO using watchdog during reset, watchdog_timeout_ms: 15000, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:46:33.332 INFO disabling watchdog, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:46:33.337 INFO SP reset complete, component: faux-mgs
reset complete
eliza@castle ~ $ pilot sp exec -e 'state' BRM42220036
Jul 28 17:46:41.795 INFO creating SP handle on interface london_sw0tp0, component: faux-mgs
Jul 28 17:46:41.797 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:202%3]:11111, interface: london_sw0tp0, component: faux-mgs
Jul 28 17:46:41.803 INFO V2(SpStateV2 { hubris_archive_id: [186, 222, 106, 146, 117, 207, 205, 253], serial_number: [66, 82, 77, 52, 50, 50, 50, 48, 48, 51, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], model: [57, 49, 51, 45, 48, 48, 48, 48, 48, 49, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], revision: 6, base_mac_address: [168, 64, 37, 4, 2, 2], power_state: A0, rot: Ok(RotStateV2 { active: A, persistent_boot_preference: A, pending_persistent_boot_preference: None, transient_boot_preference: None, slot_a_sha3_256_digest: Some([172, 141, 158, 28, 78, 136, 79, 143, 26, 187, 166, 228, 63, 95, 38, 218, 45, 229, 44, 159, 49, 103, 89, 34, 108, 141, 139, 42, 243, 39, 3, 160]), slot_b_sha3_256_digest: Some([199, 73, 138, 93, 79, 203, 253, 141, 202, 61, 61, 211, 109, 72, 13, 175, 77, 83, 108, 29, 129, 66, 87, 70, 250, 45, 198, 129, 175, 244, 56, 245]) }) }), component: faux-mgs
hubris archive: bade6a9275cfcdfd
serial number: BRM42220036
model: 913-0000019
revision: 6
base MAC address: a8:40:25:04:02:02
power state: A0
rot: Ok(RotStateV2 {
active: A,
persistent_boot_preference: A,
pending_persistent_boot_preference: None,
transient_boot_preference: None,
slot_a_sha3_256_digest: Some("ac8d9e1c4e884f8f1abba6e43f5f26da2de52c9f316759226c8d8b2af32703a0"),
slot_b_sha3_256_digest: Some("c7498a5d4fcbfd8dca3d3dd36d480daf4d536c1d81425746fa2dc681aff438f5"),
}
)
eliza@castle ~ $(I also did some messing around with the Paris PSC on Friday but forgot to grab that and post it here) |
|
Okay, I've also done a quick attempt at smoke-testing that the RoT works by flashing a Gimlet with a RoT image built from this branch, using RoT test console sessioneliza@castle ~ $ export PILOT_RACK=london
eliza@castle ~ $ pilot op update -I BRM42220030 -p rot rot-a-signed.zip rot-b-signed.zip
Manifest {
archive: "rot-a-signed.zip",
image_id: "a3e5194ffada2e40",
git_rev: "e43006089377332ef302caa42db8b3578f2d92a3",
board: "oxide-rot-1",
name: "oxide-rot-1",
image: "a",
}
Manifest {
archive: "rot-b-signed.zip",
image_id: "8685a110d9fe94da",
git_rev: "e43006089377332ef302caa42db8b3578f2d92a3",
board: "oxide-rot-1",
name: "oxide-rot-1",
image: "b",
}
gimlet BRM42220030 needs image installed in slot B
gimlet BRM42220030 image installed in slot B
gimlet BRM42220030 needs slot B activated
gimlet BRM42220030 needs reset
eliza@castle ~ $ pilot host ls
INTERFACE IP SERIAL IMAGE
london_host0 fe80::eaea:6aff:fe09:8567 BRM42220030 ci c65212d/dcce35b 2025-07-14 15:04
london_host1 fe80::eaea:6aff:fe09:865a BRM42220036 ci c65212d/dcce35b 2025-07-14 15:04
eliza@castle ~ $ pilot host copy to -i verifier-cli -o /opt/oxide/verifier-cli BRM42220030
4294901764 BRM42220030 ok
eliza@castle ~ $ pilot host login BRM42220030
#####
## ##
## # ## ## ##
## # ## ## ## Oxide Computer Company
## # ## ### Engineering
## ## ## ##
##### ## ## Compute Sled
BRM42220030 # /opt/oxide/verifier-cli --interface ipcc log
{"index":0,"measurements":[{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}]}
BRM42220030 # exit
logout
eliza@castle ~ $ pilot sp exec -e 'reset' BRM42220030
Jul 28 19:04:08.059 INFO creating SP handle on interface london_sw0tp0, component: faux-mgs
Jul 28 19:04:08.062 INFO initial discovery complete, addr: [fe80::aa40:25ff:fe04:247%3]:11111, interface: london_sw0tp0, component: faux-mgs
Jul 28 19:04:08.062 INFO SP is prepared to reset, component: faux-mgs
Jul 28 19:04:10.065 INFO SP reset complete, component: faux-mgs
reset complete
eliza@castle ~ $ pilot host copy to -i verifier-cli -o /opt/oxide/verifier-cli BRM42220030
4294901764 BRM42220030 ok
eliza@castle ~ $ pilot host login BRM42220030
#####
## ##
## # ## ## ##
## # ## ## ## Oxide Computer Company
## # ## ### Engineering
## ## ## ##
##### ## ## Compute Sled
BRM42220030 # /opt/oxide/verifier-cli --interface ipcc log
{"index":1,"measurements":[{"Sha3_256":[224,81,51,144,21,39,245,134,87,31,176,220,215,234,15,112,13,58,188,183,188,59,51,102,42,181,228,200,9,14,34,250]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"Sha3_256":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}]}
BRM42220030 # exit
logout
eliza@castle ~ $(Note that I snipped out a bit of me running |
|
Oh hey! I stumbled upon this while poking at moving off nightly. I've only just read through this once, but it looks like there's a back-compat reason to need |
|
Fun! I rebased my work to move to nightly on this branch and it builds quite nicely. I obviously don't have production hardware to test upon, but I'm optimistic it's useful. :) |
| // | ||
| // Round up here just to be safe | ||
| let rounded = ((cnt + 7) / 8) * 8; | ||
| let rounded = cnt.div_ceil(8) * 8; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is correct but spot check this to make sure we have done bytes to bits correctly?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks like the implementation of div_ceil is different (branchier :/) than (numerator + (divisor - 1)) / divisor, but it seems to be equivalent:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=91e5d5d659ec9ef949f453f5fbcda266
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's equivalent in the main but if cnt is greater than usize::MAX - 7 the prior code panicks/overflows. div_ceil avoids that case by only adding to a value that's already been divided.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With the move to the newer compiler imminent, I'd take a look at .next_multiple_of, myself.
labbott
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for doing this work, at this point I think we'll get more mileage out of merging and testing
This commit makes a small number of updates necessary to adopt the stable toolchain: * Sets the stable toolchain as the default by config. Invoking nightly will require using `+nightly-2025-07-20` per oxidecomputer#2169. * Removes references to nightly requirements in the FAQ, and adds a note about enabling stack size checking being the only thing that requires nightly. * Removes code that passes the `-Z` flag to cargo to enable nightly features. * Updates `#[naked]` and `asm!` usage to stable convention, which is `#[unsafe(naked)]` and `naked_asm!`. Any affected assembly sections are expected to diverge (which was previously handled by `options(noreturn)`) or end with a trap (in the case of `_start`). * Replaces `used(linker)` with `used`, which is [equivalent]. * Adds a code path in the `dist` build task to build endoscope if the task being built has a name `drv_lpc55_swd`, upon which it depends. This is because [artifact dependencies] are not stable, but `lcp55-swd` depends on having the endoscope binary available to its build script. * Gates stack size emission and check behind a `rustc_version` channel check. Passing `+nightly-2025-07-20` to `cargo` (when invoking xtask) will enable the check. [equivalent]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/attrs/data_structures/enum.UsedBy.html [artifact dependencies]: https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#artifact-dependencies
Currently, Hubris' Rust toolchain is pinned to
nightly-2024-09-17,which is from 10 months ago. This is kind of unfortunate, especially
because that nightly is too old to support the Rust 2024 edition, which
means we cannot update our dependencies on any crates where the latest
version is built with Rust 2024.
Beyond just updating the toolchain, there were some noteworthy changes:
#[unsafe(naked)]. Inline assembly in naked functions must now usecore::arch::naked_asm!rather than normalasm!. As far as I cantell, the only difference between this and regular
asm!is that itdoes not support
options(noreturn), as I believe thenaked_asm!block kind of implies at least some of the codegen differences for
noreturn.statics showed up in
stm32h7-update-server, where we were using[T]::as_ptr()on zero-sized slices in mutable statics that were usedto get linker-generated addresses.
[T]::as_ptr()takes an&selfreceiver, so this was generating a temporary shared reference to the
mutable static. I changed this to use
&raw const, which takes theaddress of the static without creating a shared reference.
toolchain due to a change in the behavior of the
#[used]attribute which revealed an underlying issue where ringbufs were
not zero initialized. These issues were resolved separately in
Remove unused
#[used]from things that used #2167, Make more ringbufs zero-initialized, saving flash #2168, ringbuf: Remove unused#[used]we weren't using #2170, and Update toolchain tonightly-2025-07-20idolatry#65.In addition, there were a variety of unremarkable linting changes,
including slightly better dead code detection (which detected some new
dead code), and some annoying clippy nonsense.
Note that this branch requires oxidecomputer/idolatry#65, which updates
idolto generate code that doesn't emit warnings with the newtoolchain, and fixes some of the flash/RAM size regression in code
generated by
idol.Fixes #2165