提交 5b6e3eb5 编写于 作者: S Santosh Shilimkar 提交者: Kevin Hilman

ARM: OMAP4: sleep: Save the complete used register stack frame

OMAP4 sleep entry code even though itself don't use many CPU registers
makes call to the v7_flush_dcache_all() which uses them. Since
v7_flush_dcache_all() doesn't make use of stack, the caller must take
care of the stack frame. Otherwise it will lead to corrupted stack frame.

Fix it by saving used registers.
Reported-by: NGrygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
Cc: Kevin Hilman <khilman@ti.com>
Signed-off-by: NKevin Hilman <khilman@ti.com>
上级 e0e29fd7
...@@ -56,9 +56,13 @@ ppa_por_params: ...@@ -56,9 +56,13 @@ ppa_por_params:
* The restore function pointer is stored at CPUx_WAKEUP_NS_PA_ADDR_OFFSET. * The restore function pointer is stored at CPUx_WAKEUP_NS_PA_ADDR_OFFSET.
* It returns to the caller for CPU INACTIVE and ON power states or in case * It returns to the caller for CPU INACTIVE and ON power states or in case
* CPU failed to transition to targeted OFF/DORMANT state. * CPU failed to transition to targeted OFF/DORMANT state.
*
* omap4_finish_suspend() calls v7_flush_dcache_all() which doesn't save
* stack frame and it expects the caller to take care of it. Hence the entire
* stack frame is saved to avoid possible stack corruption.
*/ */
ENTRY(omap4_finish_suspend) ENTRY(omap4_finish_suspend)
stmfd sp!, {lr} stmfd sp!, {r4-r12, lr}
cmp r0, #0x0 cmp r0, #0x0
beq do_WFI @ No lowpower state, jump to WFI beq do_WFI @ No lowpower state, jump to WFI
...@@ -226,7 +230,7 @@ scu_gp_clear: ...@@ -226,7 +230,7 @@ scu_gp_clear:
skip_scu_gp_clear: skip_scu_gp_clear:
isb isb
dsb dsb
ldmfd sp!, {pc} ldmfd sp!, {r4-r12, pc}
ENDPROC(omap4_finish_suspend) ENDPROC(omap4_finish_suspend)
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册