diff --git a/Cargo.lock b/Cargo.lock index db19075cde..8753d649b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2144,6 +2144,7 @@ dependencies = [ "idol", "num-derive 0.4.2", "num-traits", + "ringbuf", "serde", "serde_json", "userlib", diff --git a/drv/sidecar-mainboard-controller/Cargo.toml b/drv/sidecar-mainboard-controller/Cargo.toml index bb03fc148d..eb8a4301bb 100644 --- a/drv/sidecar-mainboard-controller/Cargo.toml +++ b/drv/sidecar-mainboard-controller/Cargo.toml @@ -17,6 +17,7 @@ drv-fpga-api = { path = "../fpga-api" } drv-fpga-user-api = { path = "../fpga-user-api" } drv-ignition-api = { path = "../ignition-api" } userlib = { path = "../../sys/userlib" } +ringbuf = { path = "../../lib/ringbuf" } [features] bitstream = ["dep:drv-auxflash-api", "drv-fpga-api/auxflash"] diff --git a/drv/sidecar-mainboard-controller/src/tofino2.rs b/drv/sidecar-mainboard-controller/src/tofino2.rs index 8f0cae5788..4139727f7e 100644 --- a/drv/sidecar-mainboard-controller/src/tofino2.rs +++ b/drv/sidecar-mainboard-controller/src/tofino2.rs @@ -10,6 +10,14 @@ use drv_fpga_user_api::power_rail::*; use userlib::FromPrimitive; use zerocopy::{FromBytes, Immutable, IntoBytes, KnownLayout}; +#[derive(Copy, Clone, PartialEq)] +enum VidTrace { + None, + Read(u8), +} + +ringbuf::ringbuf!(VidTrace, 8, VidTrace::None); + #[derive( Copy, Clone, @@ -335,6 +343,8 @@ impl Sequencer { pub fn vid(&self) -> Result, FpgaError> { let v: u8 = self.fpga.read(Addr::TOFINO_POWER_VID)?; + ringbuf::ringbuf_entry!(VidTrace::Read(v)); + if (v & Reg::TOFINO_POWER_VID::VID_VALID) != 0 { match Tofino2Vid::from_u8(v & Reg::TOFINO_POWER_VID::VID) { None => Err(FpgaError::InvalidValue),