software/liblitedram/sdram: improve comments.
This commit is contained in:
parent
44d21cb0f3
commit
5ebea9434b
|
@ -325,10 +325,10 @@ static void sdram_write_leveling_rst_delay(int module) {
|
||||||
int i;
|
int i;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* sel module */
|
/* Select module */
|
||||||
ddrphy_dly_sel_write(1 << module);
|
ddrphy_dly_sel_write(1 << module);
|
||||||
|
|
||||||
/* rst delay */
|
/* Reset delay */
|
||||||
ddrphy_wdly_dq_rst_write(1);
|
ddrphy_wdly_dq_rst_write(1);
|
||||||
ddrphy_wdly_dqs_rst_write(1);
|
ddrphy_wdly_dqs_rst_write(1);
|
||||||
cdelay(100);
|
cdelay(100);
|
||||||
|
@ -339,19 +339,19 @@ static void sdram_write_leveling_rst_delay(int module) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* unsel module */
|
/* Un-select module */
|
||||||
ddrphy_dly_sel_write(0);
|
ddrphy_dly_sel_write(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sdram_write_leveling_inc_delay(int module) {
|
static void sdram_write_leveling_inc_delay(int module) {
|
||||||
/* sel module */
|
/* Select module */
|
||||||
ddrphy_dly_sel_write(1 << module);
|
ddrphy_dly_sel_write(1 << module);
|
||||||
|
|
||||||
/* inc delay */
|
/* Increment delay */
|
||||||
ddrphy_wdly_dq_inc_write(1);
|
ddrphy_wdly_dq_inc_write(1);
|
||||||
ddrphy_wdly_dqs_inc_write(1);
|
ddrphy_wdly_dqs_inc_write(1);
|
||||||
|
|
||||||
/* unsel module */
|
/* Un-select module */
|
||||||
ddrphy_dly_sel_write(0);
|
ddrphy_dly_sel_write(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -379,11 +379,11 @@ static int sdram_write_leveling_scan(int *delays, int loops, int show)
|
||||||
if (show)
|
if (show)
|
||||||
printf(" m%d: |", i);
|
printf(" m%d: |", i);
|
||||||
|
|
||||||
/* rst delay */
|
/* Reset delay */
|
||||||
sdram_write_leveling_rst_delay(i);
|
sdram_write_leveling_rst_delay(i);
|
||||||
cdelay(100);
|
cdelay(100);
|
||||||
|
|
||||||
/* scan write delay taps */
|
/* Scan write delay taps */
|
||||||
for(j=0;j<err_ddrphy_wdly;j++) {
|
for(j=0;j<err_ddrphy_wdly;j++) {
|
||||||
int zero_count = 0;
|
int zero_count = 0;
|
||||||
int one_count = 0;
|
int one_count = 0;
|
||||||
|
@ -412,7 +412,7 @@ static int sdram_write_leveling_scan(int *delays, int loops, int show)
|
||||||
if (show)
|
if (show)
|
||||||
printf("|");
|
printf("|");
|
||||||
|
|
||||||
/* find longer 1 window and set delay at the 0/1 transition */
|
/* Find longer 1 window and set delay at the 0/1 transition */
|
||||||
one_window_active = 0;
|
one_window_active = 0;
|
||||||
one_window_start = 0;
|
one_window_start = 0;
|
||||||
one_window_count = 0;
|
one_window_count = 0;
|
||||||
|
@ -437,24 +437,24 @@ static int sdram_write_leveling_scan(int *delays, int loops, int show)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* rst delay */
|
/* Reset delay */
|
||||||
sdram_write_leveling_rst_delay(i);
|
sdram_write_leveling_rst_delay(i);
|
||||||
cdelay(100);
|
cdelay(100);
|
||||||
|
|
||||||
/* use forced delay if configured */
|
/* Use forced delay if configured */
|
||||||
if (_sdram_write_leveling_dat_delays[i] >= 0) {
|
if (_sdram_write_leveling_dat_delays[i] >= 0) {
|
||||||
delays[i] = _sdram_write_leveling_dat_delays[i];
|
delays[i] = _sdram_write_leveling_dat_delays[i];
|
||||||
|
|
||||||
/* configure write delay */
|
/* Configure write delay */
|
||||||
for(j=0; j<delays[i]; j++) {
|
for(j=0; j<delays[i]; j++) {
|
||||||
sdram_write_leveling_inc_delay(i);
|
sdram_write_leveling_inc_delay(i);
|
||||||
cdelay(100);
|
cdelay(100);
|
||||||
}
|
}
|
||||||
/* succeed only if the start of a 1s window has been found */
|
/* Succeed only if the start of a 1s window has been found */
|
||||||
} else if (one_window_best_count > 0 && one_window_best_start > 0) {
|
} else if (one_window_best_count > 0 && one_window_best_start > 0) {
|
||||||
delays[i] = one_window_best_start;
|
delays[i] = one_window_best_start;
|
||||||
|
|
||||||
/* configure write delay */
|
/* Configure write delay */
|
||||||
for(j=0; j<delays[i]; j++) {
|
for(j=0; j<delays[i]; j++) {
|
||||||
sdram_write_leveling_inc_delay(i);
|
sdram_write_leveling_inc_delay(i);
|
||||||
cdelay(100);
|
cdelay(100);
|
||||||
|
@ -486,27 +486,27 @@ static void sdram_write_leveling_find_cmd_delay(unsigned int *best_error, int *b
|
||||||
int cdly_actual = 0;
|
int cdly_actual = 0;
|
||||||
int delays[SDRAM_PHY_MODULES];
|
int delays[SDRAM_PHY_MODULES];
|
||||||
|
|
||||||
/* scan through the range */
|
/* Scan through the range */
|
||||||
ddrphy_cdly_rst_write(1);
|
ddrphy_cdly_rst_write(1);
|
||||||
cdelay(100);
|
cdelay(100);
|
||||||
for (cdly = cdly_start; cdly < cdly_stop; cdly += cdly_step) {
|
for (cdly = cdly_start; cdly < cdly_stop; cdly += cdly_step) {
|
||||||
/* increment cdly to current value */
|
/* Increment cdly to current value */
|
||||||
while (cdly_actual < cdly) {
|
while (cdly_actual < cdly) {
|
||||||
ddrphy_cdly_inc_write(1);
|
ddrphy_cdly_inc_write(1);
|
||||||
cdelay(100);
|
cdelay(100);
|
||||||
cdly_actual++;
|
cdly_actual++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* write level using this delay */
|
/* Write level using this delay */
|
||||||
if (sdram_write_leveling_scan(delays, 8, 0)) {
|
if (sdram_write_leveling_scan(delays, 8, 0)) {
|
||||||
/* use the mean of delays for error calulation */
|
/* Use the mean of delays for error calulation */
|
||||||
int delay_mean = 0;
|
int delay_mean = 0;
|
||||||
for (int i=0; i < SDRAM_PHY_MODULES; ++i) {
|
for (int i=0; i < SDRAM_PHY_MODULES; ++i) {
|
||||||
delay_mean += delays[i];
|
delay_mean += delays[i];
|
||||||
}
|
}
|
||||||
delay_mean /= SDRAM_PHY_MODULES;
|
delay_mean /= SDRAM_PHY_MODULES;
|
||||||
|
|
||||||
/* we want it to be at the start */
|
/* We want it to be at the start */
|
||||||
int ideal_delay = 4*SDRAM_PHY_DELAYS/32;
|
int ideal_delay = 4*SDRAM_PHY_DELAYS/32;
|
||||||
int error = ideal_delay - delay_mean;
|
int error = ideal_delay - delay_mean;
|
||||||
if (error < 0)
|
if (error < 0)
|
||||||
|
@ -548,11 +548,11 @@ int sdram_write_leveling(void)
|
||||||
sdram_write_leveling_find_cmd_delay(&best_error, &best_cdly,
|
sdram_write_leveling_find_cmd_delay(&best_error, &best_cdly,
|
||||||
cdly_range_start, cdly_range_end, cdly_range_step);
|
cdly_range_start, cdly_range_end, cdly_range_step);
|
||||||
|
|
||||||
/* small optimization - stop if we have zero error */
|
/* Small optimization - stop if we have zero error */
|
||||||
if (best_error == 0)
|
if (best_error == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* use best result as the middle of next range */
|
/* Use best result as the middle of next range */
|
||||||
cdly_range_start = best_cdly - cdly_range_step;
|
cdly_range_start = best_cdly - cdly_range_step;
|
||||||
cdly_range_end = best_cdly + cdly_range_step + 1;
|
cdly_range_end = best_cdly + cdly_range_step + 1;
|
||||||
if (cdly_range_start < 0)
|
if (cdly_range_start < 0)
|
||||||
|
@ -567,7 +567,7 @@ int sdram_write_leveling(void)
|
||||||
best_cdly = _sdram_write_leveling_cmd_delay;
|
best_cdly = _sdram_write_leveling_cmd_delay;
|
||||||
}
|
}
|
||||||
printf(" Setting Cmd/Clk delay to %d taps.\n", best_cdly);
|
printf(" Setting Cmd/Clk delay to %d taps.\n", best_cdly);
|
||||||
/* set working or forced delay */
|
/* Set working or forced delay */
|
||||||
if (best_cdly >= 0) {
|
if (best_cdly >= 0) {
|
||||||
ddrphy_cdly_rst_write(1);
|
ddrphy_cdly_rst_write(1);
|
||||||
cdelay(100);
|
cdelay(100);
|
||||||
|
@ -579,7 +579,7 @@ int sdram_write_leveling(void)
|
||||||
|
|
||||||
printf(" Data scan:\n");
|
printf(" Data scan:\n");
|
||||||
|
|
||||||
/* re-run write leveling the final time */
|
/* Re-run write leveling the final time */
|
||||||
if (!sdram_write_leveling_scan(delays, 128, 1))
|
if (!sdram_write_leveling_scan(delays, 128, 1))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -593,13 +593,13 @@ int sdram_write_leveling(void)
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static void sdram_read_leveling_rst_delay(int module) {
|
static void sdram_read_leveling_rst_delay(int module) {
|
||||||
/* sel module */
|
/* Select module */
|
||||||
ddrphy_dly_sel_write(1 << module);
|
ddrphy_dly_sel_write(1 << module);
|
||||||
|
|
||||||
/* rst delay */
|
/* Reset delay */
|
||||||
ddrphy_rdly_dq_rst_write(1);
|
ddrphy_rdly_dq_rst_write(1);
|
||||||
|
|
||||||
/* unsel module */
|
/* Un-select module */
|
||||||
ddrphy_dly_sel_write(0);
|
ddrphy_dly_sel_write(0);
|
||||||
|
|
||||||
#ifdef SDRAM_PHY_ECP5DDRPHY
|
#ifdef SDRAM_PHY_ECP5DDRPHY
|
||||||
|
@ -610,13 +610,13 @@ static void sdram_read_leveling_rst_delay(int module) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sdram_read_leveling_inc_delay(int module) {
|
static void sdram_read_leveling_inc_delay(int module) {
|
||||||
/* sel module */
|
/* Select module */
|
||||||
ddrphy_dly_sel_write(1 << module);
|
ddrphy_dly_sel_write(1 << module);
|
||||||
|
|
||||||
/* inc delay */
|
/* Increment delay */
|
||||||
ddrphy_rdly_dq_inc_write(1);
|
ddrphy_rdly_dq_inc_write(1);
|
||||||
|
|
||||||
/* unsel module */
|
/* Un-select module */
|
||||||
ddrphy_dly_sel_write(0);
|
ddrphy_dly_sel_write(0);
|
||||||
|
|
||||||
#ifdef SDRAM_PHY_ECP5DDRPHY
|
#ifdef SDRAM_PHY_ECP5DDRPHY
|
||||||
|
@ -628,26 +628,26 @@ static void sdram_read_leveling_inc_delay(int module) {
|
||||||
|
|
||||||
static void sdram_read_leveling_rst_bitslip(char m)
|
static void sdram_read_leveling_rst_bitslip(char m)
|
||||||
{
|
{
|
||||||
/* sel module */
|
/* Select module */
|
||||||
ddrphy_dly_sel_write(1 << m);
|
ddrphy_dly_sel_write(1 << m);
|
||||||
|
|
||||||
/* rst delay */
|
/* Reset delay */
|
||||||
ddrphy_rdly_dq_bitslip_rst_write(1);
|
ddrphy_rdly_dq_bitslip_rst_write(1);
|
||||||
|
|
||||||
/* unsel module */
|
/* Un-select module */
|
||||||
ddrphy_dly_sel_write(0);
|
ddrphy_dly_sel_write(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void sdram_read_leveling_inc_bitslip(char m)
|
static void sdram_read_leveling_inc_bitslip(char m)
|
||||||
{
|
{
|
||||||
/* sel module */
|
/* Select module */
|
||||||
ddrphy_dly_sel_write(1 << m);
|
ddrphy_dly_sel_write(1 << m);
|
||||||
|
|
||||||
/* inc delay */
|
/* Increment delay */
|
||||||
ddrphy_rdly_dq_bitslip_write(1);
|
ddrphy_rdly_dq_bitslip_write(1);
|
||||||
|
|
||||||
/* unsel module */
|
/* Un-select module */
|
||||||
ddrphy_dly_sel_write(0);
|
ddrphy_dly_sel_write(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -877,14 +877,14 @@ static void sdram_write_latency_calibration(void) {
|
||||||
best_bitslip = 0;
|
best_bitslip = 0;
|
||||||
for(bitslip=0; bitslip<SDRAM_PHY_BITSLIPS; bitslip+=2) { /* +2 for tCK steps */
|
for(bitslip=0; bitslip<SDRAM_PHY_BITSLIPS; bitslip+=2) { /* +2 for tCK steps */
|
||||||
score = 0;
|
score = 0;
|
||||||
/* sel module */
|
/* Select module */
|
||||||
ddrphy_dly_sel_write(1 << module);
|
ddrphy_dly_sel_write(1 << module);
|
||||||
/* rst bitslip */
|
/* Reset bitslip */
|
||||||
ddrphy_wdly_dq_bitslip_rst_write(1);
|
ddrphy_wdly_dq_bitslip_rst_write(1);
|
||||||
for (i=0; i<bitslip; i++) {
|
for (i=0; i<bitslip; i++) {
|
||||||
ddrphy_wdly_dq_bitslip_write(1);
|
ddrphy_wdly_dq_bitslip_write(1);
|
||||||
}
|
}
|
||||||
/* unsel module */
|
/* Un-select module */
|
||||||
ddrphy_dly_sel_write(0);
|
ddrphy_dly_sel_write(0);
|
||||||
score = 0;
|
score = 0;
|
||||||
sdram_read_leveling_rst_bitslip(module);
|
sdram_read_leveling_rst_bitslip(module);
|
||||||
|
@ -908,12 +908,13 @@ static void sdram_write_latency_calibration(void) {
|
||||||
|
|
||||||
/* Select best write window */
|
/* Select best write window */
|
||||||
ddrphy_dly_sel_write(1 << module);
|
ddrphy_dly_sel_write(1 << module);
|
||||||
/* rst bitslip */
|
|
||||||
|
/* Reset bitslip */
|
||||||
ddrphy_wdly_dq_bitslip_rst_write(1);
|
ddrphy_wdly_dq_bitslip_rst_write(1);
|
||||||
for (i=0; i<bitslip; i++) {
|
for (i=0; i<bitslip; i++) {
|
||||||
ddrphy_wdly_dq_bitslip_write(1);
|
ddrphy_wdly_dq_bitslip_write(1);
|
||||||
}
|
}
|
||||||
/* unsel module */
|
/* Un-select module */
|
||||||
ddrphy_dly_sel_write(0);
|
ddrphy_dly_sel_write(0);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
Loading…
Reference in New Issue