|
@@ -19,6 +19,7 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
|
|
|
{
|
|
|
unsigned int i;
|
|
|
volatile ccsr_ddr_t *ddr;
|
|
|
+ u32 temp_sdram_cfg;
|
|
|
|
|
|
switch (ctrl_num) {
|
|
|
case 0:
|
|
@@ -78,6 +79,10 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
|
|
|
out_be32(&ddr->ddr_sdram_rcw_1, regs->ddr_sdram_rcw_1);
|
|
|
out_be32(&ddr->ddr_sdram_rcw_2, regs->ddr_sdram_rcw_2);
|
|
|
|
|
|
+ /* Do not enable the memory */
|
|
|
+ temp_sdram_cfg = in_be32(&ddr->sdram_cfg);
|
|
|
+ temp_sdram_cfg &= ~(SDRAM_CFG_MEM_EN);
|
|
|
+ out_be32(&ddr->sdram_cfg, temp_sdram_cfg);
|
|
|
/*
|
|
|
* For 8572 DDR1 erratum - DDR controller may enter illegal state
|
|
|
* when operatiing in 32-bit bus mode with 4-beat bursts,
|
|
@@ -99,7 +104,9 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
|
|
|
udelay(200);
|
|
|
asm volatile("sync;isync");
|
|
|
|
|
|
- out_be32(&ddr->sdram_cfg, regs->ddr_sdram_cfg);
|
|
|
+ /* Let the controller go */
|
|
|
+ temp_sdram_cfg = in_be32(&ddr->sdram_cfg);
|
|
|
+ out_be32(&ddr->sdram_cfg, temp_sdram_cfg | SDRAM_CFG_MEM_EN);
|
|
|
|
|
|
/* Poll DDR_SDRAM_CFG_2[D_INIT] bit until auto-data init is done. */
|
|
|
while (in_be32(&ddr->sdram_cfg_2) & 0x10) {
|