diff --git a/artiq/firmware/libboard/sdram.rs b/artiq/firmware/libboard/sdram.rs index f2b320c93..f987ab79c 100644 --- a/artiq/firmware/libboard/sdram.rs +++ b/artiq/firmware/libboard/sdram.rs @@ -177,17 +177,19 @@ mod ddr { let delay = Cell::new(0); let incr_delay_until = |expected| { while delay.get() < DDRPHY_MAX_DELAY { - sdram_phy::command_prd(DFII_COMMAND_CAS|DFII_COMMAND_CS| - DFII_COMMAND_RDDATA); - spin_cycles(15); - let mut working = true; - for p in 0..DFII_NPHASES { - for &offset in [n, n + DQS_SIGNAL_COUNT].iter() { - let addr = DFII_PIX_RDDATA_ADDR[p].offset(offset as isize); - let data = prs[DFII_PIX_DATA_SIZE * p + offset]; - if ptr::read_volatile(addr) as u8 != data { - working = false; + for _ in 0..64 { + sdram_phy::command_prd(DFII_COMMAND_CAS|DFII_COMMAND_CS| + DFII_COMMAND_RDDATA); + spin_cycles(15); + + for p in 0..DFII_NPHASES { + for &offset in [n, n + DQS_SIGNAL_COUNT].iter() { + let addr = DFII_PIX_RDDATA_ADDR[p].offset(offset as isize); + let data = prs[DFII_PIX_DATA_SIZE * p + offset]; + if ptr::read_volatile(addr) as u8 != data { + working = false; + } } } }