forked from M-Labs/artiq-zynq
cxp downconn fw: fix warning and cleanup
This commit is contained in:
parent
66dee0b812
commit
1460f5b94b
|
@ -5,11 +5,6 @@ use log::info;
|
||||||
// use log::info;
|
// use log::info;
|
||||||
use crate::pl::csr;
|
use crate::pl::csr;
|
||||||
|
|
||||||
pub struct CXP_DownConn_Settings {
|
|
||||||
pub rxdiv: u8,
|
|
||||||
pub qpll_fbdiv: u8,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
pub enum CXP_SPEED {
|
pub enum CXP_SPEED {
|
||||||
|
@ -24,7 +19,7 @@ pub enum CXP_SPEED {
|
||||||
|
|
||||||
pub fn loopback_testing(timer: &mut GlobalTimer, speed: CXP_SPEED) {
|
pub fn loopback_testing(timer: &mut GlobalTimer, speed: CXP_SPEED) {
|
||||||
println!("==============================================================================");
|
println!("==============================================================================");
|
||||||
CXP_GTX::change_linerate(timer, speed);
|
cxp_gtx::change_linerate(timer, speed);
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
info!("waiting for tx&rx setup...");
|
info!("waiting for tx&rx setup...");
|
||||||
|
@ -42,8 +37,8 @@ pub fn loopback_testing(timer: &mut GlobalTimer, speed: CXP_SPEED) {
|
||||||
while csr::cxp::downconn_rx_ready_read() != 1 {}
|
while csr::cxp::downconn_rx_ready_read() != 1 {}
|
||||||
info!("rx ready!");
|
info!("rx ready!");
|
||||||
|
|
||||||
// loop {
|
loop {
|
||||||
for _ in 0..20 {
|
// for _ in 0..20 {
|
||||||
// NOTE: raw bits
|
// NOTE: raw bits
|
||||||
// let data0 = csr::cxp::downconn_rxdata_0_read();
|
// let data0 = csr::cxp::downconn_rxdata_0_read();
|
||||||
// let data1 = csr::cxp::downconn_rxdata_1_read();
|
// let data1 = csr::cxp::downconn_rxdata_1_read();
|
||||||
|
@ -75,7 +70,7 @@ pub fn loopback_testing(timer: &mut GlobalTimer, speed: CXP_SPEED) {
|
||||||
// timer.delay_us(1_000_000);
|
// timer.delay_us(1_000_000);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// timer.delay_us(1_000_000);
|
timer.delay_us(1_000_000);
|
||||||
// NOTE: raw bits
|
// NOTE: raw bits
|
||||||
// let data0 = csr::cxp::downconn_rxdata_0_read();
|
// let data0 = csr::cxp::downconn_rxdata_0_read();
|
||||||
// let data1 = csr::cxp::downconn_rxdata_1_read();
|
// let data1 = csr::cxp::downconn_rxdata_1_read();
|
||||||
|
@ -134,13 +129,13 @@ pub fn setup(timer: &mut GlobalTimer) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
CXP_GTX::change_linerate(timer, CXP_SPEED::CXP_1);
|
cxp_gtx::change_linerate(timer, CXP_SPEED::CXP_1);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod CXP_GTX {
|
pub mod cxp_gtx {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
struct RX_CDR_CFG {
|
struct CdrConfig {
|
||||||
pub cfg_reg0: u16, //0x0A8
|
pub cfg_reg0: u16, //0x0A8
|
||||||
pub cfg_reg1: u16, //0x0A9
|
pub cfg_reg1: u16, //0x0A9
|
||||||
pub cfg_reg2: u16, //0x0AA
|
pub cfg_reg2: u16, //0x0AA
|
||||||
|
@ -177,9 +172,7 @@ pub mod CXP_GTX {
|
||||||
CXP_SPEED::CXP_3 | CXP_SPEED::CXP_6 | CXP_SPEED::CXP_12 => 0x0170, // FB_Divider = 100
|
CXP_SPEED::CXP_3 | CXP_SPEED::CXP_6 | CXP_SPEED::CXP_12 => 0x0170, // FB_Divider = 100
|
||||||
};
|
};
|
||||||
|
|
||||||
println!("0x36 = {:#018b}", qpll_read(0x36));
|
|
||||||
qpll_write(0x36, qpll_div_reg);
|
qpll_write(0x36, qpll_div_reg);
|
||||||
println!("0x36 = {:#018b}", qpll_read(0x36));
|
|
||||||
|
|
||||||
let rxout_div = match speed {
|
let rxout_div = match speed {
|
||||||
CXP_SPEED::CXP_1 => 0b100, // 8
|
CXP_SPEED::CXP_1 => 0b100, // 8
|
||||||
|
@ -198,7 +191,7 @@ pub mod CXP_GTX {
|
||||||
let cdr_cfg = match speed {
|
let cdr_cfg = match speed {
|
||||||
// rxout_div = 8
|
// rxout_div = 8
|
||||||
CXP_SPEED::CXP_1 => {
|
CXP_SPEED::CXP_1 => {
|
||||||
RX_CDR_CFG {
|
CdrConfig {
|
||||||
cfg_reg0: 0x0020, //0x0A8
|
cfg_reg0: 0x0020, //0x0A8
|
||||||
cfg_reg1: 0x1008, //0x0A9
|
cfg_reg1: 0x1008, //0x0A9
|
||||||
cfg_reg2: 0x23FF, //0x0AA
|
cfg_reg2: 0x23FF, //0x0AA
|
||||||
|
@ -208,7 +201,7 @@ pub mod CXP_GTX {
|
||||||
}
|
}
|
||||||
// rxout_div = 4
|
// rxout_div = 4
|
||||||
CXP_SPEED::CXP_2 | CXP_SPEED::CXP_5 => {
|
CXP_SPEED::CXP_2 | CXP_SPEED::CXP_5 => {
|
||||||
RX_CDR_CFG {
|
CdrConfig {
|
||||||
cfg_reg0: 0x0020, //0x0A8
|
cfg_reg0: 0x0020, //0x0A8
|
||||||
cfg_reg1: 0x1010, //0x0A9
|
cfg_reg1: 0x1010, //0x0A9
|
||||||
cfg_reg2: 0x23FF, //0x0AA
|
cfg_reg2: 0x23FF, //0x0AA
|
||||||
|
@ -218,7 +211,7 @@ pub mod CXP_GTX {
|
||||||
}
|
}
|
||||||
// rxout_div = 2
|
// rxout_div = 2
|
||||||
CXP_SPEED::CXP_3 | CXP_SPEED::CXP_6 => {
|
CXP_SPEED::CXP_3 | CXP_SPEED::CXP_6 => {
|
||||||
RX_CDR_CFG {
|
CdrConfig {
|
||||||
cfg_reg0: 0x0020, //0x0A8
|
cfg_reg0: 0x0020, //0x0A8
|
||||||
cfg_reg1: 0x1020, //0x0A9
|
cfg_reg1: 0x1020, //0x0A9
|
||||||
cfg_reg2: 0x23FF, //0x0AA
|
cfg_reg2: 0x23FF, //0x0AA
|
||||||
|
@ -226,19 +219,9 @@ pub mod CXP_GTX {
|
||||||
cfg_reg4: 0x0003, //0x0AC
|
cfg_reg4: 0x0003, //0x0AC
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// // Divided by 1
|
|
||||||
// CXP_SPEED::CXP_6 => {
|
|
||||||
// RX_CDR_CFG {
|
|
||||||
// cfg_reg0: 0x0020, //0x0A8
|
|
||||||
// cfg_reg1: 0x1040, //0x0A9
|
|
||||||
// cfg_reg2: 0x23FF, //0x0AA
|
|
||||||
// cfg_reg3: 0x0000, //0x0AB
|
|
||||||
// cfg_reg4: 0x0003, //0x0AC
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// rxout_div = 1
|
// rxout_div = 1
|
||||||
CXP_SPEED::CXP_10 | CXP_SPEED::CXP_12 => {
|
CXP_SPEED::CXP_10 | CXP_SPEED::CXP_12 => {
|
||||||
RX_CDR_CFG {
|
CdrConfig {
|
||||||
cfg_reg0: 0x0020, //0x0A8
|
cfg_reg0: 0x0020, //0x0A8
|
||||||
cfg_reg1: 0x1040, //0x0A9
|
cfg_reg1: 0x1040, //0x0A9
|
||||||
cfg_reg2: 0x23FF, //0x0AA
|
cfg_reg2: 0x23FF, //0x0AA
|
||||||
|
@ -255,31 +238,33 @@ pub mod CXP_GTX {
|
||||||
gtx_write(0x0AC, cdr_cfg.cfg_reg4);
|
gtx_write(0x0AC, cdr_cfg.cfg_reg4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn gtx_read(address: u16) -> u16 {
|
fn gtx_read(address: u16) -> u16 {
|
||||||
// DEBUG: DRPCLK need to be on for a few cycle before accessing other DRP ports
|
// DEBUG:
|
||||||
unsafe {
|
unsafe {
|
||||||
csr::cxp::downconn_gtx_daddr_write(address);
|
csr::cxp::downconn_gtx_daddr_write(address);
|
||||||
csr::cxp::downconn_gtx_dread_write(1);
|
csr::cxp::downconn_gtx_dread_write(1);
|
||||||
while (csr::cxp::downconn_gtx_dready_read() != 1) {}
|
while csr::cxp::downconn_gtx_dready_read() != 1 {}
|
||||||
csr::cxp::downconn_gtx_dout_read()
|
csr::cxp::downconn_gtx_dout_read()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn gtx_write(address: u16, value: u16) {
|
fn gtx_write(address: u16, value: u16) {
|
||||||
// DEBUG: DRPCLK need to be on for a few cycle before accessing other DRP ports
|
|
||||||
unsafe {
|
unsafe {
|
||||||
csr::cxp::downconn_gtx_daddr_write(address);
|
csr::cxp::downconn_gtx_daddr_write(address);
|
||||||
csr::cxp::downconn_gtx_din_write(value);
|
csr::cxp::downconn_gtx_din_write(value);
|
||||||
csr::cxp::downconn_gtx_din_stb_write(1);
|
csr::cxp::downconn_gtx_din_stb_write(1);
|
||||||
while (csr::cxp::downconn_gtx_dready_read() != 1) {}
|
while csr::cxp::downconn_gtx_dready_read() != 1 {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn qpll_read(address: u8) -> u16 {
|
fn qpll_read(address: u8) -> u16 {
|
||||||
|
// DEBUG:
|
||||||
unsafe {
|
unsafe {
|
||||||
csr::cxp::downconn_qpll_daddr_write(address);
|
csr::cxp::downconn_qpll_daddr_write(address);
|
||||||
csr::cxp::downconn_qpll_dread_write(1);
|
csr::cxp::downconn_qpll_dread_write(1);
|
||||||
while (csr::cxp::downconn_qpll_dready_read() != 1) {}
|
while csr::cxp::downconn_qpll_dready_read() != 1 {}
|
||||||
csr::cxp::downconn_qpll_dout_read()
|
csr::cxp::downconn_qpll_dout_read()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -289,7 +274,7 @@ pub mod CXP_GTX {
|
||||||
csr::cxp::downconn_qpll_daddr_write(address);
|
csr::cxp::downconn_qpll_daddr_write(address);
|
||||||
csr::cxp::downconn_qpll_din_write(value);
|
csr::cxp::downconn_qpll_din_write(value);
|
||||||
csr::cxp::downconn_qpll_din_stb_write(1);
|
csr::cxp::downconn_qpll_din_stb_write(1);
|
||||||
while (csr::cxp::downconn_qpll_dready_read() != 1) {}
|
while csr::cxp::downconn_qpll_dready_read() != 1 {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue