• Soby Mathew's avatar
    AArch32: Rework SMC context save and restore mechanism · b6285d64
    Soby Mathew authored
    
    
    The current SMC context data structure `smc_ctx_t` and related helpers are
    optimized for case when SMC call does not result in world switch. This was
    the case for SP_MIN and BL1 cold boot flow. But the firmware update usecase
    requires world switch as a result of SMC and the current SMC context helpers
    were not helping very much in this regard. Therefore this patch does the
    following changes to improve this:
    
    1. Add monitor stack pointer, `spmon` to `smc_ctx_t`
    
    The C Runtime stack pointer in monitor mode, `sp_mon` is added to the
    SMC context, and the `smc_ctx_t` pointer is cached in `sp_mon` prior
    to exit from Monitor mode. This makes is easier to retrieve the
    context when the next SMC call happens. As a result of this change,
    the SMC context helpers no longer depend on the stack to save and
    restore the register.
    
    This aligns it with the context save and restore mechanism in AArch64.
    
    2. Add SCR in `smc_ctx_t`
    
    Adding the SCR register to `smc_ctx_t` makes it easier to manage this
    register state when switching between non secure and secure world as a
    result of an SMC call.
    
    Change-Id: I5e12a7056107c1701b457b8f7363fdbf892230bf
    Signed-off-by: default avatarSoby Mathew <soby.mathew@arm.com>
    Signed-off-by: default avatardp-arm <dimitris.papastamos@arm.com>
    b6285d64
smcc_macros.S 2.48 KB