cxp FW: update csr

This commit is contained in:
morgan 2025-01-14 14:22:37 +08:00
parent c21d07b4d4
commit 5a9091b34f

View File

@ -7,7 +7,7 @@ use log::{info, warn};
use crate::{cxp_ctrl::{read_u32, read_u64, reset_tag, send_test_packet, write_bytes_no_ack, write_u32, write_u64}, use crate::{cxp_ctrl::{read_u32, read_u64, reset_tag, send_test_packet, write_bytes_no_ack, write_u32, write_u64},
cxp_phys::{self, CXP_CHANNELS, CXP_SPEED}, cxp_phys::{self, CXP_CHANNELS, CXP_SPEED},
cxp_proto::Error as ProtoError, cxp_proto::Error as ProtoError,
pl::csr::{cxp_frame_pipeline, CXP}}; pl::csr::CXP};
// Bootstrap registers address // Bootstrap registers address
const STANDARD: u32 = 0x0000; const STANDARD: u32 = 0x0000;
@ -40,8 +40,8 @@ const HOST_CONNECTION_ID: u32 = 0xC001C0DE; // TODO: rename this
pub enum Error { pub enum Error {
CameraNotDetected, CameraNotDetected,
ConnectionLost, ConnectionLost,
UnstableDownConn, UnstableRX,
UnstableUpConn, UnstableTX,
UnsupportedSpeed(u32), UnsupportedSpeed(u32),
UnsupportedTopology, UnsupportedTopology,
UnsupportedVersion, UnsupportedVersion,
@ -59,8 +59,8 @@ impl fmt::Display for Error {
match self { match self {
&Error::CameraNotDetected => write!(f, "CameraNotDetected"), &Error::CameraNotDetected => write!(f, "CameraNotDetected"),
&Error::ConnectionLost => write!(f, "ConnectionLost Some active channels cannot be detected"), &Error::ConnectionLost => write!(f, "ConnectionLost Some active channels cannot be detected"),
&Error::UnstableDownConn => write!(f, "UnstableDownConn DownConnection test failed"), &Error::UnstableRX => write!(f, "UnstableRX RX connection test failed"),
&Error::UnstableUpConn => write!(f, "UnstableUpConn UpConnection test failed"), &Error::UnstableTX => write!(f, "UnstableTX TX connection test failed"),
&Error::UnsupportedSpeed(linerate_code) => write!( &Error::UnsupportedSpeed(linerate_code) => write!(
f, f,
"UnsupportedSpeed {:#X} linerate code is not supported", "UnsupportedSpeed {:#X} linerate code is not supported",
@ -89,8 +89,8 @@ pub fn setup() -> Result<bool, Error> {
fn scan_active_channels() -> u8 { fn scan_active_channels() -> u8 {
let mut active_channels: u8 = 0; let mut active_channels: u8 = 0;
for ch in 0..CXP_CHANNELS { for ch in 0..CXP_CHANNELS {
if unsafe { (CXP[ch as usize].downconn_rx_ready_read)() } == 1 { if unsafe { (CXP[ch as usize].rx_ready_read)() } == 1 {
info!("ch#{} is up <---------------------------------", ch); // info!("ch#{} is up <---------------------------------", ch);
active_channels += 1; active_channels += 1;
} }
} }
@ -287,7 +287,7 @@ fn set_operation_linerate(active_channels: u8, with_tag: bool, timer: &mut Globa
} }
fn test_counter_reset(channel: u8, with_tag: bool) -> Result<(), Error> { fn test_counter_reset(channel: u8, with_tag: bool) -> Result<(), Error> {
unsafe { (CXP[channel as usize].downconn_bootstrap_test_counts_reset_write)(1) }; unsafe { (CXP[channel as usize].rx_bootstrap_test_counts_reset_write)(1) };
write_u32(MASTER_CHANNEL, TEST_ERROR_COUNT_SELECTOR, channel as u32, with_tag)?; write_u32(MASTER_CHANNEL, TEST_ERROR_COUNT_SELECTOR, channel as u32, with_tag)?;
write_u32(MASTER_CHANNEL, TEST_ERROR_COUNT, 0, with_tag)?; write_u32(MASTER_CHANNEL, TEST_ERROR_COUNT, 0, with_tag)?;
write_u64(MASTER_CHANNEL, TEST_PACKET_COUNT_TX, 0, with_tag)?; write_u64(MASTER_CHANNEL, TEST_PACKET_COUNT_TX, 0, with_tag)?;
@ -301,31 +301,31 @@ fn verify_test_result(channel: u8, with_tag: bool) -> Result<(), Error> {
// Section 9.9.3 (CXP-001-2021) // Section 9.9.3 (CXP-001-2021)
// verify grabber -> camera connection test result // verify grabber -> camera connection test result
if read_u64(MASTER_CHANNEL, TEST_PACKET_COUNT_RX, with_tag)? != TX_TEST_CNT as u64 { if read_u64(MASTER_CHANNEL, TEST_PACKET_COUNT_RX, with_tag)? != TX_TEST_CNT as u64 {
return Err(Error::UnstableUpConn); return Err(Error::UnstableTX);
}; };
if read_u32(MASTER_CHANNEL, TEST_ERROR_COUNT, with_tag)? > 0 { if read_u32(MASTER_CHANNEL, TEST_ERROR_COUNT, with_tag)? > 0 {
return Err(Error::UnstableUpConn); return Err(Error::UnstableTX);
}; };
// Section 9.9.4 (CXP-001-2021) // Section 9.9.4 (CXP-001-2021)
// verify camera -> grabber connection test result // verify camera -> grabber connection test result
let camera_test_pak_cnt = read_u64(MASTER_CHANNEL, TEST_PACKET_COUNT_TX, true)?; let camera_test_pak_cnt = read_u64(MASTER_CHANNEL, TEST_PACKET_COUNT_TX, true)?;
unsafe { unsafe {
if (CXP[channel as usize].downconn_bootstrap_test_packet_counter_read)() != camera_test_pak_cnt as u16 { if (CXP[channel as usize].rx_bootstrap_test_packet_counter_read)() != camera_test_pak_cnt as u16 {
info!( info!(
"CHANNEL #{} test packet cnt = {}", "CHANNEL #{} test packet cnt = {}",
channel, channel,
(CXP[channel as usize].downconn_bootstrap_test_packet_counter_read)() (CXP[channel as usize].rx_bootstrap_test_packet_counter_read)()
); );
return Err(Error::UnstableDownConn); return Err(Error::UnstableRX);
}; };
if (CXP[channel as usize].downconn_bootstrap_test_error_counter_read)() > 0 { if (CXP[channel as usize].rx_bootstrap_test_error_counter_read)() > 0 {
info!( info!(
"CHANNEL #{} test packet error cnt = {}", "CHANNEL #{} test packet error cnt = {}",
channel, channel,
(CXP[channel as usize].downconn_bootstrap_test_error_counter_read)() (CXP[channel as usize].rx_bootstrap_test_error_counter_read)()
); );
return Err(Error::UnstableDownConn); return Err(Error::UnstableRX);
}; };
}; };
info!("CHANNEL #{} pass testing", channel); info!("CHANNEL #{} pass testing", channel);