diff options
Diffstat (limited to 'arch/arm/cpu/armv7/omap-common/emif-common.c')
| -rw-r--r-- | arch/arm/cpu/armv7/omap-common/emif-common.c | 46 | 
1 files changed, 9 insertions, 37 deletions
| diff --git a/arch/arm/cpu/armv7/omap-common/emif-common.c b/arch/arm/cpu/armv7/omap-common/emif-common.c index bb37cf314..0683b9f74 100644 --- a/arch/arm/cpu/armv7/omap-common/emif-common.c +++ b/arch/arm/cpu/armv7/omap-common/emif-common.c @@ -123,11 +123,13 @@ void emif_reset_phy(u32 base)  static void do_lpddr2_init(u32 base, u32 cs)  {  	u32 mr_addr; +	const struct lpddr2_mr_regs *mr_regs; +	get_lpddr2_mr_regs(&mr_regs);  	/* Wait till device auto initialization is complete */  	while (get_mr(base, cs, LPDDR2_MR0) & LPDDR2_MR0_DAI_MASK)  		; -	set_mr(base, cs, LPDDR2_MR10, MR10_ZQ_ZQINIT); +	set_mr(base, cs, LPDDR2_MR10, mr_regs->mr10);  	/*  	 * tZQINIT = 1 us  	 * Enough loops assuming a maximum of 2GHz @@ -135,22 +137,18 @@ static void do_lpddr2_init(u32 base, u32 cs)  	sdelay(2000); -	if (omap_revision() >= OMAP5430_ES1_0) -		set_mr(base, cs, LPDDR2_MR1, MR1_BL_8_BT_SEQ_WRAP_EN_NWR_8); -	else -		set_mr(base, cs, LPDDR2_MR1, MR1_BL_8_BT_SEQ_WRAP_EN_NWR_3); - -	set_mr(base, cs, LPDDR2_MR16, MR16_REF_FULL_ARRAY); +	set_mr(base, cs, LPDDR2_MR1, mr_regs->mr1); +	set_mr(base, cs, LPDDR2_MR16, mr_regs->mr16);  	/*  	 * Enable refresh along with writing MR2  	 * Encoding of RL in MR2 is (RL - 2)  	 */  	mr_addr = LPDDR2_MR2 | EMIF_REG_REFRESH_EN_MASK; -	set_mr(base, cs, mr_addr, RL_FINAL - 2); +	set_mr(base, cs, mr_addr, mr_regs->mr2); -	if (omap_revision() >= OMAP5430_ES1_0) -		set_mr(base, cs, LPDDR2_MR3, 0x1); +	if (mr_regs->mr3 > 0) +		set_mr(base, cs, LPDDR2_MR3, mr_regs->mr3);  }  static void lpddr2_init(u32 base, const struct emif_regs *regs) @@ -268,9 +266,6 @@ static void ddr3_leveling(u32 base, const struct emif_regs *regs)  static void ddr3_init(u32 base, const struct emif_regs *regs)  {  	struct emif_reg_struct *emif = (struct emif_reg_struct *)base; -	u32 *ext_phy_ctrl_base = 0; -	u32 *emif_ext_phy_ctrl_base = 0; -	u32 i = 0;  	/*  	 * Set SDRAM_CONFIG and PHY control registers to locked frequency @@ -290,27 +285,7 @@ static void ddr3_init(u32 base, const struct emif_regs *regs)  	writel(regs->ref_ctrl, &emif->emif_sdram_ref_ctrl);  	writel(regs->read_idle_ctrl, &emif->emif_read_idlectrl); -	ext_phy_ctrl_base = (u32 *) &(regs->emif_ddr_ext_phy_ctrl_1); -	emif_ext_phy_ctrl_base = (u32 *) &(emif->emif_ddr_ext_phy_ctrl_1); - -	/* Configure external phy control timing registers */ -	for (i = 0; i < EMIF_EXT_PHY_CTRL_TIMING_REG; i++) { -		writel(*ext_phy_ctrl_base, emif_ext_phy_ctrl_base++); -		/* Update shadow registers */ -		writel(*ext_phy_ctrl_base++, emif_ext_phy_ctrl_base++); -	} - -	/* -	 * external phy 6-24 registers do not change with -	 * ddr frequency -	 */ -	for (i = 0; i < EMIF_EXT_PHY_CTRL_CONST_REG; i++) { -		writel(ddr3_ext_phy_ctrl_const_base[i], -					emif_ext_phy_ctrl_base++); -		/* Update shadow registers */ -		writel(ddr3_ext_phy_ctrl_const_base[i], -					emif_ext_phy_ctrl_base++); -	} +	do_ext_phy_settings(base, regs);  	/* enable leveling */  	writel(regs->emif_rd_wr_lvl_rmp_ctl, &emif->emif_rd_wr_lvl_rmp_ctl); @@ -1109,9 +1084,6 @@ void emif_post_init_config(u32 base)  	struct emif_reg_struct *emif = (struct emif_reg_struct *)base;  	u32 omap_rev = omap_revision(); -	if (omap_rev == OMAP5430_ES1_0) -		return; -  	/* reset phy on ES2.0 */  	if (omap_rev == OMAP4430_ES2_0)  		emif_reset_phy(base); |