Kevin, On Fri, Jun 24, 2011 at 2:16 AM, Kevin Hilman <khilman@xxxxxx> wrote: > 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@xxxxxxxxxxxxxxxx> > Cc: Jean Pihet <jean.pihet@xxxxxxxxxxxxxx> > Signed-off-by: Kevin Hilman <khilman@xxxxxx> This makes sense. FWIW: Acked-by: Jean Pihet <j-pihet@xxxxxx Thanks, Jean > --- > Applies on top of Russell's suspend cleanup/rejig, and available > (along with Russell's series) in my pm-wip/idle-suspend branch. > > Russell, since it depends on your series, feel free to add it to your > series if you like. Or if you prefer, we can take it through the OMAP > tree. > > arch/arm/mach-omap2/control.c | 7 ++-- > arch/arm/mach-omap2/control.h | 6 ++-- > arch/arm/mach-omap2/sleep34xx.S | 61 +++++++------------------------------- > 3 files changed, 19 insertions(+), 55 deletions(-) > > diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c > index da53ba3..aab884f 100644 > --- a/arch/arm/mach-omap2/control.c > +++ b/arch/arm/mach-omap2/control.c > @@ -286,14 +286,15 @@ void omap3_save_scratchpad_contents(void) > scratchpad_contents.boot_config_ptr = 0x0; > if (cpu_is_omap3630()) > 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 && > omap_rev() != OMAP3430_REV_ES3_1) > scratchpad_contents.public_restore_ptr = > - virt_to_phys(get_restore_pointer()); > + virt_to_phys(omap3_restore); > else > 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) > scratchpad_contents.secure_ram_restore_ptr = 0x0; > else > diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h > index a016c8b..d4ef75d 100644 > --- a/arch/arm/mach-omap2/control.h > +++ b/arch/arm/mach-omap2/control.h > @@ -386,9 +386,9 @@ extern void omap4_ctrl_pad_writel(u32 val, u16 offset); > > extern void omap3_save_scratchpad_contents(void); > extern void omap3_clear_scratchpad_contents(void); > -extern u32 *get_restore_pointer(void); > -extern u32 *get_es3_restore_pointer(void); > -extern u32 *get_omap3630_restore_pointer(void); > +extern void omap3_restore(void); > +extern void omap3_restore_es3(void); > +extern void omap3_restore_3630(void); > extern u32 omap3_arm_context[128]; > extern void omap3_control_save_context(void); > extern void omap3_control_restore_context(void); > diff --git a/arch/arm/mach-omap2/sleep34xx.S b/arch/arm/mach-omap2/sleep34xx.S > index 9a1349e..177f70f 100644 > --- a/arch/arm/mach-omap2/sleep34xx.S > +++ b/arch/arm/mach-omap2/sleep34xx.S > @@ -74,46 +74,6 @@ > * 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 > /* > * 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: common code for 3xxx > */ > -restore_es3: > +ENTRY(omap3_restore_es3) > ldr r5, pm_prepwstst_core_p > ldr r4, [r5] > and r4, r4, #0x3 > cmp r4, #0x0 @ Check if previous power state of CORE is OFF > - bne restore > + bne omap3_restore > adr r0, es3_sdrc_fix > ldr r1, sram_base > ldr r2, es3_sdrc_fix_sz > @@ -333,22 +293,24 @@ copy_to_sram: > bne copy_to_sram > ldr r1, sram_base > blx r1 > - b restore > - > -restore_3630: > + b omap3_restore > +ENDPROC(omap3_restore_es3) > + > +ENTRY(omap3_restore_3630) > ldr r1, pm_prepwstst_core_p > ldr r2, [r1] > and r2, r2, #0x3 > cmp r2, #0x0 @ Check if previous power state of CORE is OFF > - bne restore > + bne omap3_restore > /* Disable RTA before giving control */ > ldr r1, control_mem_rta > mov r2, #OMAP36XX_RTA_DISABLE > str r2, [r1] > - > +ENDPROC(omap3_restore_3630) > + > /* Fall through to common code for the remaining logic */ > > -restore: > +ENTRY(omap3_restore) > /* > * Read the pwstctrl register to check the reason for mpu reset. > * This tells us what was lost. > @@ -438,7 +400,8 @@ skipl2reen: > > /* Now branch to the common CPU resume function */ > b cpu_resume > - > +ENDPROC(omap3_restore) > + > .ltorg > > /* > -- > 1.7.4 > > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html