use bitfield::bitfield;
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum AddrOrder {
ChipRowBankColumn = 0,
ChipBankRowColumn = 1,
RowChipBankColumn = 2,
}
impl From<u32> for AddrOrder {
fn from(value: u32) -> Self {
match value {
0 => AddrOrder::ChipRowBankColumn,
1 => AddrOrder::ChipBankRowColumn,
2 => AddrOrder::RowChipBankColumn,
_ => unreachable!(),
}
}
}
impl From<AddrOrder> for u32 {
fn from(value: AddrOrder) -> Self {
value as u32
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum MemType {
Ddr2 = 1,
Ddr3 = 2,
LpDdr2 = 4,
}
impl From<u32> for MemType {
fn from(value: u32) -> Self {
match value {
1 => MemType::Ddr2,
2 => MemType::Ddr3,
4 => MemType::LpDdr2,
_ => unreachable!(),
}
}
}
impl From<MemType> for u32 {
fn from(value: MemType) -> Self {
value as u32
}
}
bitfield! {
pub struct CtrlCfg(u32);
impl Debug;
pub bursttermen, set_bursttermen: 25;
pub burstintren, set_burstintren: 24;
pub nodmpins, set_nodmpins: 23;
pub dqstrken, set_dqstrken: 22;
pub starvelimit, set_starvelimit: 21, 16;
pub reorderen, set_reorderen: 15;
pub gendbe, set_gendbe: 14;
pub gensbe, set_gensbe: 13;
pub cfg_enable_ecc_code_overwrites, set_cfg_enable_ecc_code_overwrites: 12;
pub ecccorren, set_ecccorren: 11;
pub eccen, set_eccen: 10;
pub from into AddrOrder, addrorder, set_addrorder: 9, 8;
pub membl, set_membl: 7, 3;
pub from into MemType, memtype, set_memtype: 2, 0;
}