update SEEN_ASYNC_ERRORS in destination_survey #195

Merged
sb10q merged 2 commits from kk105/artiq-zynq:Update-SEEN_ASYNC_ERRORS into master 2022-06-20 17:41:08 +08:00
2 changed files with 20 additions and 9 deletions

View File

@ -22,6 +22,10 @@ use libconfig::Config;
use libcortex_a9::l2c::enable_l2_cache; use libcortex_a9::l2c::enable_l2_cache;
use libboard_artiq::{logger, identifier_read, init_gateware, pl}; use libboard_artiq::{logger, identifier_read, init_gateware, pl};
const ASYNC_ERROR_COLLISION: u8 = 1 << 0;
const ASYNC_ERROR_BUSY: u8 = 1 << 1;
const ASYNC_ERROR_SEQUENCE_ERROR: u8 = 1 << 2;
mod proto_async; mod proto_async;
mod comms; mod comms;
mod rpc; mod rpc;
@ -65,15 +69,15 @@ async fn report_async_rtio_errors() {
let _ = block_async!(wait_for_async_rtio_error()).await; let _ = block_async!(wait_for_async_rtio_error()).await;
unsafe { unsafe {
let errors = pl::csr::rtio_core::async_error_read(); let errors = pl::csr::rtio_core::async_error_read();
if errors & 1 != 0 { if errors & ASYNC_ERROR_COLLISION != 0 {
error!("RTIO collision involving channel {}", error!("RTIO collision involving channel {}",
pl::csr::rtio_core::collision_channel_read()); pl::csr::rtio_core::collision_channel_read());
} }
if errors & 2 != 0 { if errors & ASYNC_ERROR_BUSY != 0 {
error!("RTIO busy error involving channel {}", error!("RTIO busy error involving channel {}",
pl::csr::rtio_core::busy_channel_read()); pl::csr::rtio_core::busy_channel_read());
} }
if errors & 4 != 0 { if errors & ASYNC_ERROR_SEQUENCE_ERROR != 0 {
error!("RTIO sequence error involving channel {}", error!("RTIO sequence error involving channel {}",
pl::csr::rtio_core::sequence_error_channel_read()); pl::csr::rtio_core::sequence_error_channel_read());
} }

View File

@ -8,6 +8,7 @@ use libcortex_a9::mutex::Mutex;
#[cfg(has_drtio)] #[cfg(has_drtio)]
pub mod drtio { pub mod drtio {
use super::*; use super::*;
use crate::{SEEN_ASYNC_ERRORS, ASYNC_ERROR_BUSY, ASYNC_ERROR_SEQUENCE_ERROR, ASYNC_ERROR_COLLISION};
use libboard_artiq::drtioaux_async; use libboard_artiq::drtioaux_async;
use libboard_artiq::drtioaux_async::Packet; use libboard_artiq::drtioaux_async::Packet;
use libboard_artiq::drtioaux::Error; use libboard_artiq::drtioaux::Error;
@ -217,12 +218,18 @@ pub mod drtio {
Ok(Packet::DestinationDownReply) => Ok(Packet::DestinationDownReply) =>
destination_set_up(routing_table, up_destinations, destination, false).await, destination_set_up(routing_table, up_destinations, destination, false).await,
Ok(Packet::DestinationOkReply) => (), Ok(Packet::DestinationOkReply) => (),
Ok(Packet::DestinationSequenceErrorReply { channel }) => Ok(Packet::DestinationSequenceErrorReply { channel }) =>{
error!("[DEST#{}] RTIO sequence error involving channel 0x{:04x}", destination, channel), error!("[DEST#{}] RTIO sequence error involving channel 0x{:04x}", destination, channel);
Ok(Packet::DestinationCollisionReply { channel }) => unsafe { SEEN_ASYNC_ERRORS |= ASYNC_ERROR_SEQUENCE_ERROR };
error!("[DEST#{}] RTIO collision involving channel 0x{:04x}", destination, channel), }
Ok(Packet::DestinationBusyReply { channel }) => Ok(Packet::DestinationCollisionReply { channel }) =>{
error!("[DEST#{}] RTIO busy error involving channel 0x{:04x}", destination, channel), error!("[DEST#{}] RTIO collision involving channel 0x{:04x}", destination, channel);
unsafe { SEEN_ASYNC_ERRORS |= ASYNC_ERROR_COLLISION };
}
Ok(Packet::DestinationBusyReply { channel }) =>{
error!("[DEST#{}] RTIO busy error involving channel 0x{:04x}", destination, channel);
unsafe { SEEN_ASYNC_ERRORS |= ASYNC_ERROR_BUSY };
}
Ok(packet) => error!("[DEST#{}] received unexpected aux packet: {:?}", destination, packet), Ok(packet) => error!("[DEST#{}] received unexpected aux packet: {:?}", destination, packet),
Err(e) => error!("[DEST#{}] communication failed ({})", destination, e) Err(e) => error!("[DEST#{}] communication failed ({})", destination, e)
} }