eth: derive proper mdc_clk_div from clocks

This commit is contained in:
Astro 2019-08-18 22:43:56 +02:00
parent 022da2a7a7
commit bfb3a00a4e

View File

@ -10,6 +10,8 @@ pub mod tx;
/// Size of all the buffers /// Size of all the buffers
pub const MTU: usize = 1536; pub const MTU: usize = 1536;
/// Maximum MDC clock
const MAX_MDC: u32 = 2_500_000;
pub struct Eth<RX, TX> { pub struct Eth<RX, TX> {
regs: &'static mut regs::RegisterBlock, regs: &'static mut regs::RegisterBlock,
@ -288,6 +290,9 @@ impl<RX, TX> Eth<RX, TX> {
} }
fn configure(&mut self, macaddr: [u8; 6]) { fn configure(&mut self, macaddr: [u8; 6]) {
let clocks = CpuClocks::get();
let mut mdc_clk_div = (clocks.cpu_1x() / MAX_MDC) + 1;
self.regs.net_cfg.write( self.regs.net_cfg.write(
regs::NetCfg::zeroed() regs::NetCfg::zeroed()
.full_duplex(true) .full_duplex(true)
@ -301,7 +306,7 @@ impl<RX, TX> Eth<RX, TX> {
.fcs_remove(true) .fcs_remove(true)
// One of the slower speeds // One of the slower speeds
// TODO: calculate properly // TODO: calculate properly
.mdc_clk_div(0b110) .mdc_clk_div((mdc_clk_div >> 4).min(0b111) as u8)
); );
let macaddr_msbs = let macaddr_msbs =