Soft panic for RTIO PLL reasons #199
|
@ -9,7 +9,7 @@ use libcortex_a9::{
|
||||||
enable_fpu,
|
enable_fpu,
|
||||||
cache::{dcci_slice, iciallu, bpiall},
|
cache::{dcci_slice, iciallu, bpiall},
|
||||||
asm::{dsb, isb},
|
asm::{dsb, isb},
|
||||||
sync_channel
|
sync_channel,
|
||||||
};
|
};
|
||||||
use libboard_zynq::{mpcore, gic};
|
use libboard_zynq::{mpcore, gic};
|
||||||
use libsupport_zynq::ram;
|
use libsupport_zynq::ram;
|
||||||
|
|
|
@ -120,10 +120,10 @@ pub fn main_core0() {
|
||||||
Config::new_dummy()
|
Config::new_dummy()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
task::spawn(report_async_rtio_errors());
|
|
||||||
|
|
||||||
rtio_clocking::init(&mut timer, &cfg);
|
rtio_clocking::init(&mut timer, &cfg);
|
||||||
|
|
||||||
comms::main(timer, cfg);
|
task::spawn(report_async_rtio_errors());
|
||||||
|
|
||||||
|
comms::main(timer, cfg);
|
||||||
}
|
}
|
|
@ -56,7 +56,7 @@ fn panic(info: &core::panic::PanicInfo) -> ! {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn soft_panic(info: &core::panic::PanicInfo) -> ! {
|
fn soft_panic(info: &core::panic::PanicInfo) -> ! {
|
||||||
// log panic info to log (prints not visible in coremgmt logs)
|
// write panic info to log, so coremgmt can also read it
|
||||||
|
|||||||
if let Some(location) = info.location() {
|
if let Some(location) = info.location() {
|
||||||
error!("panic at {}:{}:{}", location.file(), location.line(), location.column());
|
error!("panic at {}:{}:{}", location.file(), location.line(), location.column());
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -9,6 +9,7 @@ use libboard_zynq::i2c::I2c;
|
||||||
use crate::i2c;
|
use crate::i2c;
|
||||||
#[cfg(has_si5324)]
|
#[cfg(has_si5324)]
|
||||||
use libboard_artiq::si5324;
|
use libboard_artiq::si5324;
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Copy, Clone)]
|
#[derive(Debug, PartialEq, Copy, Clone)]
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
pub enum RtioClock {
|
pub enum RtioClock {
|
||||||
|
@ -21,6 +22,7 @@ pub enum RtioClock {
|
||||||
Ext0_Synth0_100to125,
|
Ext0_Synth0_100to125,
|
||||||
Ext0_Synth0_125to125,
|
Ext0_Synth0_125to125,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unreachable_code)]
|
#[allow(unreachable_code)]
|
||||||
fn get_rtio_clock_cfg(cfg: &Config) -> RtioClock {
|
fn get_rtio_clock_cfg(cfg: &Config) -> RtioClock {
|
||||||
let mut res = RtioClock::Default;
|
let mut res = RtioClock::Default;
|
||||||
|
@ -63,6 +65,8 @@ fn get_rtio_clock_cfg(cfg: &Config) -> RtioClock {
|
||||||
}
|
}
|
||||||
res
|
res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn init_rtio(timer: &mut GlobalTimer, _clk: RtioClock) {
|
fn init_rtio(timer: &mut GlobalTimer, _clk: RtioClock) {
|
||||||
#[cfg(has_rtio_crg_clock_sel)]
|
#[cfg(has_rtio_crg_clock_sel)]
|
||||||
let clock_sel = match _clk {
|
let clock_sel = match _clk {
|
||||||
|
@ -79,6 +83,7 @@ fn init_rtio(timer: &mut GlobalTimer, _clk: RtioClock) {
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
pl::csr::rtio_crg::pll_reset_write(1);
|
pl::csr::rtio_crg::pll_reset_write(1);
|
||||||
#[cfg(has_rtio_crg_clock_sel)]
|
#[cfg(has_rtio_crg_clock_sel)]
|
||||||
|
@ -92,10 +97,12 @@ fn init_rtio(timer: &mut GlobalTimer, _clk: RtioClock) {
|
||||||
} else {
|
} else {
|
||||||
panic!("RTIO PLL failed to lock");
|
panic!("RTIO PLL failed to lock");
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
pl::csr::rtio_core::reset_phy_write(1);
|
pl::csr::rtio_core::reset_phy_write(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(has_drtio)]
|
#[cfg(has_drtio)]
|
||||||
fn init_drtio(timer: &mut GlobalTimer)
|
fn init_drtio(timer: &mut GlobalTimer)
|
||||||
{
|
{
|
||||||
|
@ -107,6 +114,7 @@ fn init_drtio(timer: &mut GlobalTimer)
|
||||||
pl::csr::drtio_transceiver::txenable_write(0xffffffffu32 as _);
|
pl::csr::drtio_transceiver::txenable_write(0xffffffffu32 as _);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(has_si5324)]
|
#[cfg(has_si5324)]
|
||||||
fn setup_si5324(i2c: &mut I2c, timer: &mut GlobalTimer, clk: RtioClock) {
|
fn setup_si5324(i2c: &mut I2c, timer: &mut GlobalTimer, clk: RtioClock) {
|
||||||
let (si5324_settings, si5324_ref_input) = match clk {
|
let (si5324_settings, si5324_ref_input) = match clk {
|
||||||
|
@ -225,7 +233,9 @@ fn setup_si5324(i2c: &mut I2c, timer: &mut GlobalTimer, clk: RtioClock) {
|
||||||
};
|
};
|
||||||
si5324::setup(i2c, &si5324_settings, si5324_ref_input, timer).expect("cannot initialize Si5324");
|
si5324::setup(i2c, &si5324_settings, si5324_ref_input, timer).expect("cannot initialize Si5324");
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn init(timer: &mut GlobalTimer, cfg: &Config) {
|
pub fn init(timer: &mut GlobalTimer, cfg: &Config) {
|
||||||
|
|
||||||
let clk = get_rtio_clock_cfg(cfg);
|
let clk = get_rtio_clock_cfg(cfg);
|
||||||
#[cfg(has_si5324)]
|
#[cfg(has_si5324)]
|
||||||
{
|
{
|
||||||
|
@ -238,5 +248,7 @@ pub fn init(timer: &mut GlobalTimer, cfg: &Config) {
|
||||||
}
|
}
|
||||||
#[cfg(has_drtio)]
|
#[cfg(has_drtio)]
|
||||||
init_drtio(timer);
|
init_drtio(timer);
|
||||||
|
|
||||||
init_rtio(timer, clk);
|
init_rtio(timer, clk);
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Had to read that twice...
Maybe reformulate along the lines:
"Write panic info to the log, so that coremgmt can see it"