[PATCH] OMAP3: PM: remove get_*_restore_pointer functions, directly use entry points

Jean Pihet jean.pihet at newoldbits.com
Fri Jun 24 04:24:29 EDT 2011


Kevin,

On Fri, Jun 24, 2011 at 2:16 AM, Kevin Hilman <khilman at ti.com> 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 at arm.linux.org.uk>
> Cc: Jean Pihet <jean.pihet at newoldbits.com>
> Signed-off-by: Kevin Hilman <khilman at ti.com>

This makes sense. FWIW:
Acked-by: Jean Pihet <j-pihet at ti.com

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
>
>



More information about the linux-arm-kernel mailing list