ARM: pm: omap34xx: remove get_*_restore_pointer functions, directly use entry points
Upon return from off-mode, the ROM code jumps to a restore function saved in the scratchpad. Based on SoC revision or errata, this restore entry point is different. Current code uses some helper functions in sleep34xx.S (get_*_restore_pointer) to get the restore function entry point. When returning from off-mode, this code is executed from SDRAM, so there's no reason to use these helper functions when using the SDRAM entry points directly would work just fine. This patch uses ENTRY/ENDPROC to create "real" entry points for these functions, and uses those values directly when writing the scratchpad. Tested all three entry points - restore_es3: 3430/n900 - restore_3630: 3630/Zoom3 - restore: 3530/Overo Suggested-by: Russell King <rmk+kernel@arm.linux.org.uk> Acked-by: Jean Pihet <j-pihet@ti.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Signed-off-by: Kevin Hilman <khilman@ti.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
076f2cc449
commit
14c79bbed7
@ -286,14 +286,15 @@ void omap3_save_scratchpad_contents(void)
|
|||||||
scratchpad_contents.boot_config_ptr = 0x0;
|
scratchpad_contents.boot_config_ptr = 0x0;
|
||||||
if (cpu_is_omap3630())
|
if (cpu_is_omap3630())
|
||||||
scratchpad_contents.public_restore_ptr =
|
scratchpad_contents.public_restore_ptr =
|
||||||
virt_to_phys(get_omap3630_restore_pointer());
|
virt_to_phys(omap3_restore_3630);
|
||||||
else if (omap_rev() != OMAP3430_REV_ES3_0 &&
|
else if (omap_rev() != OMAP3430_REV_ES3_0 &&
|
||||||
omap_rev() != OMAP3430_REV_ES3_1)
|
omap_rev() != OMAP3430_REV_ES3_1)
|
||||||
scratchpad_contents.public_restore_ptr =
|
scratchpad_contents.public_restore_ptr =
|
||||||
virt_to_phys(get_restore_pointer());
|
virt_to_phys(omap3_restore);
|
||||||
else
|
else
|
||||||
scratchpad_contents.public_restore_ptr =
|
scratchpad_contents.public_restore_ptr =
|
||||||
virt_to_phys(get_es3_restore_pointer());
|
virt_to_phys(omap3_restore_es3);
|
||||||
|
|
||||||
if (omap_type() == OMAP2_DEVICE_TYPE_GP)
|
if (omap_type() == OMAP2_DEVICE_TYPE_GP)
|
||||||
scratchpad_contents.secure_ram_restore_ptr = 0x0;
|
scratchpad_contents.secure_ram_restore_ptr = 0x0;
|
||||||
else
|
else
|
||||||
|
@ -386,9 +386,9 @@ extern void omap4_ctrl_pad_writel(u32 val, u16 offset);
|
|||||||
|
|
||||||
extern void omap3_save_scratchpad_contents(void);
|
extern void omap3_save_scratchpad_contents(void);
|
||||||
extern void omap3_clear_scratchpad_contents(void);
|
extern void omap3_clear_scratchpad_contents(void);
|
||||||
extern u32 *get_restore_pointer(void);
|
extern void omap3_restore(void);
|
||||||
extern u32 *get_es3_restore_pointer(void);
|
extern void omap3_restore_es3(void);
|
||||||
extern u32 *get_omap3630_restore_pointer(void);
|
extern void omap3_restore_3630(void);
|
||||||
extern u32 omap3_arm_context[128];
|
extern u32 omap3_arm_context[128];
|
||||||
extern void omap3_control_save_context(void);
|
extern void omap3_control_save_context(void);
|
||||||
extern void omap3_control_restore_context(void);
|
extern void omap3_control_restore_context(void);
|
||||||
|
@ -74,46 +74,6 @@
|
|||||||
* API functions
|
* API functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
* The "get_*restore_pointer" functions are used to provide a
|
|
||||||
* physical restore address where the ROM code jumps while waking
|
|
||||||
* up from MPU OFF/OSWR state.
|
|
||||||
* The restore pointer is stored into the scratchpad.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.text
|
|
||||||
/* Function call to get the restore pointer for resume from OFF */
|
|
||||||
ENTRY(get_restore_pointer)
|
|
||||||
stmfd sp!, {lr} @ save registers on stack
|
|
||||||
adr r0, restore
|
|
||||||
ldmfd sp!, {pc} @ restore regs and return
|
|
||||||
ENDPROC(get_restore_pointer)
|
|
||||||
.align
|
|
||||||
ENTRY(get_restore_pointer_sz)
|
|
||||||
.word . - get_restore_pointer
|
|
||||||
|
|
||||||
.text
|
|
||||||
/* Function call to get the restore pointer for 3630 resume from OFF */
|
|
||||||
ENTRY(get_omap3630_restore_pointer)
|
|
||||||
stmfd sp!, {lr} @ save registers on stack
|
|
||||||
adr r0, restore_3630
|
|
||||||
ldmfd sp!, {pc} @ restore regs and return
|
|
||||||
ENDPROC(get_omap3630_restore_pointer)
|
|
||||||
.align
|
|
||||||
ENTRY(get_omap3630_restore_pointer_sz)
|
|
||||||
.word . - get_omap3630_restore_pointer
|
|
||||||
|
|
||||||
.text
|
|
||||||
/* Function call to get the restore pointer for ES3 to resume from OFF */
|
|
||||||
ENTRY(get_es3_restore_pointer)
|
|
||||||
stmfd sp!, {lr} @ save registers on stack
|
|
||||||
adr r0, restore_es3
|
|
||||||
ldmfd sp!, {pc} @ restore regs and return
|
|
||||||
ENDPROC(get_es3_restore_pointer)
|
|
||||||
.align
|
|
||||||
ENTRY(get_es3_restore_pointer_sz)
|
|
||||||
.word . - get_es3_restore_pointer
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
/*
|
/*
|
||||||
* L2 cache needs to be toggled for stable OFF mode functionality on 3630.
|
* L2 cache needs to be toggled for stable OFF mode functionality on 3630.
|
||||||
@ -316,12 +276,12 @@ omap3_do_wfi:
|
|||||||
* restore_3630: applies to 36xx
|
* restore_3630: applies to 36xx
|
||||||
* restore: common code for 3xxx
|
* restore: common code for 3xxx
|
||||||
*/
|
*/
|
||||||
restore_es3:
|
ENTRY(omap3_restore_es3)
|
||||||
ldr r5, pm_prepwstst_core_p
|
ldr r5, pm_prepwstst_core_p
|
||||||
ldr r4, [r5]
|
ldr r4, [r5]
|
||||||
and r4, r4, #0x3
|
and r4, r4, #0x3
|
||||||
cmp r4, #0x0 @ Check if previous power state of CORE is OFF
|
cmp r4, #0x0 @ Check if previous power state of CORE is OFF
|
||||||
bne restore
|
bne omap3_restore
|
||||||
adr r0, es3_sdrc_fix
|
adr r0, es3_sdrc_fix
|
||||||
ldr r1, sram_base
|
ldr r1, sram_base
|
||||||
ldr r2, es3_sdrc_fix_sz
|
ldr r2, es3_sdrc_fix_sz
|
||||||
@ -333,22 +293,24 @@ copy_to_sram:
|
|||||||
bne copy_to_sram
|
bne copy_to_sram
|
||||||
ldr r1, sram_base
|
ldr r1, sram_base
|
||||||
blx r1
|
blx r1
|
||||||
b restore
|
b omap3_restore
|
||||||
|
ENDPROC(omap3_restore_es3)
|
||||||
|
|
||||||
restore_3630:
|
ENTRY(omap3_restore_3630)
|
||||||
ldr r1, pm_prepwstst_core_p
|
ldr r1, pm_prepwstst_core_p
|
||||||
ldr r2, [r1]
|
ldr r2, [r1]
|
||||||
and r2, r2, #0x3
|
and r2, r2, #0x3
|
||||||
cmp r2, #0x0 @ Check if previous power state of CORE is OFF
|
cmp r2, #0x0 @ Check if previous power state of CORE is OFF
|
||||||
bne restore
|
bne omap3_restore
|
||||||
/* Disable RTA before giving control */
|
/* Disable RTA before giving control */
|
||||||
ldr r1, control_mem_rta
|
ldr r1, control_mem_rta
|
||||||
mov r2, #OMAP36XX_RTA_DISABLE
|
mov r2, #OMAP36XX_RTA_DISABLE
|
||||||
str r2, [r1]
|
str r2, [r1]
|
||||||
|
ENDPROC(omap3_restore_3630)
|
||||||
|
|
||||||
/* Fall through to common code for the remaining logic */
|
/* Fall through to common code for the remaining logic */
|
||||||
|
|
||||||
restore:
|
ENTRY(omap3_restore)
|
||||||
/*
|
/*
|
||||||
* Read the pwstctrl register to check the reason for mpu reset.
|
* Read the pwstctrl register to check the reason for mpu reset.
|
||||||
* This tells us what was lost.
|
* This tells us what was lost.
|
||||||
@ -438,6 +400,7 @@ skipl2reen:
|
|||||||
|
|
||||||
/* Now branch to the common CPU resume function */
|
/* Now branch to the common CPU resume function */
|
||||||
b cpu_resume
|
b cpu_resume
|
||||||
|
ENDPROC(omap3_restore)
|
||||||
|
|
||||||
.ltorg
|
.ltorg
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user