bios/sdram: show all read scans when failing.
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 13 Sep 2018 03:26:51 +0000 (05:26 +0200)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 13 Sep 2018 03:26:51 +0000 (05:26 +0200)
litex/soc/software/bios/main.c
litex/soc/software/bios/sdram.c
litex/soc/software/bios/sdram.h

index fa5b1533f3a819059637f3d6f233420c9e6deb14..818a069d5b8e07cc19eb1735c32f24d283f0887e 100644 (file)
@@ -403,7 +403,7 @@ static void do_command(char *c)
        else if(strcmp(token, "sdrwlon") == 0) sdrwlon();
        else if(strcmp(token, "sdrwloff") == 0) sdrwloff();
 #endif
-       else if(strcmp(token, "sdrlevel") == 0) sdrlevel();
+       else if(strcmp(token, "sdrlevel") == 0) sdrlevel(0);
 #endif
        else if(strcmp(token, "memtest") == 0) memtest();
        else if(strcmp(token, "sdrinit") == 0) sdrinit();
index a5496fc2b40bf1d0a6d41e0fb77fb97cf25fb9fa..8146228fd804f6096136aba07ba1078a9fa2792c 100644 (file)
@@ -719,7 +719,7 @@ int memtest(void)
 }
 
 #ifdef CSR_DDRPHY_BASE
-int sdrlevel(void)
+int sdrlevel(int silent)
 {
        int delay[DFII_PIX_DATA_SIZE/2];
        int high_skew[DFII_PIX_DATA_SIZE/2];
@@ -729,6 +729,8 @@ int sdrlevel(void)
        int best_score;
        int best_bitslip;
 
+       sdrsw();
+
        for(i=0; i<DFII_PIX_DATA_SIZE/2; i++) {
                ddrphy_dly_sel_write(1<<i);
                ddrphy_rdly_dq_rst_write(1);
@@ -749,8 +751,10 @@ int sdrlevel(void)
        best_score = 0;
        best_bitslip = 0;
        for(bitslip=0; bitslip<ERR_DDRPHY_BITSLIP; bitslip++) {
+               if (!silent)
+                       printf("Read bitslip: %d\n", bitslip);
                /* compute score */
-               score = read_level_scan(1);
+               score = read_level_scan(silent);
                if (score > best_score) {
                        best_bitslip = bitslip;
                        best_score = score;
@@ -764,7 +768,7 @@ int sdrlevel(void)
        }
 
        /* select best read window */
-       printf("Read bitslip: %d\n", best_bitslip);
+       printf("Best read bitslip: %d\n", best_bitslip);
        for(i=0; i<DFII_PIX_DATA_SIZE/2; i++) {
                ddrphy_dly_sel_write(1<<i);
                ddrphy_rdly_dq_bitslip_rst_write(1);
@@ -776,6 +780,8 @@ int sdrlevel(void)
     read_level_scan(0);
        read_level();
 
+       sdrhw();
+
        return 1;
 }
 #endif
@@ -789,14 +795,16 @@ int sdrinit(void)
 #if CSR_DDRPHY_EN_VTC_ADDR
        ddrphy_en_vtc_write(0);
 #endif
-       sdrlevel();
+       sdrlevel(1);
 #if CSR_DDRPHY_EN_VTC_ADDR
        ddrphy_en_vtc_write(1);
 #endif
 #endif
-       sdram_dfii_control_write(DFII_CONTROL_SEL);
-       if(!memtest())
+       if(!memtest()) {
+               /* show scans */
+               sdrlevel(0);
                return 0;
+       }
 
        return 1;
 }
index c5d0984ff7a11b76903070da7f0636c74844d954..887c64d4dda250fde52cc83985646148463f6e7d 100644 (file)
@@ -14,7 +14,7 @@ void sdrwr(char *startaddr);
 #ifdef CSR_DDRPHY_BASE
 void sdrwlon(void);
 void sdrwloff(void);
-int sdrlevel(void);
+int sdrlevel(int silent);
 #endif
 
 int memtest_silent(void);