software/liblitedram: add separators, expose read_level.
This commit is contained in:
parent
ae152e28a7
commit
6d8a367abe
|
@ -24,6 +24,8 @@
|
||||||
|
|
||||||
#include "sdram.h"
|
#include "sdram.h"
|
||||||
|
|
||||||
|
#ifdef CSR_SDRAM_BASE
|
||||||
|
|
||||||
__attribute__((unused)) static void cdelay(int i)
|
__attribute__((unused)) static void cdelay(int i)
|
||||||
{
|
{
|
||||||
#ifndef CONFIG_SIM_DISABLE_DELAYS
|
#ifndef CONFIG_SIM_DISABLE_DELAYS
|
||||||
|
@ -34,7 +36,9 @@ __attribute__((unused)) static void cdelay(int i)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CSR_SDRAM_BASE
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Constants */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define DFII_ADDR_SHIFT CONFIG_CSR_ALIGNMENT/8
|
#define DFII_ADDR_SHIFT CONFIG_CSR_ALIGNMENT/8
|
||||||
|
|
||||||
|
@ -50,6 +54,10 @@ int sdrfreq(void) {
|
||||||
return SDRAM_PHY_XDR*SDRAM_PHY_PHASES*CONFIG_CLOCK_FREQUENCY;
|
return SDRAM_PHY_XDR*SDRAM_PHY_PHASES*CONFIG_CLOCK_FREQUENCY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Software/Hardware Control */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
void sdrsw(void)
|
void sdrsw(void)
|
||||||
{
|
{
|
||||||
sdram_dfii_control_write(DFII_CONTROL_CKE|DFII_CONTROL_ODT|DFII_CONTROL_RESET_N);
|
sdram_dfii_control_write(DFII_CONTROL_CKE|DFII_CONTROL_ODT|DFII_CONTROL_RESET_N);
|
||||||
|
@ -62,6 +70,10 @@ void sdrhw(void)
|
||||||
printf("SDRAM now under hardware control\n");
|
printf("SDRAM now under hardware control\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Manual Control */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
void sdrrow(unsigned int row)
|
void sdrrow(unsigned int row)
|
||||||
{
|
{
|
||||||
if(row == 0) {
|
if(row == 0) {
|
||||||
|
@ -173,6 +185,10 @@ void sdrwr(unsigned int addr)
|
||||||
|
|
||||||
#ifdef CSR_DDRPHY_BASE
|
#ifdef CSR_DDRPHY_BASE
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Write Leveling */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifdef SDRAM_PHY_WRITE_LEVELING_CAPABLE
|
#ifdef SDRAM_PHY_WRITE_LEVELING_CAPABLE
|
||||||
void sdrwlon(void)
|
void sdrwlon(void)
|
||||||
{
|
{
|
||||||
|
@ -443,9 +459,12 @@ int write_level(void)
|
||||||
return best_cdly >= 0;
|
return best_cdly >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* SDRAM_PHY_WRITE_LEVELING_CAPABLE */
|
#endif /* SDRAM_PHY_WRITE_LEVELING_CAPABLE */
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Read Leveling */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
static void read_delay_rst(int module) {
|
static void read_delay_rst(int module) {
|
||||||
/* sel module */
|
/* sel module */
|
||||||
ddrphy_dly_sel_write(1 << module);
|
ddrphy_dly_sel_write(1 << module);
|
||||||
|
@ -582,7 +601,7 @@ static int read_level_scan(int module, int bitslip)
|
||||||
return score;
|
return score;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void read_level(int module)
|
void read_level(int module)
|
||||||
{
|
{
|
||||||
unsigned int prv;
|
unsigned int prv;
|
||||||
unsigned char prs[SDRAM_PHY_PHASES][DFII_PIX_DATA_BYTES];
|
unsigned char prs[SDRAM_PHY_PHASES][DFII_PIX_DATA_BYTES];
|
||||||
|
@ -712,9 +731,6 @@ static void read_level(int module)
|
||||||
|
|
||||||
#endif /* CSR_SDRAM_BASE */
|
#endif /* CSR_SDRAM_BASE */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef CSR_SDRAM_BASE
|
#ifdef CSR_SDRAM_BASE
|
||||||
|
|
||||||
#if defined(SDRAM_PHY_WRITE_LEVELING_CAPABLE) || defined(SDRAM_PHY_READ_LEVELING_CAPABLE)
|
#if defined(SDRAM_PHY_WRITE_LEVELING_CAPABLE) || defined(SDRAM_PHY_READ_LEVELING_CAPABLE)
|
||||||
|
@ -759,6 +775,10 @@ static void read_leveling(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Leveling */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
int _write_level_cdly_scan = 1;
|
int _write_level_cdly_scan = 1;
|
||||||
|
|
||||||
int sdrlevel(void)
|
int sdrlevel(void)
|
||||||
|
@ -794,6 +814,10 @@ int sdrlevel(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Calibration */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
void sdrcal(void)
|
void sdrcal(void)
|
||||||
{
|
{
|
||||||
#ifdef CSR_DDRPHY_BASE
|
#ifdef CSR_DDRPHY_BASE
|
||||||
|
@ -810,6 +834,10 @@ void sdrcal(void)
|
||||||
sdrhw();
|
sdrhw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Initialization */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
int sdrinit(void)
|
int sdrinit(void)
|
||||||
{
|
{
|
||||||
printf("Initializing DRAM @0x%08x...\n", MAIN_RAM_BASE);
|
printf("Initializing DRAM @0x%08x...\n", MAIN_RAM_BASE);
|
||||||
|
@ -841,6 +869,10 @@ int sdrinit(void)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* MPR access */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define MPR0_SEL (0 << 0)
|
#define MPR0_SEL (0 << 0)
|
||||||
#define MPR1_SEL (1 << 0)
|
#define MPR1_SEL (1 << 0)
|
||||||
#define MPR2_SEL (2 << 0)
|
#define MPR2_SEL (2 << 0)
|
||||||
|
|
|
@ -3,26 +3,66 @@
|
||||||
|
|
||||||
#include <generated/csr.h>
|
#include <generated/csr.h>
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Constants */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
int sdrdatabits(void);
|
int sdrdatabits(void);
|
||||||
int sdrfreq(void);
|
int sdrfreq(void);
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Software/Hardware Control */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
void sdrsw(void);
|
void sdrsw(void);
|
||||||
void sdrhw(void);
|
void sdrhw(void);
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Manual Control */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
void sdrrow(unsigned int row);
|
void sdrrow(unsigned int row);
|
||||||
void sdrrdbuf(int dq);
|
void sdrrdbuf(int dq);
|
||||||
void sdrrd(unsigned int addr, int dq);
|
void sdrrd(unsigned int addr, int dq);
|
||||||
void sdrrderr(int count);
|
void sdrrderr(int count);
|
||||||
void sdrwr(unsigned int addr);
|
void sdrwr(unsigned int addr);
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Write Leveling */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
void sdrwlon(void);
|
void sdrwlon(void);
|
||||||
void sdrwloff(void);
|
void sdrwloff(void);
|
||||||
int write_level(void);
|
int write_level(void);
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Read Leveling */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void read_level(int module);
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Leveling */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
int sdrlevel(void);
|
int sdrlevel(void);
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Calibration */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
void sdrcal(void);
|
void sdrcal(void);
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* Initialization */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
int sdrinit(void);
|
int sdrinit(void);
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* MPR access */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
void sdrmrwr(char reg, int value);
|
void sdrmrwr(char reg, int value);
|
||||||
void sdrmpron(char mpr);
|
void sdrmpron(char mpr);
|
||||||
void sdrmproff(void);
|
void sdrmproff(void);
|
||||||
|
|
Loading…
Reference in New Issue