On Tue, 2014-01-14 at 15:59 +0800, Dongsheng Wang wrote:
> From: Wang Dongsheng <dongsheng.w...@freescale.com>
> 
> Use fsl_cpu_state_save/fsl_cpu_state_restore to save/restore registers.
> Use the functions to save/restore registers, so we don't need to
> maintain the code.
> 
> Signed-off-by: Wang Dongsheng <dongsheng.w...@freescale.com>

Is there any functional change with this patchset (e.g. suspend
supported on chips where it wasn't before), or is it just cleanup?  A
cover letter would be useful to describe the purpose of the overall
patchset when it isn't obvious.

> 
> diff --git a/arch/powerpc/kernel/swsusp_booke.S 
> b/arch/powerpc/kernel/swsusp_booke.S
> index 553c140..b5992db 100644
> --- a/arch/powerpc/kernel/swsusp_booke.S
> +++ b/arch/powerpc/kernel/swsusp_booke.S
> @@ -4,92 +4,28 @@
>   * Copyright (c) 2009-2010 MontaVista Software, LLC.
>   */
>  
> -#include <linux/threads.h>
> -#include <asm/processor.h>
>  #include <asm/page.h>
> -#include <asm/cputable.h>
> -#include <asm/thread_info.h>
>  #include <asm/ppc_asm.h>
>  #include <asm/asm-offsets.h>
>  #include <asm/mmu.h>
> -
> -/*
> - * Structure for storing CPU registers on the save area.
> - */
> -#define SL_SP                0
> -#define SL_PC                4
> -#define SL_MSR               8
> -#define SL_TCR               0xc
> -#define SL_SPRG0     0x10
> -#define SL_SPRG1     0x14
> -#define SL_SPRG2     0x18
> -#define SL_SPRG3     0x1c
> -#define SL_SPRG4     0x20
> -#define SL_SPRG5     0x24
> -#define SL_SPRG6     0x28
> -#define SL_SPRG7     0x2c
> -#define SL_TBU               0x30
> -#define SL_TBL               0x34
> -#define SL_R2                0x38
> -#define SL_CR                0x3c
> -#define SL_LR                0x40
> -#define SL_R12               0x44    /* r12 to r31 */
> -#define SL_SIZE              (SL_R12 + 80)
> -
> -     .section .data
> -     .align  5
> -
> -_GLOBAL(swsusp_save_area)
> -     .space  SL_SIZE
> -
> +#include <asm/fsl_sleep.h>
>  
>       .section .text
>       .align  5
>  
>  _GLOBAL(swsusp_arch_suspend)
> -     lis     r11,swsusp_save_area@h
> -     ori     r11,r11,swsusp_save_area@l
> -
> -     mflr    r0
> -     stw     r0,SL_LR(r11)
> -     mfcr    r0
> -     stw     r0,SL_CR(r11)
> -     stw     r1,SL_SP(r11)
> -     stw     r2,SL_R2(r11)
> -     stmw    r12,SL_R12(r11)
> -
> -     /* Save MSR & TCR */
> -     mfmsr   r4
> -     stw     r4,SL_MSR(r11)
> -     mfspr   r4,SPRN_TCR
> -     stw     r4,SL_TCR(r11)
> -
> -     /* Get a stable timebase and save it */
> -1:   mfspr   r4,SPRN_TBRU
> -     stw     r4,SL_TBU(r11)
> -     mfspr   r5,SPRN_TBRL
> -     stw     r5,SL_TBL(r11)
> -     mfspr   r3,SPRN_TBRU
> -     cmpw    r3,r4
> -     bne     1b
> +     mflr    r15
> +     lis     r3, core_registers_save_area@h
> +     ori     r3, r3, core_registers_save_area@l
> +
> +     /* Save base register */
> +     li      r4, 0
> +     bl      fsl_cpu_state_save
>  
> -     /* Save SPRGs */
> -     mfspr   r4,SPRN_SPRG0
> -     stw     r4,SL_SPRG0(r11)
> -     mfspr   r4,SPRN_SPRG1
> -     stw     r4,SL_SPRG1(r11)
> -     mfspr   r4,SPRN_SPRG2
> -     stw     r4,SL_SPRG2(r11)
> -     mfspr   r4,SPRN_SPRG3
> -     stw     r4,SL_SPRG3(r11)
> -     mfspr   r4,SPRN_SPRG4
> -     stw     r4,SL_SPRG4(r11)
> -     mfspr   r4,SPRN_SPRG5
> -     stw     r4,SL_SPRG5(r11)
> -     mfspr   r4,SPRN_SPRG6
> -     stw     r4,SL_SPRG6(r11)
> -     mfspr   r4,SPRN_SPRG7
> -     stw     r4,SL_SPRG7(r11)
> +     /* Save LR */
> +     lis     r3, core_registers_save_area@h
> +     ori     r3, r3, core_registers_save_area@l
> +     stw     r15, SR_LR(r3)
>  
>       /* Call the low level suspend stuff (we should probably have made
>        * a stackframe...
> @@ -97,11 +33,12 @@ _GLOBAL(swsusp_arch_suspend)
>       bl      swsusp_save
>  
>       /* Restore LR from the save area */
> -     lis     r11,swsusp_save_area@h
> -     ori     r11,r11,swsusp_save_area@l
> -     lwz     r0,SL_LR(r11)
> -     mtlr    r0
> +     lis     r3, core_registers_save_area@h
> +     ori     r3, r3, core_registers_save_area@l
> +     lwz     r15, SR_LR(r3)
> +     mtlr    r15
>  
> +     li      r3, 0
>       blr
>  
>  _GLOBAL(swsusp_arch_resume)
> @@ -138,9 +75,6 @@ _GLOBAL(swsusp_arch_resume)
>       bl flush_dcache_L1
>       bl flush_instruction_cache
>  
> -     lis     r11,swsusp_save_area@h
> -     ori     r11,r11,swsusp_save_area@l
> -
>       /*
>        * Mappings from virtual addresses to physical addresses may be
>        * different than they were prior to restoring hibernation state. 
> @@ -149,53 +83,12 @@ _GLOBAL(swsusp_arch_resume)
>        */
>       bl      _tlbil_all
>  
> -     lwz     r4,SL_SPRG0(r11)
> -     mtspr   SPRN_SPRG0,r4
> -     lwz     r4,SL_SPRG1(r11)
> -     mtspr   SPRN_SPRG1,r4
> -     lwz     r4,SL_SPRG2(r11)
> -     mtspr   SPRN_SPRG2,r4
> -     lwz     r4,SL_SPRG3(r11)
> -     mtspr   SPRN_SPRG3,r4
> -     lwz     r4,SL_SPRG4(r11)
> -     mtspr   SPRN_SPRG4,r4
> -     lwz     r4,SL_SPRG5(r11)
> -     mtspr   SPRN_SPRG5,r4
> -     lwz     r4,SL_SPRG6(r11)
> -     mtspr   SPRN_SPRG6,r4
> -     lwz     r4,SL_SPRG7(r11)
> -     mtspr   SPRN_SPRG7,r4
> -
> -     /* restore the MSR */
> -     lwz     r3,SL_MSR(r11)
> -     mtmsr   r3
> -
> -     /* Restore TB */
> -     li      r3,0
> -     mtspr   SPRN_TBWL,r3
> -     lwz     r3,SL_TBU(r11)
> -     lwz     r4,SL_TBL(r11)
> -     mtspr   SPRN_TBWU,r3
> -     mtspr   SPRN_TBWL,r4
> -
> -     /* Restore TCR and clear any pending bits in TSR. */
> -     lwz     r4,SL_TCR(r11)
> -     mtspr   SPRN_TCR,r4
> -     lis     r4, (TSR_ENW | TSR_WIS | TSR_DIS | TSR_FIS)@h
> -     mtspr   SPRN_TSR,r4
> -
> -     /* Kick decrementer */
> -     li      r0,1
> -     mtdec   r0
> -
> -     /* Restore the callee-saved registers and return */
> -     lwz     r0,SL_CR(r11)
> -     mtcr    r0
> -     lwz     r2,SL_R2(r11)
> -     lmw     r12,SL_R12(r11)
> -     lwz     r1,SL_SP(r11)
> -     lwz     r0,SL_LR(r11)
> -     mtlr    r0
> +     lis     r3, core_registers_save_area@h
> +     ori     r3, r3, core_registers_save_area@l
> +
> +     /* Restore base register */
> +     li      r4, 0
> +     bl      fsl_cpu_state_restore

Why are you calling anything with "fsl" in the name from code that is
supposed to be for all booke?

-Scott


_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to