lkml.org 
[lkml]   [2021]   [Feb]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH v1 21/41] powerpc/32: Refactor booke critical registers saving
    Date
    Refactor booke critical registers saving into a few macros
    and move it into the exception prolog directly.

    Keep the dedicated transfert_to_handler entry point for the
    moment allthough they are empty. They will be removed in a
    later patch to reduce churn.

    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    ---
    arch/powerpc/kernel/entry_32.S | 33 -------------------------
    arch/powerpc/kernel/head_booke.h | 41 ++++++++++++++++++++++++++++++++
    2 files changed, 41 insertions(+), 33 deletions(-)

    diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
    index f244e7846031..dce0f03a0e88 100644
    --- a/arch/powerpc/kernel/entry_32.S
    +++ b/arch/powerpc/kernel/entry_32.S
    @@ -51,49 +51,16 @@
    #ifdef CONFIG_BOOKE
    .globl mcheck_transfer_to_handler
    mcheck_transfer_to_handler:
    - mfspr r0,SPRN_DSRR0
    - stw r0,_DSRR0(r11)
    - mfspr r0,SPRN_DSRR1
    - stw r0,_DSRR1(r11)
    /* fall through */
    _ASM_NOKPROBE_SYMBOL(mcheck_transfer_to_handler)

    .globl debug_transfer_to_handler
    debug_transfer_to_handler:
    - mfspr r0,SPRN_CSRR0
    - stw r0,_CSRR0(r11)
    - mfspr r0,SPRN_CSRR1
    - stw r0,_CSRR1(r11)
    /* fall through */
    _ASM_NOKPROBE_SYMBOL(debug_transfer_to_handler)

    .globl crit_transfer_to_handler
    crit_transfer_to_handler:
    -#ifdef CONFIG_PPC_BOOK3E_MMU
    - mfspr r0,SPRN_MAS0
    - stw r0,MAS0(r11)
    - mfspr r0,SPRN_MAS1
    - stw r0,MAS1(r11)
    - mfspr r0,SPRN_MAS2
    - stw r0,MAS2(r11)
    - mfspr r0,SPRN_MAS3
    - stw r0,MAS3(r11)
    - mfspr r0,SPRN_MAS6
    - stw r0,MAS6(r11)
    -#ifdef CONFIG_PHYS_64BIT
    - mfspr r0,SPRN_MAS7
    - stw r0,MAS7(r11)
    -#endif /* CONFIG_PHYS_64BIT */
    -#endif /* CONFIG_PPC_BOOK3E_MMU */
    -#ifdef CONFIG_44x
    - mfspr r0,SPRN_MMUCR
    - stw r0,MMUCR(r11)
    -#endif
    - mfspr r0,SPRN_SRR0
    - stw r0,_SRR0(r11)
    - mfspr r0,SPRN_SRR1
    - stw r0,_SRR1(r11)
    -
    /* fall through */
    _ASM_NOKPROBE_SYMBOL(crit_transfer_to_handler)
    #endif
    diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h
    index ff93ed519b3b..a57a312c7f86 100644
    --- a/arch/powerpc/kernel/head_booke.h
    +++ b/arch/powerpc/kernel/head_booke.h
    @@ -229,6 +229,36 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
    SAVE_4GPRS(3, r11); \
    SAVE_2GPRS(7, r11)

    +.macro SAVE_xSRR xSRR
    + mfspr r0,SPRN_\xSRR\()0
    + stw r0,_\xSRR\()0(r1)
    + mfspr r0,SPRN_\xSRR\()1
    + stw r0,_\xSRR\()1(r1)
    +.endm
    +
    +.macro SAVE_MMU_REGS
    +#ifdef CONFIG_PPC_BOOK3E_MMU
    + mfspr r0,SPRN_MAS0
    + stw r0,MAS0(r1)
    + mfspr r0,SPRN_MAS1
    + stw r0,MAS1(r1)
    + mfspr r0,SPRN_MAS2
    + stw r0,MAS2(r1)
    + mfspr r0,SPRN_MAS3
    + stw r0,MAS3(r1)
    + mfspr r0,SPRN_MAS6
    + stw r0,MAS6(r1)
    +#ifdef CONFIG_PHYS_64BIT
    + mfspr r0,SPRN_MAS7
    + stw r0,MAS7(r1)
    +#endif /* CONFIG_PHYS_64BIT */
    +#endif /* CONFIG_PPC_BOOK3E_MMU */
    +#ifdef CONFIG_44x
    + mfspr r0,SPRN_MMUCR
    + stw r0,MMUCR(r1)
    +#endif
    +.endm
    +
    #define CRITICAL_EXCEPTION_PROLOG(intno) \
    EXC_LEVEL_EXCEPTION_PROLOG(CRIT, intno, SPRN_CSRR0, SPRN_CSRR1)
    #define DEBUG_EXCEPTION_PROLOG \
    @@ -271,6 +301,8 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
    START_EXCEPTION(label); \
    CRITICAL_EXCEPTION_PROLOG(intno); \
    addi r3,r1,STACK_FRAME_OVERHEAD; \
    + SAVE_MMU_REGS; \
    + SAVE_xSRR SRR; \
    EXC_XFER_TEMPLATE(hdlr, n+2, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), \
    crit_transfer_to_handler, ret_from_crit_exc)

    @@ -280,6 +312,10 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
    mfspr r5,SPRN_ESR; \
    stw r5,_ESR(r11); \
    addi r3,r1,STACK_FRAME_OVERHEAD; \
    + SAVE_xSRR DSRR; \
    + SAVE_xSRR CSRR; \
    + SAVE_MMU_REGS; \
    + SAVE_xSRR SRR; \
    EXC_XFER_TEMPLATE(hdlr, n+4, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), \
    mcheck_transfer_to_handler, ret_from_mcheck_exc)

    @@ -363,6 +399,9 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
    2: mfspr r4,SPRN_DBSR; \
    stw r4,_ESR(r11); /* DebugException takes DBSR in _ESR */\
    addi r3,r1,STACK_FRAME_OVERHEAD; \
    + SAVE_xSRR CSRR; \
    + SAVE_MMU_REGS; \
    + SAVE_xSRR SRR; \
    EXC_XFER_TEMPLATE(DebugException, 0x2008, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), debug_transfer_to_handler, ret_from_debug_exc)

    #define DEBUG_CRIT_EXCEPTION \
    @@ -417,6 +456,8 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
    2: mfspr r4,SPRN_DBSR; \
    stw r4,_ESR(r11); /* DebugException takes DBSR in _ESR */\
    addi r3,r1,STACK_FRAME_OVERHEAD; \
    + SAVE_MMU_REGS; \
    + SAVE_xSRR SRR; \
    EXC_XFER_TEMPLATE(DebugException, 0x2002, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), crit_transfer_to_handler, ret_from_crit_exc)

    #define DATA_STORAGE_EXCEPTION \
    --
    2.25.0
    \
     
     \ /
      Last update: 2021-02-09 11:13    [W:4.107 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site