@ -190,6 +190,20 @@ static struct mx6_ddr3_cfg mt41k256m16ha_125 = {
. trasmin = 3500 ,
} ;
/* MT41K512M16HA-125 (8Gb density) */
static struct mx6_ddr3_cfg mt41k512m16ha_125 = {
. mem_speed = 1600 ,
. density = 8 ,
. width = 16 ,
. banks = 8 ,
. rowaddr = 16 ,
. coladdr = 10 ,
. pagesz = 2 ,
. trcd = 1375 ,
. trcmin = 4875 ,
. trasmin = 3500 ,
} ;
/*
* calibration - these are the various CPU / DDR3 combinations we support
*/
@ -341,6 +355,19 @@ static struct mx6_mmdc_calibration mx6dq_256x64_mmdc_calib = {
. p1_mpwrdlctl = 0 X40304239 ,
} ;
static struct mx6_mmdc_calibration mx6dq_512x32_mmdc_calib = {
/* write leveling calibration determine */
. p0_mpwldectrl0 = 0x002A0025 ,
. p0_mpwldectrl1 = 0x003A002A ,
/* Read DQS Gating calibration */
. p0_mpdgctrl0 = 0x43430356 ,
. p0_mpdgctrl1 = 0x033C0335 ,
/* Read Calibration: DQS delay relative to DQ read access */
. p0_mprddlctl = 0x4B373F42 ,
/* Write Calibration: DQ/DM delay relative to DQS write access */
. p0_mpwrdlctl = 0x303E3C36 ,
} ;
static void spl_dram_init ( int width , int size_mb , int board_model )
{
struct mx6_ddr3_cfg * mem = NULL ;
@ -420,6 +447,11 @@ static void spl_dram_init(int width, int size_mb, int board_model)
else
calib = & mx6sdl_256x32_mmdc_calib ;
debug ( " 4gB density \n " ) ;
} else if ( width = = 32 & & size_mb = = 2048 ) {
mem = & mt41k512m16ha_125 ;
if ( is_cpu_type ( MXC_CPU_MX6Q ) )
calib = & mx6dq_512x32_mmdc_calib ;
debug ( " 8gB density \n " ) ;
} else if ( width = = 64 & & size_mb = = 512 ) {
mem = & mt41k64m16jt_125 ;
debug ( " 1gB density \n " ) ;