diff --git a/Cargo.lock b/Cargo.lock index daa79217d5..4e903e82af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6,11 +6,11 @@ version = 4 name = "abi" version = "0.1.0" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "byteorder", "phash", "serde", - "zerocopy 0.8.26", + "zerocopy 0.8.27", ] [[package]] @@ -178,8 +178,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -271,9 +271,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" [[package]] name = "bitvec" @@ -337,7 +337,7 @@ dependencies = [ name = "build-kconfig" version = "0.1.0" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "serde", ] @@ -1007,8 +1007,8 @@ dependencies = [ "sha3", "tlvc", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1026,8 +1026,8 @@ dependencies = [ "stm32h7", "tlvc", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1069,8 +1069,8 @@ dependencies = [ "serde", "stm32h7", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1105,8 +1105,8 @@ dependencies = [ "task-jefe-api", "task-packrat-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1116,8 +1116,8 @@ dependencies = [ "counters", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1131,8 +1131,8 @@ dependencies = [ "idol-runtime", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1147,8 +1147,8 @@ dependencies = [ "idol-runtime", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1164,8 +1164,8 @@ dependencies = [ "sha3", "tlvc", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1182,7 +1182,7 @@ dependencies = [ "num-traits", "ringbuf", "userlib", - "zerocopy 0.8.26", + "zerocopy 0.8.27", ] [[package]] @@ -1205,8 +1205,8 @@ dependencies = [ "num-traits", "ringbuf", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1216,8 +1216,8 @@ dependencies = [ "drv-fpga-api", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1236,8 +1236,8 @@ dependencies = [ "serde", "stm32h7", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1277,8 +1277,8 @@ dependencies = [ "task-jefe-api", "task-packrat-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1301,8 +1301,8 @@ dependencies = [ "task-jefe-api", "task-packrat-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1315,8 +1315,8 @@ dependencies = [ "idol-runtime", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1334,8 +1334,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1346,8 +1346,8 @@ dependencies = [ "counters", "drv-i2c-types", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1365,8 +1365,8 @@ dependencies = [ "smbus-pec", "task-power-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1411,8 +1411,8 @@ dependencies = [ "serde", "static_assertions", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1430,8 +1430,8 @@ dependencies = [ "mutable-statics", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1449,8 +1449,8 @@ dependencies = [ "num-traits", "ringbuf", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1463,8 +1463,8 @@ dependencies = [ "drv-oxide-vpd", "idol", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1487,8 +1487,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1505,8 +1505,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1519,8 +1519,8 @@ dependencies = [ "lpc55-pac", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1537,8 +1537,8 @@ dependencies = [ "rand_chacha", "rand_core", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1558,8 +1558,8 @@ dependencies = [ "lpc55-pac", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1577,8 +1577,8 @@ dependencies = [ "ringbuf", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1612,8 +1612,8 @@ dependencies = [ "static_assertions", "task-jefe-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1622,7 +1622,7 @@ version = "0.1.0" dependencies = [ "anyhow", "attest-api", - "bitflags 2.9.1", + "bitflags 2.9.4", "build-lpc55pins", "build-util", "call_rustfmt", @@ -1646,8 +1646,8 @@ dependencies = [ "serde", "static_assertions", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1662,8 +1662,8 @@ dependencies = [ "num-traits", "task-jefe-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1675,8 +1675,8 @@ dependencies = [ "idol", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1695,8 +1695,8 @@ dependencies = [ "serde", "stage0-handoff", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1714,15 +1714,15 @@ dependencies = [ "nb 1.0.0", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] name = "drv-mb85rsxx-fram" version = "0.1.0" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "counters", "drv-spi-api", ] @@ -1740,8 +1740,8 @@ dependencies = [ "idol-runtime", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1753,8 +1753,8 @@ dependencies = [ "idol", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1770,8 +1770,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1798,8 +1798,8 @@ dependencies = [ "ringbuf", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1816,8 +1816,8 @@ dependencies = [ "num-traits", "ringbuf", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1835,8 +1835,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1860,8 +1860,8 @@ dependencies = [ "serde", "serde_json", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1877,8 +1877,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1892,8 +1892,8 @@ dependencies = [ "num-traits", "task-jefe-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1910,8 +1910,8 @@ dependencies = [ "userlib", "vsc7448", "vsc85xx", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1920,8 +1920,8 @@ version = "0.1.0" dependencies = [ "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1931,8 +1931,8 @@ dependencies = [ "drv-onewire", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -1944,8 +1944,8 @@ dependencies = [ "idol", "ringbuf", "tlvc", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2021,8 +2021,8 @@ dependencies = [ "num-traits", "rand_core", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2041,8 +2041,8 @@ dependencies = [ "num-traits", "ringbuf", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2056,8 +2056,8 @@ dependencies = [ "idol", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2081,8 +2081,8 @@ dependencies = [ "userlib", "vsc7448-pac", "vsc85xx", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2105,8 +2105,8 @@ dependencies = [ "serde", "serde_json", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2133,8 +2133,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2162,8 +2162,8 @@ dependencies = [ "ringbuf", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2176,8 +2176,8 @@ dependencies = [ "idol-runtime", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2198,8 +2198,8 @@ dependencies = [ "ringbuf", "task-config", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2211,8 +2211,8 @@ dependencies = [ "idol-runtime", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2241,8 +2241,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2273,8 +2273,8 @@ dependencies = [ "tlvc", "unwrap-lite", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2285,8 +2285,8 @@ dependencies = [ "stm32f3", "stm32f4", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2298,8 +2298,8 @@ dependencies = [ "stm32f3", "stm32f4", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2313,8 +2313,8 @@ dependencies = [ "num-traits", "stm32g0", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2361,8 +2361,8 @@ dependencies = [ "stm32h7", "userlib", "vcell", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2380,8 +2380,8 @@ dependencies = [ "num-traits", "stm32h7", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2392,8 +2392,8 @@ dependencies = [ "stm32h7", "userlib", "vcell", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2410,8 +2410,8 @@ dependencies = [ "stm32h7", "task-packrat-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2422,8 +2422,8 @@ dependencies = [ "ringbuf", "stm32h7", "vcell", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2438,8 +2438,8 @@ dependencies = [ "idol-runtime", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2469,7 +2469,7 @@ dependencies = [ "stm32h7", "syn 2.0.98", "userlib", - "zerocopy 0.8.26", + "zerocopy 0.8.27", ] [[package]] @@ -2496,8 +2496,8 @@ dependencies = [ "ssmarshal", "static-cell", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2524,8 +2524,8 @@ dependencies = [ "serde", "stage0-handoff", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2546,8 +2546,8 @@ dependencies = [ "stm32g0", "stm32h7", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2565,8 +2565,8 @@ dependencies = [ "stm32g0", "stm32h7", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2594,7 +2594,7 @@ dependencies = [ name = "drv-stm32xx-sys" version = "0.1.0" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "build-stm32xx-sys", "build-util", "cfg-if", @@ -2610,8 +2610,8 @@ dependencies = [ "stm32h7", "task-jefe-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2628,8 +2628,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2653,8 +2653,8 @@ dependencies = [ "task-sensor-api", "transceiver-messages", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2687,8 +2687,8 @@ dependencies = [ "task-thermal-api", "transceiver-messages", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2705,8 +2705,8 @@ dependencies = [ "ringbuf", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2727,8 +2727,8 @@ dependencies = [ "stm32f4", "task-config", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2740,8 +2740,8 @@ dependencies = [ "idol", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2758,8 +2758,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2775,8 +2775,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2864,7 +2864,7 @@ name = "endoscope-abi" version = "0.1.0" dependencies = [ "sha3", - "zerocopy 0.8.26", + "zerocopy 0.8.27", ] [[package]] @@ -3009,17 +3009,17 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "gateway-ereport-messages" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/management-gateway-service#57ffd1c24f3ad1919fb4a605d5a501f2c5deb54c" +source = "git+https://github.com/oxidecomputer/management-gateway-service#831d4be4d3a851853ee2c62451f63f2fcfb4a30b" dependencies = [ - "zerocopy 0.8.26", + "zerocopy 0.8.27", ] [[package]] name = "gateway-messages" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/management-gateway-service#83fe1885c9916cebbee261c47a09d832d75b7df0" +source = "git+https://github.com/oxidecomputer/management-gateway-service?rev=50a438ad1e502135036ec8b88b208dd44d7df2c1#50a438ad1e502135036ec8b88b208dd44d7df2c1" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "hubpack", "serde", "serde-big-array 0.5.1", @@ -3029,7 +3029,7 @@ dependencies = [ "strum", "strum_macros", "uuid", - "zerocopy 0.8.26", + "zerocopy 0.8.27", ] [[package]] @@ -3219,6 +3219,12 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + [[package]] name = "hif" version = "0.3.1" @@ -3251,7 +3257,7 @@ dependencies = [ name = "host-sp-messages" version = "0.1.0" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "counters", "drv-i2c-types", "fletcher", @@ -3265,8 +3271,8 @@ dependencies = [ "serde_repr", "static_assertions", "unwrap-lite", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -3335,8 +3341,8 @@ dependencies = [ "serde", "serde-big-array 0.5.1", "static_assertions", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -3391,7 +3397,7 @@ source = "git+https://github.com/oxidecomputer/idolatry.git#f67fffe2bd917479a476 dependencies = [ "counters", "userlib", - "zerocopy 0.8.26", + "zerocopy 0.8.27", ] [[package]] @@ -3497,7 +3503,7 @@ dependencies = [ "abi", "anyhow", "armv8-m-mpu", - "bitflags 2.9.1", + "bitflags 2.9.4", "build-kconfig", "build-util", "byteorder", @@ -3515,8 +3521,8 @@ dependencies = [ "ssmarshal", "syn 2.0.98", "unwrap-lite", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -3570,8 +3576,8 @@ dependencies = [ "static_assertions", "unwrap-lite", "vcell", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", "zeroize", ] @@ -3635,8 +3641,8 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -3692,8 +3698,8 @@ dependencies = [ "static_assertions", "toml 0.9.6", "unwrap-lite", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", "zeroize", ] @@ -3710,6 +3716,7 @@ dependencies = [ "drv-lpc55-syscon-api", "drv-lpc55-update-api", "drv-update-api", + "hex-literal", "hubpack", "idol", "idol-runtime", @@ -3724,8 +3731,8 @@ dependencies = [ "task-jefe-api", "tlvc", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -4145,7 +4152,7 @@ version = "0.1.0" dependencies = [ "hubpack", "serde", - "zerocopy 0.8.26", + "zerocopy 0.8.27", ] [[package]] @@ -5192,8 +5199,8 @@ dependencies = [ "serde", "stm32h7", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5204,20 +5211,19 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "strum" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" [[package]] name = "strum_macros" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "rustversion", "syn 2.0.98", ] @@ -5278,8 +5284,8 @@ dependencies = [ "static-cell", "unwrap-lite", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5345,8 +5351,8 @@ dependencies = [ "task-vpd-api", "update-buffer", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5363,8 +5369,8 @@ dependencies = [ "serde", "ssmarshal", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5386,8 +5392,8 @@ dependencies = [ "task-packrat-api", "task-sensor-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5413,8 +5419,8 @@ dependencies = [ "task-jefe-api", "task-net-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5433,8 +5439,8 @@ dependencies = [ "ringbuf", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5449,8 +5455,8 @@ dependencies = [ "ringbuf", "task-packrat-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5533,8 +5539,8 @@ dependencies = [ "static-cell", "test-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5581,8 +5587,8 @@ dependencies = [ "task-sensor-api", "tlvc", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5597,8 +5603,8 @@ dependencies = [ "num-traits", "ssmarshal", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5630,8 +5636,8 @@ dependencies = [ "ssmarshal", "task-jefe-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5649,8 +5655,8 @@ dependencies = [ "serde", "ssmarshal", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5680,8 +5686,8 @@ dependencies = [ "vsc7448", "vsc7448-pac", "vsc85xx", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5728,8 +5734,8 @@ dependencies = [ "userlib", "vsc7448-pac", "vsc85xx", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5751,8 +5757,8 @@ dependencies = [ "smoltcp", "task-packrat-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5795,8 +5801,8 @@ dependencies = [ "static_assertions", "task-packrat-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5816,8 +5822,8 @@ dependencies = [ "oxide-barcode", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5869,8 +5875,8 @@ dependencies = [ "task-power-api", "task-sensor-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5888,8 +5894,8 @@ dependencies = [ "static_assertions", "task-sensor-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5912,8 +5918,8 @@ dependencies = [ "serde", "task-sensor-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5933,8 +5939,8 @@ dependencies = [ "num-traits", "serde", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5951,8 +5957,8 @@ dependencies = [ "ringbuf", "task-sensor-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5968,8 +5974,8 @@ dependencies = [ "task-net-api", "task-packrat-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -5999,7 +6005,7 @@ name = "task-thermal" version = "0.1.0" dependencies = [ "anyhow", - "bitflags 2.9.1", + "bitflags 2.9.4", "build-i2c", "build-util", "cortex-m", @@ -6021,8 +6027,8 @@ dependencies = [ "task-sensor-api", "task-thermal-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6040,8 +6046,8 @@ dependencies = [ "serde", "task-sensor-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6072,8 +6078,8 @@ dependencies = [ "task-net-api", "task-packrat-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6097,8 +6103,8 @@ dependencies = [ "idol", "task-net-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6120,8 +6126,8 @@ dependencies = [ "serde", "task-validate-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6141,8 +6147,8 @@ dependencies = [ "serde", "task-sensor-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6162,8 +6168,8 @@ dependencies = [ "ringbuf", "task-vpd-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6177,8 +6183,8 @@ dependencies = [ "idol-runtime", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6207,8 +6213,8 @@ dependencies = [ "build-util", "num-traits", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6221,8 +6227,8 @@ dependencies = [ "num-traits", "test-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6237,8 +6243,8 @@ dependencies = [ "serde", "ssmarshal", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6253,8 +6259,8 @@ dependencies = [ "ssmarshal", "test-idol-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6270,8 +6276,8 @@ dependencies = [ "ringbuf", "test-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6291,8 +6297,8 @@ dependencies = [ "test-api", "test-idol-api", "userlib", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6574,7 +6580,7 @@ name = "transceiver-messages" version = "0.1.1" source = "git+https://github.com/oxidecomputer/transceiver-control/#c5564eb96ddc7887a02596cc039662c87e906d0c" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "hubpack", "serde", ] @@ -6632,8 +6638,8 @@ dependencies = [ "ssmarshal", "unwrap-lite", "volatile-const", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -6644,9 +6650,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.16.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" [[package]] name = "vcell" @@ -6722,8 +6728,8 @@ dependencies = [ "userlib", "vsc-err", "vsc7448-pac", - "zerocopy 0.8.26", - "zerocopy-derive 0.8.26", + "zerocopy 0.8.27", + "zerocopy-derive 0.8.27", ] [[package]] @@ -7120,7 +7126,7 @@ dependencies = [ "toml-task", "toml_edit 0.23.5", "walkdir", - "zerocopy 0.8.26", + "zerocopy 0.8.27", "zip", ] @@ -7146,11 +7152,11 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ - "zerocopy-derive 0.8.26", + "zerocopy-derive 0.8.27", ] [[package]] @@ -7177,9 +7183,9 @@ dependencies = [ [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 9a739c2308..c870978ea6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,7 +50,7 @@ array-init = { version = "2.1.0" } arrayvec = { version = "0.7.4", default-features = false } atty = { version = "0.2", default-features = false } bitfield = { version = "0.13", default-features = false } -bitflags = { version = "2.5.0", default-features = false } +bitflags = { version = "2.9.1", default-features = false } bstringify = { version = "0.1.2", default-features = false } byteorder = { version = "1.3.4", default-features = false } bzip2-rs = { version = "0.1.2", default-features = false } @@ -82,6 +82,7 @@ getrandom = { version = "0.2", default-features = false } goblin = { version = "0.4.3", default-features = true } # goblin::Object doesn't work without everything enabled heapless = { version = "0.7.17", default-features = false } heck = { version = "0.5.0", default-features = false } +hex-literal = { version = "0.4.1" } hkdf = { version = "0.12", default-features = false } hmac = { version = "0.12.1", default-features = false } hubpack = { version = "0.1.2", default-features = false } @@ -145,7 +146,7 @@ zip = { version = "0.6", default-features = false, features = ["bzip2", "deflate # Oxide forks and repos attest-data = { git = "https://github.com/oxidecomputer/dice-util", default-features = false, version = "0.4.0" } dice-mfg-msgs = { git = "https://github.com/oxidecomputer/dice-util", default-features = false, version = "0.2.1" } -gateway-messages = { git = "https://github.com/oxidecomputer/management-gateway-service", default-features = false, features = ["smoltcp"] } +gateway-messages = { git = "https://github.com/oxidecomputer/management-gateway-service", default-features = false, features = ["smoltcp"], rev = "50a438ad1e502135036ec8b88b208dd44d7df2c1" } gateway-ereport-messages = { git = "https://github.com/oxidecomputer/management-gateway-service", default-features = false } gimlet-inspector-protocol = { git = "https://github.com/oxidecomputer/gimlet-inspector-protocol", version = "0.1.0" } hif = { git = "https://github.com/oxidecomputer/hif", default-features = false } diff --git a/app/lpc55xpresso/app.toml b/app/lpc55xpresso/app.toml index a3b9fa2b2a..9f6f360435 100644 --- a/app/lpc55xpresso/app.toml +++ b/app/lpc55xpresso/app.toml @@ -47,10 +47,10 @@ start = true [tasks.update_server] name = "lpc55-update-server" priority = 3 -max-sizes = {flash = 26720, ram = 16704} stacksize = 8192 start = true sections = {bootstate = "usbsram"} +extern-regions = ["transient_override"] uses = ["flash_controller", "hash_crypt"] notifications = ["flash-irq", "hashcrypt-irq"] interrupts = {"flash_controller.irq" = "flash-irq", "hash_crypt.irq" = "hashcrypt-irq"} diff --git a/app/oxide-rot-1/app-dev.toml b/app/oxide-rot-1/app-dev.toml index e1aaa95708..57d6ca0b04 100644 --- a/app/oxide-rot-1/app-dev.toml +++ b/app/oxide-rot-1/app-dev.toml @@ -55,6 +55,7 @@ priority = 3 stacksize = 8192 start = true sections = {bootstate = "usbsram"} +extern-regions = ["transient_override"] uses = ["flash_controller", "hash_crypt"] notifications = ["flash-irq", "hashcrypt-irq"] interrupts = {"flash_controller.irq" = "flash-irq", "hash_crypt.irq" = "hashcrypt-irq"} diff --git a/app/oxide-rot-1/app.toml b/app/oxide-rot-1/app.toml index c57eec8590..f6aa12cb97 100644 --- a/app/oxide-rot-1/app.toml +++ b/app/oxide-rot-1/app.toml @@ -43,6 +43,7 @@ priority = 3 stacksize = 8192 start = true sections = {bootstate = "usbsram"} +extern-regions = ["transient_override"] uses = ["flash_controller", "hash_crypt"] notifications = ["flash-irq", "hashcrypt-irq"] interrupts = {"flash_controller.irq" = "flash-irq", "hash_crypt.irq" = "hashcrypt-irq"} diff --git a/app/rot-carrier/app.toml b/app/rot-carrier/app.toml index 3baaacf7ec..925ac4630d 100644 --- a/app/rot-carrier/app.toml +++ b/app/rot-carrier/app.toml @@ -43,6 +43,7 @@ priority = 3 stacksize = 8192 start = true sections = {bootstate = "usbsram"} +extern-regions = ["transient_override"] uses = ["flash_controller", "hash_crypt"] notifications = ["flash-irq", "hashcrypt-irq"] interrupts = {"flash_controller.irq" = "flash-irq", "hash_crypt.irq" = "hashcrypt-irq"} diff --git a/chips/lpc55/memory.toml b/chips/lpc55/memory.toml index 47be0adc47..c6322ef47d 100644 --- a/chips/lpc55/memory.toml +++ b/chips/lpc55/memory.toml @@ -93,6 +93,22 @@ write = true execute = false dma = true +[[transient_override]] +name = "a" +address = 0x2003ffe0 +size = 32 +read = true +write = true +execute = false + +[[transient_override]] +name = "b" +address = 0x2003ffe0 +size = 32 +read = true +write = true +execute = false + # Info about the images loaded into flash and dumped by stage0 into USB SRAM # for hubris use. [[usbsram]] diff --git a/drv/lpc55-sprot-server/src/handler.rs b/drv/lpc55-sprot-server/src/handler.rs index eab40b4c88..9ba41809df 100644 --- a/drv/lpc55-sprot-server/src/handler.rs +++ b/drv/lpc55-sprot-server/src/handler.rs @@ -679,6 +679,16 @@ impl<'a> Handler { Ok((RspBody::State(out.map(StateRsp::LifecycleState)), None)) } + ReqBody::Update(UpdateReq::ComponentSwitchCancelPending { + component, + slot, + duration, + }) => { + self.update.component_switch_cancel_pending( + component, slot, duration, + )?; + Ok((RspBody::Ok, None)) + } } } diff --git a/drv/lpc55-update-server/Cargo.toml b/drv/lpc55-update-server/Cargo.toml index caaa5dfd97..092d27c5fb 100644 --- a/drv/lpc55-update-server/Cargo.toml +++ b/drv/lpc55-update-server/Cargo.toml @@ -21,6 +21,7 @@ mutable-statics = { path = "../../lib/mutable-statics" } cfg-if.workspace = true hubpack.workspace = true +hex-literal.workspace = true idol-runtime.workspace = true lpc55-pac.workspace = true num-traits.workspace = true diff --git a/drv/lpc55-update-server/src/main.rs b/drv/lpc55-update-server/src/main.rs index 554c1283b1..dc2d6899b0 100644 --- a/drv/lpc55-update-server/src/main.rs +++ b/drv/lpc55-update-server/src/main.rs @@ -18,6 +18,7 @@ use drv_lpc55_update_api::{ SlotId, SwitchDuration, UpdateTarget, VersionedRotBootInfo, }; use drv_update_api::UpdateError; +use hex_literal::hex; use idol_runtime::{ ClientError, Leased, LenLimit, NotificationHandler, RequestError, R, W, }; @@ -40,6 +41,13 @@ const PAGE_SIZE: u32 = BYTES_PER_FLASH_PAGE as u32; #[link_section = ".bootstate"] static BOOTSTATE: MaybeUninit<[u8; 0x1000]> = MaybeUninit::uninit(); +// The TRANSIENT_OVERRIDE field is always initialized. +// It contains either the Bootleby BootDecisionLog or one of our +// settings/clearings of the transient override preference. +#[used] +#[link_section = ".transient_override"] +static mut TRANSIENT_OVERRIDE: MaybeUninit<[u8; 32]> = MaybeUninit::uninit(); + #[derive(Copy, Clone, PartialEq)] enum UpdateState { NoUpdate, @@ -495,8 +503,45 @@ impl idl::InOrderUpdateImpl for ServerImpl<'_> { self.image = match (component, slot) { (RotComponent::Hubris, SlotId::A) - | (RotComponent::Hubris, SlotId::B) - | (RotComponent::Stage0, SlotId::B) => Some((component, slot)), + | (RotComponent::Hubris, SlotId::B) => { + // Fail early on attempt to update the running image. + if same_image(component, slot) { + return Err(UpdateError::InvalidSlotIdForOperation.into()); + } + + // Rollback protection will be implemented by refusing to set + // boot preference to an image that has a lower EPOC value in + // its caboose. + // Setting the boot preference before updating would sidestep that + // protection. So, we will fail the prepare step if any + // preference settings are selecting the update target image. + // + // After the update, the boot image selection will be based on: + // - there being only one properly signed image, or + // - transient boot selection (highest priority), or + // - pending persistent selection (altering the persistent + // selection) + // - persistent preference if neither of the above was used. + + let (persistent, pending_persistent, transient) = + self.boot_preferences()?; + + // The transient preference must not select the update target. + if transient == Some(slot) { + return Err(UpdateError::InvalidPreferredSlotId.into()); + } + // If there is a pending persistent preference, it must + // not select the update target. + if pending_persistent == Some(slot) { + return Err(UpdateError::InvalidPreferredSlotId.into()); + } else if slot == persistent { + // If there is no pending persistent preference, then the + // persistent preference must select the currently active image. + return Err(UpdateError::InvalidPreferredSlotId.into()); + } + Some((component, slot)) + } + (RotComponent::Stage0, SlotId::B) => Some((component, slot)), _ => return Err(UpdateError::InvalidSlotIdForOperation.into()), }; self.state = UpdateState::InProgress; @@ -529,6 +574,23 @@ impl idl::InOrderUpdateImpl for ServerImpl<'_> { } } } + + fn component_switch_cancel_pending( + &mut self, + _: &userlib::RecvMessage, + component: RotComponent, + slot: SlotId, + duration: SwitchDuration, + ) -> Result<(), RequestError> { + match component { + RotComponent::Hubris => { + self.switch_default_hubris_image_cancel_pending(slot, duration) + } + RotComponent::Stage0 => { + Err(UpdateError::InvalidSlotIdForOperation.into()) + } + } + } } impl NotificationHandler for ServerImpl<'_> { @@ -573,7 +635,7 @@ impl ServerImpl<'_> { Ok(val) } - // Return the persistent and transient boot preferences + // Return the persistent, pending_persistent, and transient boot preferences fn boot_preferences( &mut self, ) -> Result<(SlotId, Option, Option), UpdateError> { @@ -626,9 +688,7 @@ impl ServerImpl<'_> { None }; - // We only support persistent override at this point - // We need to read the magic ram value to fill this in. - let transient_boot_preference = None; + let transient_boot_preference = get_hubris_transient_override(); Ok(( persistent_boot_preference, @@ -905,12 +965,25 @@ impl ServerImpl<'_> { slot: SlotId, duration: SwitchDuration, ) -> Result<(), RequestError> { + // Note: Rollback policy will be checking epoch values before activating. + match duration { SwitchDuration::Once => { - // TODO deposit command token into buffer - return Err(UpdateError::NotImplemented.into()); + if get_hubris_transient_override().is_some() { + // Maybe something is out-of-sync in the control plane? + // An error returned here can help narrow that down up there. + // The caller must clear the existing pending preference. + return Err(UpdateError::AlreadyPending.into()); + } else { + set_hubris_transient_override(Some(slot)); + } } SwitchDuration::Forever => { + // Caller must first cancel pending persistent state if present. + if let (_, Some(_), _) = self.boot_preferences()? { + return Err(UpdateError::AlreadyPending.into()); + } + // Locate and return the authoritative CFPA flash word number // and the CFPA version for that flash number. // @@ -1027,6 +1100,71 @@ impl ServerImpl<'_> { Ok(()) } + + /// Cancel pending transient or persistent Hubris image selection. + fn switch_default_hubris_image_cancel_pending( + &mut self, + slot: SlotId, + duration: SwitchDuration, + ) -> Result<(), RequestError> { + // Note: Rollback policy will be checking epoch values before activating. + match duration { + SwitchDuration::Once => { + // Is there a pending transient boot selection? + // If it matches the one being cancelled + if let Some(transient_selection) = + get_hubris_transient_override() + { + if transient_selection == slot { + set_hubris_transient_override(None); + Ok(()) + } else { + Err(UpdateError::InvalidPreferredSlotId.into()) + } + } else { + Err(UpdateError::NonePending.into()) + } + } + SwitchDuration::Forever => { + // Note: Scratch page data does not have to be preserved unless/until we have + // multiple fields with pending updates. Right now, we only implement the + // pending_persistent bit. IMAGE_KEY_REVOKE and RKTH_REVOKE + // fields are not yet managed. + + if let (_, Some(pending_persistent), _) = + self.boot_preferences()? + { + if slot == pending_persistent { + // Cancel the CFPA update by erase/writing zeros to the + // scratch page. + // As a result, the scratch page verison will never be + // higher than the active page version. + // Also, we won't fix the CRC so it won't be deemed + // valid by the boot ROM in any case. + let cfpa = [[0u32; 4]; 512 / 16]; + let cfpa_bytes: &[u8] = cfpa.as_bytes(); + let cfpa_bytes: &[u8; BLOCK_SIZE_BYTES] = + cfpa_bytes.try_into().unwrap_lite(); + self.flash + .write_page( + CFPA_SCRATCH_FLASH_ADDR, + cfpa_bytes, + wait_for_flash_interrupt, + ) + .map_err(|_| UpdateError::FlashError.into()) + } else { + // Slot mismatch. + // Fail assuming that the control plane was working with stale information. + Err(UpdateError::InvalidPreferredSlotId.into()) + } + } else { + // No pending persistent prefereice. + // Fail assuming that the control plane was working with stale information. + Err(UpdateError::NonePending.into()) + } + } + } + } } // Return the preferred slot to boot from for a given CFPA boot selection @@ -1337,6 +1475,59 @@ fn bootstate() -> Result { RotBootStateV2::load_from_addr(addr) } +extern "C" { + // Symbols injected by the linker. + // + // This requires adding `extern-regions = ["transient_override"]` to the task config. + pub static mut __REGION_TRANSIENT_OVERRIDE_BASE: [u32; 0]; +} + +fn set_transient_override(preference: [u8; 32]) { + // Safety: populated by the linker, getting the address is fine. + // SAFETY: this points to a valid region of RAM that is otherwise unused by Rust, so we can + // write to it. + unsafe { + let override_addr = + core::ptr::addr_of_mut!(__REGION_TRANSIENT_OVERRIDE_BASE) + as *mut [u8; 32]; + core::ptr::write_volatile(override_addr, preference); + } +} + +fn get_transient_override() -> [u8; 32] { + // SAFETY: populated by the linker, getting the address is fine. + unsafe { + let override_addr = + core::ptr::addr_of_mut!(__REGION_TRANSIENT_OVERRIDE_BASE) + as *mut [u8; 32]; + core::ptr::read_volatile(override_addr) + } +} + +// Preference constants are taken from bootleby:src/lib.rs +// Note that Bootleby uses this same array to communicate the boot decision log to Hubris. +const PREFER_SLOT_A: [u8; 32] = + hex!("edb23f2e9b399c3d57695262f29615910ed10c8d9b261bfc2076b8c16c84f66d"); +const PREFER_SLOT_B: [u8; 32] = + hex!("70ed2914e6fdeeebbb02763b96da9faa0160b7fc887425f4d45547071d0ce4ba"); +const PREFER_NOTHING: [u8; 32] = [0xffu8; 32]; + +pub fn set_hubris_transient_override(bank: Option) { + match bank { + None => set_transient_override(PREFER_NOTHING), + Some(SlotId::A) => set_transient_override(PREFER_SLOT_A), + Some(SlotId::B) => set_transient_override(PREFER_SLOT_B), + } +} + +pub fn get_hubris_transient_override() -> Option { + match get_transient_override() { + PREFER_SLOT_A => Some(SlotId::A), + PREFER_SLOT_B => Some(SlotId::B), + _ => None, + } +} + fn round_up_to_flash_page(offset: u32) -> Option { offset.checked_next_multiple_of(BYTES_PER_FLASH_PAGE as u32) } diff --git a/drv/sprot-api/src/lib.rs b/drv/sprot-api/src/lib.rs index 78fcd6fdad..51aac25dcb 100644 --- a/drv/sprot-api/src/lib.rs +++ b/drv/sprot-api/src/lib.rs @@ -413,6 +413,11 @@ pub enum UpdateReq { slot: SlotId, duration: SwitchDuration, }, + ComponentSwitchCancelPending { + component: RotComponent, + slot: SlotId, + duration: SwitchDuration, + }, } #[derive(Clone, Serialize, Deserialize, SerializedSize)] diff --git a/drv/stm32h7-sprot-server/src/main.rs b/drv/stm32h7-sprot-server/src/main.rs index 8bb9c3e1a5..160cebae2d 100644 --- a/drv/stm32h7-sprot-server/src/main.rs +++ b/drv/stm32h7-sprot-server/src/main.rs @@ -1345,6 +1345,28 @@ impl idl::InOrderSpRotImpl for ServerImpl { } } + fn component_switch_cancel_pending( + &mut self, + _msg: &userlib::RecvMessage, + component: RotComponent, + slot: SlotId, + duration: SwitchDuration, + ) -> Result<(), idol_runtime::RequestError> { + let body = ReqBody::Update(UpdateReq::ComponentSwitchCancelPending { + component, + slot, + duration, + }); + let tx_size = Request::pack(&body, self.tx_buf); + let rsp = + self.do_send_recv_retries(tx_size, TIMEOUT_LONG, DEFAULT_ATTEMPTS)?; + if let RspBody::Ok = rsp.body? { + Ok(()) + } else { + Err(SprotProtocolError::UnexpectedResponse)? + } + } + fn lifecycle_state( &mut self, _msg: &userlib::RecvMessage, diff --git a/drv/update-api/src/lib.rs b/drv/update-api/src/lib.rs index 4f77a7333d..9d659da3ac 100644 --- a/drv/update-api/src/lib.rs +++ b/drv/update-api/src/lib.rs @@ -65,6 +65,10 @@ pub enum UpdateError { ImageMismatch, SignatureNotValidated, VersionNotSupported, + + InvalidPreferredSlotId, + AlreadyPending, + NonePending, } impl From for GwUpdateError { @@ -103,6 +107,9 @@ impl From for GwUpdateError { UpdateError::ImageMismatch => Self::ImageMismatch, UpdateError::SignatureNotValidated => Self::SignatureNotValidated, UpdateError::VersionNotSupported => Self::VersionNotSupported, + UpdateError::InvalidPreferredSlotId => Self::InvalidPreferredSlotId, + UpdateError::AlreadyPending => Self::AlreadyPending, + UpdateError::NonePending => Self::NonePending, } } } diff --git a/idl/lpc55-update.idol b/idl/lpc55-update.idol index cf2bec9b58..a7d8030203 100644 --- a/idl/lpc55-update.idol +++ b/idl/lpc55-update.idol @@ -212,5 +212,19 @@ Interface( idempotent: true, encoding: Hubpack ), + "component_switch_cancel_pending": ( + doc: "Cancal a pending persistent or transient image switch", + args: { + "component": "RotComponent", + "slot": "SlotId", + "duration": "SwitchDuration", + }, + reply: Result( + ok: "()", + err: CLike("drv_update_api::UpdateError"), + ), + encoding: Hubpack, + idempotent: true, + ), }, ) diff --git a/idl/sprot.idol b/idl/sprot.idol index 0d22d2cf73..621c062887 100644 --- a/idl/sprot.idol +++ b/idl/sprot.idol @@ -443,5 +443,19 @@ Interface( encoding: Hubpack, idempotent: true, ), + "component_switch_cancel_pending": ( + doc: "Cancal a pending persistent or transient image switch", + args: { + "component": "RotComponent", + "slot": "SlotId", + "duration": "SwitchDuration", + }, + reply: Result( + ok: "()", + err: Complex("SprotError"), + ), + encoding: Hubpack, + idempotent: true, + ), } ) diff --git a/task/control-plane-agent/src/main.rs b/task/control-plane-agent/src/main.rs index 6e79a05545..dcd1468ed6 100644 --- a/task/control-plane-agent/src/main.rs +++ b/task/control-plane-agent/src/main.rs @@ -179,6 +179,11 @@ enum MgsMessage { GetHostFlashHash { slot: u16, }, + ComponentCancelPendingActiveSlot { + component: SpComponent, + slot: u16, + persist: bool, + }, } // This enum does not define the actual IPC protocol - it is only used in the diff --git a/task/control-plane-agent/src/mgs_common.rs b/task/control-plane-agent/src/mgs_common.rs index 1ef23dc778..97f8d4953d 100644 --- a/task/control-plane-agent/src/mgs_common.rs +++ b/task/control-plane-agent/src/mgs_common.rs @@ -429,6 +429,52 @@ impl MgsCommon { } } + pub(crate) fn component_cancel_pending_active_slot( + &mut self, + component: SpComponent, + slot: u16, + persist: bool, + ) -> Result<(), GwSpError> { + match component { + SpComponent::ROT | SpComponent::STAGE0 => { + let slot = slot + .try_into() + .map_err(|()| GwSpError::RequestUnsupportedForComponent)?; + let duration = if persist { + SwitchDuration::Forever + } else { + SwitchDuration::Once + }; + self.sprot.component_switch_cancel_pending( + if component == SpComponent::ROT { + SpRotComponent::Hubris + } else { + SpRotComponent::Stage0 + }, + slot, + duration, + )?; + Ok(()) + } + + SpComponent::SP_ITSELF => { + let slot = slot + .try_into() + .map_err(|()| GwSpError::RequestUnsupportedForComponent)?; + if !persist { + // We have no mechanism to temporarily swap the banks on the SP + return Err(GwSpError::RequestUnsupportedForComponent); + }; + self.update_sp + .set_pending_boot_slot(slot) + .map_err(|err| GwSpError::UpdateFailed(err as u32))?; + Ok(()) + } + // Other components might also be served someday. + _ => Err(GwSpError::RequestUnsupportedForComponent), + } + } + pub(crate) fn read_sensor( &mut self, req: SensorRequest, @@ -662,6 +708,12 @@ impl MgsCommon { HIGHEST_KNOWN_ROT_VERSION ); + // Force update if the MGS and ROT default mapping is not correct. + static_assertions::const_assert_eq!( + GwRotBootInfo::HIGHEST_KNOWN_VERSION - 1, + SpVersionedRotBootInfo::HIGHEST_KNOWN_VERSION, + ); + // Map the MGS RotBootInfo 1-based versions to RoT 0-based versions. let rot_version = match version { // There is no version -1 in the RoT version number scheme. diff --git a/task/control-plane-agent/src/mgs_compute_sled.rs b/task/control-plane-agent/src/mgs_compute_sled.rs index 25d59bf969..b02962047f 100644 --- a/task/control-plane-agent/src/mgs_compute_sled.rs +++ b/task/control-plane-agent/src/mgs_compute_sled.rs @@ -956,6 +956,29 @@ impl SpHandler for MgsHandler { } } + fn component_cancel_pending_active_slot( + &mut self, + component: SpComponent, + slot: u16, + persist: bool, + ) -> Result<(), SpError> { + ringbuf_entry_root!(Log::MgsMessage( + MgsMessage::ComponentCancelPendingActiveSlot { + component, + slot, + persist, + } + )); + match component { + SpComponent::HOST_CPU_BOOT_FLASH => { + Err(SpError::RequestUnsupportedForComponent) + } + _ => self + .common + .component_cancel_pending_active_slot(component, slot, persist), + } + } + fn component_clear_status( &mut self, component: SpComponent, diff --git a/task/control-plane-agent/src/mgs_psc.rs b/task/control-plane-agent/src/mgs_psc.rs index fdf45de984..1e48cbaa78 100644 --- a/task/control-plane-agent/src/mgs_psc.rs +++ b/task/control-plane-agent/src/mgs_psc.rs @@ -484,6 +484,29 @@ impl SpHandler for MgsHandler { .component_set_active_slot(component, slot, persist) } + fn component_cancel_pending_active_slot( + &mut self, + component: SpComponent, + slot: u16, + persist: bool, + ) -> Result<(), SpError> { + ringbuf_entry_root!(Log::MgsMessage( + MgsMessage::ComponentCancelPendingActiveSlot { + component, + slot, + persist, + } + )); + match component { + SpComponent::HOST_CPU_BOOT_FLASH => { + Err(SpError::RequestUnsupportedForComponent) + } + _ => self + .common + .component_cancel_pending_active_slot(component, slot, persist), + } + } + fn component_clear_status( &mut self, component: SpComponent, diff --git a/task/control-plane-agent/src/mgs_sidecar.rs b/task/control-plane-agent/src/mgs_sidecar.rs index 4a5e14ed64..a877378b17 100644 --- a/task/control-plane-agent/src/mgs_sidecar.rs +++ b/task/control-plane-agent/src/mgs_sidecar.rs @@ -961,6 +961,29 @@ impl SpHandler for MgsHandler { .component_set_active_slot(component, slot, persist) } + fn component_cancel_pending_active_slot( + &mut self, + component: SpComponent, + slot: u16, + persist: bool, + ) -> Result<(), SpError> { + ringbuf_entry_root!(Log::MgsMessage( + MgsMessage::ComponentCancelPendingActiveSlot { + component, + slot, + persist, + } + )); + match component { + SpComponent::HOST_CPU_BOOT_FLASH => { + Err(SpError::RequestUnsupportedForComponent) + } + _ => self + .common + .component_cancel_pending_active_slot(component, slot, persist), + } + } + fn component_clear_status( &mut self, component: SpComponent,