From 3c02323cfec9fc56e80c7a8dd7b32b125b2b1bd8 Mon Sep 17 00:00:00 2001 From: Maciej Dudek Date: Wed, 25 Jan 2023 11:38:13 +0100 Subject: [PATCH] liblitedram: discard singular 1s that are surrounded by 0s They are most likely glitches and won't be stable. Signed-off-by: Maciej Dudek --- litex/soc/software/liblitedram/sdram.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/litex/soc/software/liblitedram/sdram.c b/litex/soc/software/liblitedram/sdram.c index aea05759e..358df8535 100644 --- a/litex/soc/software/liblitedram/sdram.c +++ b/litex/soc/software/liblitedram/sdram.c @@ -415,7 +415,7 @@ static void sdram_leveling_center_module( { int i; int show; - int working; + int working, last_working; unsigned int errors; int delay, delay_mid, delay_range; int delay_min = -1, delay_max = -1, cur_delay_min = -1; @@ -425,9 +425,11 @@ static void sdram_leveling_center_module( /* Find smallest working delay */ delay = 0; + working = 0; rst_delay(module); while(1) { errors = run_test_pattern(module); + last_working = working; working = errors == 0; show = show_long; #if SDRAM_PHY_DELAYS > 32 @@ -435,8 +437,8 @@ static void sdram_leveling_center_module( #endif if (show) print_scan_errors(errors); - if(working && delay_min < 0) { - delay_min = delay; + if(working && last_working && delay_min < 0) { + delay_min = delay - 1; // delay on edges can be spotty break; } delay++;