volatile uint32 PHY_REG7;
uint32 reserved8[(0xe0-0xdc)/4];
volatile uint32 PHY_REG8; //0xe0
- uint32 reserved9[(0x114-0xe4)/4];
+ volatile uint32 PHY_REG0e4; //use for DQS ODT off
+ uint32 reserved9[(0x114-0xe8)/4];
volatile uint32 PHY_REG9; //0x114
volatile uint32 PHY_REG10;
uint32 reserved10[(0x120-0x11c)/4];
volatile uint32 PHY_REG11; //0x120
- uint32 reserved11[(0x1c0-0x124)/4];
+ volatile uint32 PHY_REG124; //use for DQS ODT off
+ uint32 reserved11[(0x1c0-0x128)/4];
volatile uint32 PHY_REG29; //0x1c0
uint32 reserved12[(0x264-0x1c4)/4];
- volatile uint32 PHY_REG264;
+ volatile uint32 PHY_REG264; //use for phy soft reset
uint32 reserved13[(0x2b0-0x268)/4];
volatile uint32 PHY_REG2a; //0x2b0
uint32 reserved14[(0x2c4-0x2b4)/4];
{
volatile uint32 value;
- //clear auto self-refresh idle
- if(pDDR_Reg->MCFG1 & 0xFF)
- {
- //access state ÏÂдMCFG1ÎÞЧ È·±£½øÈëlowpower
- while(pDDR_Reg->STAT.b.ctl_stat == Access);
- pDDR_Reg->MCFG1=(pDDR_Reg->MCFG1&0xffffff00)|0x0;
- dsb();
- }
-
while(1)
{
value = pDDR_Reg->STAT.b.ctl_stat;
if(value == Config)
{
+ if(pDDR_Reg->MCFG1 & 0xFF)
+ {
+ pDDR_Reg->MCFG1=(pDDR_Reg->MCFG1&0xffffff00)|0x0;
+ dsb();
+ }
break;
}
switch(value)
{
case Low_power:
- pDDR_Reg->SCTL = WAKEUP_STATE;
+ do
+ {
+ if(pDDR_Reg->MCFG1 & 0xFF)
+ {
+ pDDR_Reg->MCFG1=(pDDR_Reg->MCFG1&0xffffff00)|0x0;
+ dsb();
+ }
+ pDDR_Reg->SCTL = WAKEUP_STATE;
+ dsb();
+ }
while((pDDR_Reg->STAT.b.ctl_stat) != Access);
case Access:
case Init_mem:
pDDR_Reg->SCTL = CFG_STATE;
- while((pDDR_Reg->STAT.b.ctl_stat) != Config);
+ dsb();
break;
default: //Transitional state
break;
else
{
pPHY_Reg->PHY_REG27 = ((PHY_RTT_212O<<3) | PHY_RTT_212O); //0x5 ODT = 71ohm
- pPHY_Reg->PHY_REG28 = ((PHY_RTT_212O<<3) | PHY_RTT_212O);
+ pPHY_Reg->PHY_REG28 = ((PHY_RTT_212O<<3) | PHY_RTT_212O);
}
tmp = ((PHY_RON_46O<<3) | PHY_RON_46O); //0x5 = 46ohm
pPHY_Reg->PHY_REG22 = tmp; //CK driver strength
pPHY_Reg->PHY_REG25 = tmp; //Left 8bit DQ driver strength
pPHY_Reg->PHY_REG26 = tmp; //Right 8bit DQ driver strength
+ dsb();
}
/*----------------------------------------------------------------------
//enter config state
ddr_move_to_Config_state();
-
//set auto power down idle
pDDR_Reg->MCFG=(pDDR_Reg->MCFG&0xffff00ff)|(PD_IDLE<<8);
{
uint32 ddrMR1 = ddr_reg.ddrMR[1];
uint32 cs;
-
+
ddr_move_to_Config_state();
pDDR_Reg->TZQCSI = 0;
+ dsb();
if((nMHz<=DDR3_DDR2_DLL_DISABLE_FREQ) && ((mem_type == DDR3) || (mem_type == DDR2))) // DLL disable
{
cs = (pGRF_Reg->GRF_OS_REG[1] >> DDR_RANK_COUNT) & 0x1; //get rank num
n= *(volatile uint32_t *)SysSrv_DdrConf;
n= pGRF_Reg->GRF_SOC_STATUS0;
dsb();
-
/** 2. ddr enter self-refresh mode or precharge power-down mode */
ddr_selfrefresh_enter(ret);
/** 1. Make sure there is no host access */
flush_cache_all();
outer_flush_all();
- flush_tlb_all();
+// flush_tlb_all();
for(i=0;i<8;i++) //sram size = 8KB
{
n= pPHY_Reg->PHY_REG1;
n= pCRU_Reg->CRU_PLL_CON[0][0];
n= *(volatile uint32_t *)SysSrv_DdrConf;
+ n= pGRF_Reg->GRF_SOC_STATUS0;
dsb();
-// sram_printch('b');
ddr_selfrefresh_enter(0);
pCRU_Reg->CRU_MODE_CON = (0x1<<((1*4) + 16)) | (0x0<<(1*4)); //PLL slow-mode
dsb();
*/
-
/*----------------------------------------------------------------------
Name : int ddr_init(uint32_t dram_speed_bin, uint32_t freq)
Desc : ddr ³õʼ»¯º¯Êý
uint32_t cs,die=1;
uint32_t calStatusLeft, calStatusRight;
- ddr_print("version 1.00 20120803 \n");
+ ddr_print("version 1.00 20120827 \n");
cs = (1 << (((pGRF_Reg->GRF_OS_REG[1]) >> DDR_RANK_COUNT)&0x1)); //case 0:1rank ; case 1:2rank ;
mem_type = ((pGRF_Reg->GRF_OS_REG[1] >> 13) &0x7);
ddr_speed_bin = dram_speed_bin;