summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRanjani Vaidyanathan <ra5478@freescale.com>2012-08-29 14:38:03 -0500
committerRanjani Vaidyanathan <ra5478@freescale.com>2012-08-29 14:50:39 -0500
commitd708b6efa321742bc3c67c647703326e00428b92 (patch)
treedddaccef3e786f5d72404f3426a2114834a74f02
parent9f654ff1ecd99a8171dc739e8f8474d8390a0978 (diff)
ENGR00221970 MX6SL:Fix suspend/resume issue on MX6SLEVK
Make sure the Pull Ups are enabled on the DQS lines of LPDDR2 memory. Without that its possible that the data latched by the memory will be incorrect when exiting from self-refresh mode. So only set the drive strengths to 0 when floating the DDR IO pads before entering suspend. Also never float the CKE pad, this pin always needs to be driven, else the DDR may incorrectly exit self-refresh. Hence remove the line that was setting CKE drive strength to zero (GRP_CTLDS). Signed-off-by: Ranjani Vaidyanathan <ra5478@freescale.com>
-rw-r--r--arch/arm/mach-mx6/mx6_suspend.S14
1 files changed, 9 insertions, 5 deletions
diff --git a/arch/arm/mach-mx6/mx6_suspend.S b/arch/arm/mach-mx6/mx6_suspend.S
index 59b676038427..a9b7e30cd85a 100644
--- a/arch/arm/mach-mx6/mx6_suspend.S
+++ b/arch/arm/mach-mx6/mx6_suspend.S
@@ -85,8 +85,7 @@ r2: suspend_iram_base
ldr r4, [r1, #0x330] /* DRAM_SDCKE0 */
ldr r5, [r1, #0x334] /* DRAM_SDCKE1 */
ldr r6, [r1, #0x320] /* DRAM_RESET */
- ldr r7, [r1, #0x5c8] /* GPR_CTLDS */
- stmfd r0!, {r4-r7}
+ stmfd r0!, {r4-r6}
.endm
@@ -122,11 +121,10 @@ r2: suspend_iram_base
str r6, [r1, #0x33c] /* DRAM_SODT0*/
str r7, [r1, #0x340] /* DRAM_SODT1*/
- ldmea r0!, {r4-r7}
+ ldmea r0!, {r4-r6}
str r4, [r1, #0x330] /* DRAM_SDCKE0 */
str r5, [r1, #0x334] /* DRAM_SDCKE1 */
str r6, [r1, #0x320] /* DRAM_RESET */
- str r7, [r1, #0x5c8] /* GPR_CTLDS */
.endm
@@ -138,6 +136,13 @@ r2: suspend_iram_base
str r0, [r1, #0x314] /* DRAM_DQM2 */
str r0, [r1, #0x318] /* DRAM_DQM3 */
+ /* Make sure the Pull Ups are enabled.
+ * So only reduce the drive stength, but
+ * leave the pull-ups in the original state.
+ * This is required for LPDDR2.
+ */
+ ldr r0, [r1, #0x344]
+ orr r0, r0, #0x3000
str r0, [r1, #0x344] /* DRAM_SDQS0 */
str r0, [r1, #0x348] /* DRAM_SDQS1 */
str r0, [r1, #0x34c] /* DRAM_SDQS2 */
@@ -158,7 +163,6 @@ r2: suspend_iram_base
str r0, [r1, #0x33c] /* DRAM_SODT0*/
str r0, [r1, #0x340] /* DRAM_SODT1*/
- str r0, [r1, #0x5c8] /* GPR_CTLDS */
mov r0, #0x80000
str r0, [r1, #0x320] /* DRAM_RESET */
mov r0, #0x1000