From f9f1b8e25db6d6db1aa47a135a5f898c433d516e Mon Sep 17 00:00:00 2001 From: Florent Kermarrec Date: Tue, 29 Jun 2021 11:21:12 +0200 Subject: [PATCH] liblitedram: Consider 1s window is valid when indirectly seen before 0 (start at 0 and long enough). --- litex/soc/software/liblitedram/sdram.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/litex/soc/software/liblitedram/sdram.c b/litex/soc/software/liblitedram/sdram.c index 2828f3560..68d1c99cb 100644 --- a/litex/soc/software/liblitedram/sdram.c +++ b/litex/soc/software/liblitedram/sdram.c @@ -674,8 +674,13 @@ static int sdram_write_leveling_scan(int *delays, int loops, int show) sdram_write_leveling_inc_delay(i); cdelay(100); } - /* Succeed only if the start of a 1s window has been found */ - } else if (one_window_best_count > 0 && one_window_best_start > 0) { + /* Succeed only if the start of a 1s window has been found: */ + } else if ( + /* Start of 1s window directly seen after 0. */ + ((one_window_best_start) > 0 && (one_window_best_count > 0)) || + /* Start of 1s window indirectly seen before 0. */ + ((one_window_best_start == 0) && (one_window_best_count > _sdram_tck_taps/4)) + ){ #if SDRAM_PHY_DELAYS > 32 /* Ensure write delay is just before transition */ one_window_start -= min(one_window_start, 16);