diff mbox

[U-Boot] mxs: Reset the EMI block on mx23

Message ID 1359427615-11839-1-git-send-email-marex@denx.de
State Superseded
Delegated to: Stefano Babic
Headers show

Commit Message

Marek Vasut Jan. 29, 2013, 2:46 a.m. UTC
The real reason for memory instability was the fact that the EMI block
was gated and not reset throughout the boards' operation. This patch
resets the EMI block properly while also reverts the memory voltage bump.
The memory stability issues were caused by the EMI not being reset properly
and thus there is no longer need to run the memory at higher voltage than
it ought to run at.

This partly reverts 8303ed128a55519f19c5f11087032d4bc4e0537a .

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Stefano Babic <sbabic@denx.de>
---
 arch/arm/cpu/arm926ejs/mxs/spl_mem_init.c |   11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

NOTE: Please apply _SEVERE_ testing!

Comments

Otavio Salvador Jan. 29, 2013, 10:24 a.m. UTC | #1
On Tue, Jan 29, 2013 at 12:46 AM, Marek Vasut <marex@denx.de> wrote:
> The real reason for memory instability was the fact that the EMI block
> was gated and not reset throughout the boards' operation. This patch
> resets the EMI block properly while also reverts the memory voltage bump.
> The memory stability issues were caused by the EMI not being reset properly
> and thus there is no longer need to run the memory at higher voltage than
> it ought to run at.
>
> This partly reverts 8303ed128a55519f19c5f11087032d4bc4e0537a .
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Otavio Salvador <otavio@ossystems.com.br>
> Cc: Stefano Babic <sbabic@denx.de>
> ---
>  arch/arm/cpu/arm926ejs/mxs/spl_mem_init.c |   11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
>
> NOTE: Please apply _SEVERE_ testing!
>

I did a test with and without the patch. *Without* this patch I see an
error in memony but it takes some time to it to error out. With the
patch, the error is mostly instantaneous:

=> mtest
Pattern FFFFFFDD  Writing...  Reading...
Mem error @ 0x40087F6C: found BFFDE002, expected FFFDE002

So it seems to make it worse; but  I am not sure if something else is
missing too.

--
Otavio Salvador                             O.S. Systems
E-mail: otavio@ossystems.com.br  http://www.ossystems.com.br
Mobile: +55 53 9981-7854              http://projetos.ossystems.com.br
diff mbox

Patch

diff --git a/arch/arm/cpu/arm926ejs/mxs/spl_mem_init.c b/arch/arm/cpu/arm926ejs/mxs/spl_mem_init.c
index f8392f6..20833f5 100644
--- a/arch/arm/cpu/arm926ejs/mxs/spl_mem_init.c
+++ b/arch/arm/cpu/arm926ejs/mxs/spl_mem_init.c
@@ -229,7 +229,7 @@  static void mx23_mem_setup_vddmem(void)
 	struct mxs_power_regs *power_regs =
 		(struct mxs_power_regs *)MXS_POWER_BASE;
 
-	writel((0x12 << POWER_VDDMEMCTRL_TRG_OFFSET) |
+	writel((0x10 << POWER_VDDMEMCTRL_TRG_OFFSET) |
 		POWER_VDDMEMCTRL_ENABLE_ILIMIT |
 		POWER_VDDMEMCTRL_ENABLE_LINREG |
 		POWER_VDDMEMCTRL_PULLDOWN_ACTIVE,
@@ -237,13 +237,20 @@  static void mx23_mem_setup_vddmem(void)
 
 	early_delay(10000);
 
-	writel((0x12 << POWER_VDDMEMCTRL_TRG_OFFSET) |
+	writel((0x10 << POWER_VDDMEMCTRL_TRG_OFFSET) |
 		POWER_VDDMEMCTRL_ENABLE_LINREG,
 		&power_regs->hw_power_vddmemctrl);
 }
 
 static void mx23_mem_init(void)
 {
+	/*
+	 * Reset/ungate the EMI block. This is essential, otherwise the system
+	 * suffers from memory instability. This thing is mx23 specific and is
+	 * no longer present on mx28.
+	 */
+	mxs_reset_block(MXS_EMI_BASE);
+
 	mx23_mem_setup_vddmem();
 
 	/*