diff --git a/.github/synthesis/debug.json b/.github/synthesis/debug.json new file mode 100644 index 000000000..8e40bd370 --- /dev/null +++ b/.github/synthesis/debug.json @@ -0,0 +1,3 @@ +[ + {"top": "vexRiscvTcpTest", "stage": "test"} +] diff --git a/firmware-binaries/clock-control-reg-cpy/src/main.rs b/firmware-binaries/clock-control-reg-cpy/src/main.rs index 41a8515bc..2e9f57d82 100644 --- a/firmware-binaries/clock-control-reg-cpy/src/main.rs +++ b/firmware-binaries/clock-control-reg-cpy/src/main.rs @@ -28,10 +28,3 @@ fn main() -> ! { cc.change_speed(change); } } - -#[panic_handler] -fn panic_handler(_info: &core::panic::PanicInfo) -> ! { - loop { - continue; - } -} diff --git a/firmware-binaries/clock-control/src/main.rs b/firmware-binaries/clock-control/src/main.rs index 8548ee973..7619f835b 100644 --- a/firmware-binaries/clock-control/src/main.rs +++ b/firmware-binaries/clock-control/src/main.rs @@ -5,8 +5,6 @@ // // SPDX-License-Identifier: Apache-2.0 -use core::panic::PanicInfo; - use bittide_sys::{ callisto::{self, ControlConfig, ControlSt, ReframingState}, clock_control::{ClockControl, SpeedChange}, @@ -39,10 +37,3 @@ fn main() -> ! { cc.change_speed(state.b_k); } } - -#[panic_handler] -fn panic_handler(_info: &PanicInfo) -> ! { - loop { - continue; - } -} diff --git a/firmware-binaries/examples/smoltcp_client/Cargo.toml b/firmware-binaries/examples/smoltcp_client/Cargo.toml index a708c1dfb..536ad56bb 100644 --- a/firmware-binaries/examples/smoltcp_client/Cargo.toml +++ b/firmware-binaries/examples/smoltcp_client/Cargo.toml @@ -12,7 +12,7 @@ authors = ["Google LLC"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -bittide-sys = { path = "../../../firmware-support/bittide-sys" } +bittide-sys = { path = "../../../firmware-support/bittide-sys", features = ["panic_handler_log"]} riscv-rt = "0.11.0" riscv = "^0.10" heapless = { version = "0.8", default-features = false} diff --git a/firmware-binaries/examples/smoltcp_client/src/main.rs b/firmware-binaries/examples/smoltcp_client/src/main.rs index ef4e83380..39c8a8c7b 100644 --- a/firmware-binaries/examples/smoltcp_client/src/main.rs +++ b/firmware-binaries/examples/smoltcp_client/src/main.rs @@ -178,18 +178,6 @@ fn exception_handler(_trap_frame: &riscv_rt::TrapFrame) -> ! { } } -#[panic_handler] -fn panic_handler(info: &core::panic::PanicInfo) -> ! { - let mut uart = unsafe { Uart::new(UART_ADDR) }; - - uwriteln!(uart, "Panicked!").unwrap(); - info!("error: {}\n", info); - uwriteln!(uart, "Looping forever now").unwrap(); - loop { - continue; - } -} - fn update_dhcp(iface: &mut Interface, socket: &mut dhcpv4::Socket) { let event = socket.poll(); match event { diff --git a/firmware-binaries/test-cases/axi_stream_self_test/Cargo.toml b/firmware-binaries/test-cases/axi_stream_self_test/Cargo.toml index e01415b97..091e8c5fd 100644 --- a/firmware-binaries/test-cases/axi_stream_self_test/Cargo.toml +++ b/firmware-binaries/test-cases/axi_stream_self_test/Cargo.toml @@ -13,5 +13,5 @@ authors = ["Google LLC"] [dependencies] riscv-rt = "0.11.0" -bittide-sys = { path = "../../../firmware-support/bittide-sys" } +bittide-sys = { path = "../../../firmware-support/bittide-sys", features = ["panic_handler_log"]} ufmt = "0.2.0" diff --git a/firmware-binaries/test-cases/axi_stream_self_test/src/main.rs b/firmware-binaries/test-cases/axi_stream_self_test/src/main.rs index 945899f02..d04c28db6 100644 --- a/firmware-binaries/test-cases/axi_stream_self_test/src/main.rs +++ b/firmware-binaries/test-cases/axi_stream_self_test/src/main.rs @@ -5,8 +5,6 @@ // // SPDX-License-Identifier: Apache-2.0 -use ufmt::uwriteln; - use bittide_sys::axi::self_test::self_test; use bittide_sys::axi::{AxiRx, AxiTx}; use bittide_sys::uart::Uart; @@ -26,12 +24,3 @@ fn main() -> ! { continue; } } - -#[panic_handler] -fn panic_handler(_info: &core::panic::PanicInfo) -> ! { - let mut uart = unsafe { Uart::new(UART_ADDR) }; - uwriteln!(uart, "Woops, I panicked!").unwrap(); - loop { - continue; - } -} diff --git a/firmware-binaries/test-cases/capture_ugn_test/Cargo.toml b/firmware-binaries/test-cases/capture_ugn_test/Cargo.toml index 8a245bca3..3bb0734dd 100644 --- a/firmware-binaries/test-cases/capture_ugn_test/Cargo.toml +++ b/firmware-binaries/test-cases/capture_ugn_test/Cargo.toml @@ -13,5 +13,5 @@ authors = ["Google LLC"] [dependencies] riscv-rt = "0.11.0" -bittide-sys = { path = "../../../firmware-support/bittide-sys" } +bittide-sys = { path = "../../../firmware-support/bittide-sys", features = ["panic_handler_log"]} ufmt = "0.2.0" diff --git a/firmware-binaries/test-cases/capture_ugn_test/src/main.rs b/firmware-binaries/test-cases/capture_ugn_test/src/main.rs index dcda62354..a659c1174 100644 --- a/firmware-binaries/test-cases/capture_ugn_test/src/main.rs +++ b/firmware-binaries/test-cases/capture_ugn_test/src/main.rs @@ -31,10 +31,3 @@ fn main() -> ! { continue; } } - -#[panic_handler] -fn panic_handler(_info: &core::panic::PanicInfo) -> ! { - loop { - continue; - } -} diff --git a/firmware-binaries/test-cases/dna_port_e2_test/Cargo.toml b/firmware-binaries/test-cases/dna_port_e2_test/Cargo.toml index 9861b9733..050bed1e4 100644 --- a/firmware-binaries/test-cases/dna_port_e2_test/Cargo.toml +++ b/firmware-binaries/test-cases/dna_port_e2_test/Cargo.toml @@ -13,5 +13,5 @@ authors = ["Google LLC"] [dependencies] riscv-rt = "0.11.0" -bittide-sys = { path = "../../../firmware-support/bittide-sys" } +bittide-sys = { path = "../../../firmware-support/bittide-sys", features = ["panic_handler_log"]} ufmt = "0.2.0" diff --git a/firmware-binaries/test-cases/dna_port_e2_test/src/main.rs b/firmware-binaries/test-cases/dna_port_e2_test/src/main.rs index dcd47f22b..5410cdb0a 100644 --- a/firmware-binaries/test-cases/dna_port_e2_test/src/main.rs +++ b/firmware-binaries/test-cases/dna_port_e2_test/src/main.rs @@ -23,10 +23,3 @@ fn main() -> ! { continue; } } - -#[panic_handler] -fn panic_handler(_info: &core::panic::PanicInfo) -> ! { - loop { - continue; - } -} diff --git a/firmware-binaries/test-cases/time_self_test/Cargo.toml b/firmware-binaries/test-cases/time_self_test/Cargo.toml index b31de80a6..06690d620 100644 --- a/firmware-binaries/test-cases/time_self_test/Cargo.toml +++ b/firmware-binaries/test-cases/time_self_test/Cargo.toml @@ -13,5 +13,5 @@ authors = ["Google LLC"] [dependencies] riscv-rt = "0.11.0" -bittide-sys = { path = "../../../firmware-support/bittide-sys" } +bittide-sys = { path = "../../../firmware-support/bittide-sys", default-features = false } ufmt = "0.2.0" diff --git a/firmware-binaries/test-cases/time_self_test/src/main.rs b/firmware-binaries/test-cases/time_self_test/src/main.rs index 07c0a5432..c6ae296de 100644 --- a/firmware-binaries/test-cases/time_self_test/src/main.rs +++ b/firmware-binaries/test-cases/time_self_test/src/main.rs @@ -30,10 +30,3 @@ fn main() -> ! { continue; } } - -#[panic_handler] -fn panic_handler(_info: &core::panic::PanicInfo) -> ! { - loop { - continue; - } -} diff --git a/firmware-support/bittide-sys/Cargo.toml b/firmware-support/bittide-sys/Cargo.toml index 34793647d..a29ac2522 100644 --- a/firmware-support/bittide-sys/Cargo.toml +++ b/firmware-support/bittide-sys/Cargo.toml @@ -14,6 +14,7 @@ resolver = "2" [features] default = [] +panic_handler_log = [] [dependencies] fdt = "0.1.0" diff --git a/firmware-support/bittide-sys/src/uart/log.rs b/firmware-support/bittide-sys/src/uart/log.rs index be2be169b..9a464f2ef 100644 --- a/firmware-support/bittide-sys/src/uart/log.rs +++ b/firmware-support/bittide-sys/src/uart/log.rs @@ -8,6 +8,10 @@ use crate::{time, uart}; use core::fmt::Write; use log::LevelFilter; +use core::panic::PanicInfo; +use log::error; +use ufmt::uwriteln; + /// A global logger instance to be used with the `log` crate. /// /// Use `set_logger` to set the `Uart` instance to be used for logging. @@ -76,7 +80,7 @@ impl log::Log for UartLogger { } writeln!(l, "{}", record.args()).unwrap(); } - None => panic!("Logger not set"), + None => loop {}, // The panic handler uses the same logger, so we can't panic here. } } } @@ -87,3 +91,20 @@ impl log::Log for UartLogger { unsafe impl core::marker::Send for UartLogger {} unsafe impl core::marker::Sync for UartLogger {} + +#[cfg_attr(feature = "panic_handler_log", panic_handler)] +pub fn panic_handler(info: &PanicInfo) -> ! { + unsafe { + match LOGGER.uart { + Some(ref mut uart) => { + uwriteln!(uart, "Panicked!").ok(); + error!("{}", info); + uwriteln!(uart, "Looping forever now").ok(); + } + None => panic!("Logger not set"), + } + } + loop { + continue; + } +} diff --git a/host-tools/callisto-lib/Cargo.toml b/host-tools/callisto-lib/Cargo.toml index 6df484b8b..0054fa517 100644 --- a/host-tools/callisto-lib/Cargo.toml +++ b/host-tools/callisto-lib/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -bittide-sys = { path = "../../firmware-support/bittide-sys" } +bittide-sys = { path = "../../firmware-support/bittide-sys", default-features = false, features = []} [lib] crate-type = ["staticlib"]