summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/sleep-t30.S
diff options
context:
space:
mode:
authorPrashant Gaikwad <pgaikwad@nvidia.com>2013-05-31 14:45:32 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 13:16:46 -0700
commit5fd27c0a74265731edb771ed91680a658dc9f7bf (patch)
treeb939822e1cc260d79e9eecfd9631c19b186e79ba /arch/arm/mach-tegra/sleep-t30.S
parent193b5d71aaec97aa22a9c114fb0a1c2742c422e8 (diff)
arm: tegra: save and restore EMC_REFRESH value
After exit from LP1/LP0 EMC_REFRESH was restored to 1 which is incorrect from timing perspective. It was working fine with system suspend state since later frequency switch will restore it to correct value. But for LP1 in idle it regressed power on DDR power rails since DRAM dynamic self refresh will not work. Bug 1294838 Change-Id: I0aa9a7ef74f28a97cd1603179f2362d223b10c76 Signed-off-by: Prashant Gaikwad <pgaikwad@nvidia.com> Reviewed-on: http://git-master/r/234474 Reviewed-by: Simone Willett <swillett@nvidia.com> Tested-by: Simone Willett <swillett@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/sleep-t30.S')
-rw-r--r--arch/arm/mach-tegra/sleep-t30.S37
1 files changed, 22 insertions, 15 deletions
diff --git a/arch/arm/mach-tegra/sleep-t30.S b/arch/arm/mach-tegra/sleep-t30.S
index c12103d90ec3..4342bcac1432 100644
--- a/arch/arm/mach-tegra/sleep-t30.S
+++ b/arch/arm/mach-tegra/sleep-t30.S
@@ -463,10 +463,10 @@ ENTRY(tegra3_lp1_reset)
add r5, pc, #tegra11_sdram_pad_save-(.+8) @ r5 --> saved data
#endif
- ldr r4, [r5, #0x18]
+ ldr r4, [r5, #0x1c]
str r4, [r0, #CLK_RESET_CLK_SOURCE_MSELECT]
- ldr r4, [r5, #0x1C]
+ ldr r4, [r5, #0x20]
str r4, [r0, #CLK_RESET_SCLK_BURST]
#if defined(CONFIG_ARCH_TEGRA_3x_SOC)
mov32 r4, ((1<<28) | (8)) @ burst policy is PLLX
@@ -572,7 +572,7 @@ emc_exit_selfrefresh:
add r5, pc, #tegra11_sdram_pad_save-(.+8) @ r5 --> saved data
#endif
- ldr r1, [r5, #0x14] @ PMC_IO_DPD_STATUS
+ ldr r1, [r5, #0x18] @ PMC_IO_DPD_STATUS
mvn r1, r1
bic r1, r1, #(0x1<<31)
orr r1, r1, #(0x1<<30)
@@ -619,6 +619,7 @@ emc_wait_audo_cal_onetime:
str r1, [r0, #EMC_NOP]
str r1, [r0, #EMC_NOP]
#endif
+ ldr r1, [r5, #0x14]
str r1, [r0, #EMC_REFRESH]
emc_device_mask r1, r0
@@ -689,7 +690,7 @@ zcal_done:
mov32 r1, TEGRA_EMC1_BASE
cmp r0, r1
movne r0, r1
- addne r5, r5, #0x20
+ addne r5, r5, #0x24
bne exit_self_refresh
#endif
@@ -720,6 +721,7 @@ tegra3_sdram_pad_save:
.word 0
.word 0
.word 0
+ .word 0
tegra3_sdram_pad_address:
.word TEGRA_EMC_BASE + EMC_CFG @0x0
@@ -727,9 +729,10 @@ tegra3_sdram_pad_address:
.word TEGRA_EMC_BASE + EMC_AUTO_CAL_INTERVAL @0x8
.word TEGRA_EMC_BASE + EMC_XM2VTTGENPADCTRL @0xc
.word TEGRA_EMC_BASE + EMC_XM2VTTGENPADCTRL2 @0x10
- .word TEGRA_PMC_BASE + PMC_IO_DPD_STATUS @0x14
- .word TEGRA_CLK_RESET_BASE + CLK_RESET_CLK_SOURCE_MSELECT @0x18
- .word TEGRA_CLK_RESET_BASE + CLK_RESET_SCLK_BURST @0x1c
+ .word TEGRA_EMC_BASE + EMC_REFRESH @0x14
+ .word TEGRA_PMC_BASE + PMC_IO_DPD_STATUS @0x18
+ .word TEGRA_CLK_RESET_BASE + CLK_RESET_CLK_SOURCE_MSELECT @0x1c
+ .word TEGRA_CLK_RESET_BASE + CLK_RESET_SCLK_BURST @0x20
#endif
#if defined(CONFIG_ARCH_TEGRA_11x_SOC)
.align L1_CACHE_SHIFT
@@ -748,6 +751,8 @@ tegra11_sdram_pad_save:
.word 0
.word 0
.word 0
+ .word 0
+ .word 0
tegra11_sdram_pad_address:
.word TEGRA_EMC0_BASE + EMC_CFG @0x0
@@ -755,14 +760,16 @@ tegra11_sdram_pad_address:
.word TEGRA_EMC0_BASE + EMC_AUTO_CAL_INTERVAL @0x8
.word TEGRA_EMC0_BASE + EMC_XM2VTTGENPADCTRL @0xc
.word TEGRA_EMC0_BASE + EMC_XM2VTTGENPADCTRL2 @0x10
- .word TEGRA_PMC_BASE + PMC_IO_DPD_STATUS @0x14
- .word TEGRA_CLK_RESET_BASE + CLK_RESET_CLK_SOURCE_MSELECT @0x18
- .word TEGRA_CLK_RESET_BASE + CLK_RESET_SCLK_BURST @0x1c
- .word TEGRA_EMC1_BASE + EMC_CFG @0x20
- .word TEGRA_EMC1_BASE + EMC_ZCAL_INTERVAL @0x24
- .word TEGRA_EMC1_BASE + EMC_AUTO_CAL_INTERVAL @0x28
- .word TEGRA_EMC1_BASE + EMC_XM2VTTGENPADCTRL @0x2c
- .word TEGRA_EMC1_BASE + EMC_XM2VTTGENPADCTRL2 @0x30
+ .word TEGRA_EMC0_BASE + EMC_REFRESH @0x14
+ .word TEGRA_PMC_BASE + PMC_IO_DPD_STATUS @0x18
+ .word TEGRA_CLK_RESET_BASE + CLK_RESET_CLK_SOURCE_MSELECT @0x1c
+ .word TEGRA_CLK_RESET_BASE + CLK_RESET_SCLK_BURST @0x20
+ .word TEGRA_EMC1_BASE + EMC_CFG @0x24
+ .word TEGRA_EMC1_BASE + EMC_ZCAL_INTERVAL @0x28
+ .word TEGRA_EMC1_BASE + EMC_AUTO_CAL_INTERVAL @0x2c
+ .word TEGRA_EMC1_BASE + EMC_XM2VTTGENPADCTRL @0x30
+ .word TEGRA_EMC1_BASE + EMC_XM2VTTGENPADCTRL2 @0x34
+ .word TEGRA_EMC1_BASE + EMC_REFRESH @0x38
#endif
#ifdef CONFIG_TEGRA_LP1_LOW_COREVOLTAGE