From 227b876aa8929636f2a98b2b9459c7a4e55037e6 Mon Sep 17 00:00:00 2001 From: Matt Keeter Date: Tue, 21 Jan 2025 13:33:33 -0500 Subject: [PATCH] Load dummy packrat config for grapefruit --- Cargo.lock | 1 + app/grapefruit/app.toml | 2 +- drv/grapefruit-seq-server/Cargo.toml | 9 +++++---- drv/grapefruit-seq-server/src/main.rs | 29 +++++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f116ae3ca..dfb8b9226 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1226,6 +1226,7 @@ dependencies = [ "ringbuf", "sha3", "task-jefe-api", + "task-packrat-api", "userlib", "zerocopy 0.6.6", ] diff --git a/app/grapefruit/app.toml b/app/grapefruit/app.toml index 79cb2ec55..bdd34ea2c 100644 --- a/app/grapefruit/app.toml +++ b/app/grapefruit/app.toml @@ -177,7 +177,7 @@ priority = 4 max-sizes = {flash = 131072, ram = 16384 } stacksize = 2600 start = true -task-slots = ["sys", {spi = "spi2_driver"}, "auxflash", "jefe"] +task-slots = ["sys", {spi = "spi2_driver"}, "auxflash", "jefe", "packrat"] [tasks.thermal] name = "task-thermal" diff --git a/drv/grapefruit-seq-server/Cargo.toml b/drv/grapefruit-seq-server/Cargo.toml index dea4f786b..ca244e65d 100644 --- a/drv/grapefruit-seq-server/Cargo.toml +++ b/drv/grapefruit-seq-server/Cargo.toml @@ -4,13 +4,14 @@ version = "0.1.0" edition = "2021" [dependencies] -drv-spi-api = { path = "../spi-api" } -drv-cpu-seq-api = { path = "../cpu-seq-api" } +counters = { path = "../../lib/counters" } +drv-auxflash-api = { path = "../auxflash-api" } drv-cpu-power-state = { path = "../cpu-power-state" } +drv-cpu-seq-api = { path = "../cpu-seq-api" } +drv-spi-api = { path = "../spi-api" } drv-stm32xx-sys-api = { path = "../stm32xx-sys-api" } -drv-auxflash-api = { path = "../auxflash-api" } -counters = { path = "../../lib/counters" } gnarle = { path = "../../lib/gnarle" } +task-packrat-api = { path = "../../task/packrat-api" } ringbuf = { path = "../../lib/ringbuf" } userlib = { path = "../../sys/userlib", features = ["panic-messages"] } task-jefe-api = { path = "../../task/jefe-api" } diff --git a/drv/grapefruit-seq-server/src/main.rs b/drv/grapefruit-seq-server/src/main.rs index 5787e7cec..7decb50bc 100644 --- a/drv/grapefruit-seq-server/src/main.rs +++ b/drv/grapefruit-seq-server/src/main.rs @@ -13,6 +13,7 @@ use drv_stm32xx_sys_api as sys_api; use idol_runtime::{NotificationHandler, RequestError}; use sha3::{Digest, Sha3_256}; use task_jefe_api::Jefe; +use task_packrat_api::{CacheSetError, MacAddressBlock, Packrat, VpdIdentity}; use userlib::{ hl, sys_recv_notification, task_slot, FromPrimitive, RecvMessage, UnwrapLite, @@ -29,6 +30,8 @@ enum Trace { ContinueBitstreamLoad(usize), WaitForDone, Programmed, + MacsAlreadySet(MacAddressBlock), + IdentityAlreadySet(VpdIdentity), #[count(skip)] None, @@ -48,6 +51,7 @@ counted_ringbuf!(Trace, 128, Trace::None); task_slot!(SYS, sys); task_slot!(SPI, spi); task_slot!(AUXFLASH, auxflash); +task_slot!(PACKRAT, packrat); #[export_name = "main"] fn main() -> ! { @@ -55,6 +59,31 @@ fn main() -> ! { let spi = drv_spi_api::Spi::from(SPI.get_task_id()); let aux = drv_auxflash_api::AuxFlash::from(AUXFLASH.get_task_id()); + // Populate packrat with dummy values, because talking to the EEPROM is hard + let packrat = Packrat::from(PACKRAT.get_task_id()); + let macs = MacAddressBlock { + base_mac: [0; 6], + count: 0.into(), + stride: 0, + }; + match packrat.set_mac_address_block(macs) { + Ok(()) => (), + Err(CacheSetError::ValueAlreadySet) => { + ringbuf_entry!(Trace::MacsAlreadySet(macs)); + } + } + let identity = VpdIdentity { + serial: *b"GRAPEFRUIT ", + part_number: *b"913-0000083", + revision: 0, + }; + match packrat.set_identity(identity) { + Ok(()) => (), + Err(CacheSetError::ValueAlreadySet) => { + ringbuf_entry!(Trace::IdentityAlreadySet(identity)); + } + } + match ServerImpl::init(&sys, spi, aux) { // Set up everything nicely, time to start serving incoming messages. Ok(mut server) => {