summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorDave Gerlach <d-gerlach@ti.com>2014-10-06 16:47:17 -0500
committerTero Kristo <t-kristo@ti.com>2014-10-09 11:32:32 +0300
commit0aef69e6e5607c9334657a475e2f8032c1e1d8b2 (patch)
tree06d090f147c6550319c16cbb620ff1b4b58b17b8 /arch
parent1398dc3b138fe09faf1cd46f36e82c1e3d4de81f (diff)
ARM: OMAP2+: sleep43xx: Add omap_bus_sync style accesses
According to AM437x Silicon Errata document (SPRZ408, June 2014) Advisory 11, the SoC also suffers from the potential Asynchronous Bridge Corruption issues seen on OMAP4, which were corrected by 137d105d5. Add omap_bus_sync style accesses to DRAM and SRAM to avoid hangs during suspend/resume by perfoming one strongly ordered write to DRAM and one to SRAM before calling WFI in the suspend path assembly code. Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-omap2/sleep43xx.S10
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/arm/mach-omap2/sleep43xx.S b/arch/arm/mach-omap2/sleep43xx.S
index dde628ba2b9..9444fd4a5f1 100644
--- a/arch/arm/mach-omap2/sleep43xx.S
+++ b/arch/arm/mach-omap2/sleep43xx.S
@@ -225,8 +225,10 @@ sync:
orr r1, r1, #EMIF_POWER_MGMT_SELF_REFRESH_MODE
str r1, [r0, #EMIF_POWER_MANAGEMENT_CONTROL]
- ldr r1, dram_sync_word @ a dummy access to DDR as per spec
+ ldr r1, dram_sync_word @ access DRAM
ldr r2, [r1, #0]
+ str r2, [r1, #0]
+ isb
mov r1, #EMIF_POWER_MGMT_DELAY_PERIOD @ Wait for system
wait_self_refresh: @ to enter SR
@@ -290,6 +292,11 @@ am43xx_deep_sleep_suspend:
ldr r1, am43xx_virt_mpu_clkstctrl
mov r2, #AM43XX_CM_CLKSTCTRL_CLKTRCTRL_SW_SLEEP
str r2, [r1]
+bus_sync:
+ ldr r1, ddr_start @ access SRAM
+ str r1, ddr_start
+
+ isb
/*
* Execute a barrier instruction to ensure that all cache,
@@ -298,6 +305,7 @@ am43xx_deep_sleep_suspend:
*/
dsb
dmb
+ isb
/*
* Execute a WFI instruction and wait until the