mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-17 10:04:26 +00:00
Merge "feat: pass SMCCCv1.3 SVE hint bit to dispatchers" into integration
This commit is contained in:
commit
78e7b2b4c1
3 changed files with 28 additions and 4 deletions
|
@ -512,7 +512,7 @@ smc_handler64:
|
|||
|
||||
/*
|
||||
* Shift copied SCR_EL3.NSE bit by 5 to create space for
|
||||
* SCR_EL3.NS bit. Bit 5 of the flag correspondes to
|
||||
* SCR_EL3.NS bit. Bit 5 of the flag corresponds to
|
||||
* the SCR_EL3.NSE bit.
|
||||
*/
|
||||
lsl x7, x7, #5
|
||||
|
@ -521,6 +521,16 @@ smc_handler64:
|
|||
/* Copy SCR_EL3.NS bit to the flag to indicate caller's security */
|
||||
bfi x7, x18, #0, #1
|
||||
|
||||
/*
|
||||
* Per SMCCCv1.3 a caller can set the SVE hint bit in the SMC FID
|
||||
* passed through x0. Copy the SVE hint bit to flags and mask the
|
||||
* bit in smc_fid passed to the standard service dispatcher.
|
||||
* A service/dispatcher can retrieve the SVE hint bit state from
|
||||
* flags using the appropriate helper.
|
||||
*/
|
||||
bfi x7, x0, #FUNCID_SVE_HINT_SHIFT, #FUNCID_SVE_HINT_MASK
|
||||
bic x0, x0, #(FUNCID_SVE_HINT_MASK << FUNCID_SVE_HINT_SHIFT)
|
||||
|
||||
mov sp, x12
|
||||
|
||||
/* Get the unique owning entity number */
|
||||
|
|
|
@ -990,9 +990,10 @@ The service's ``handle()`` callback is provided with five of the SMC parameters
|
|||
directly, the others are saved into memory for retrieval (if needed) by the
|
||||
handler. The handler is also provided with an opaque ``handle`` for use with the
|
||||
supporting library for parameter retrieval, setting return values and context
|
||||
manipulation; and with ``flags`` indicating the security state of the caller. The
|
||||
framework finally sets up the execution stack for the handler, and invokes the
|
||||
services ``handle()`` function.
|
||||
manipulation. The ``flags`` parameter indicates the security state of the caller
|
||||
and the state of the SVE hint bit per the SMCCCv1.3. The framework finally sets
|
||||
up the execution stack for the handler, and invokes the services ``handle()``
|
||||
function.
|
||||
|
||||
On return from the handler the result registers are populated in X0-X7 as needed
|
||||
before restoring the stack and CPU state and returning from the original SMC.
|
||||
|
|
|
@ -37,6 +37,10 @@
|
|||
#define FUNCID_OEN_MASK U(0x3f)
|
||||
#define FUNCID_OEN_WIDTH U(6)
|
||||
|
||||
#define FUNCID_SVE_HINT_SHIFT U(16)
|
||||
#define FUNCID_SVE_HINT_MASK U(1)
|
||||
#define FUNCID_SVE_HINT_WIDTH U(1)
|
||||
|
||||
#define FUNCID_NUM_SHIFT U(0)
|
||||
#define FUNCID_NUM_MASK U(0xffff)
|
||||
#define FUNCID_NUM_WIDTH U(16)
|
||||
|
@ -122,6 +126,12 @@
|
|||
* 0 0 SMC_FROM_SECURE
|
||||
* 0 1 SMC_FROM_NON_SECURE
|
||||
* 1 1 SMC_FROM_REALM
|
||||
*
|
||||
* Bit 16 of flags records the caller's SMC
|
||||
* SVE hint bit according to SMCCCv1.3.
|
||||
* It can be consumed by dispatchers using
|
||||
* is_sve_hint_set macro.
|
||||
*
|
||||
*/
|
||||
|
||||
#define SMC_FROM_SECURE (U(0) << 0)
|
||||
|
@ -148,6 +158,9 @@
|
|||
#define is_caller_secure(_f) (!is_caller_non_secure(_f))
|
||||
#endif /* ENABLE_RME */
|
||||
|
||||
#define is_sve_hint_set(_f) (((_f) & (FUNCID_SVE_HINT_MASK \
|
||||
<< FUNCID_SVE_HINT_SHIFT)) != U(0))
|
||||
|
||||
/* The macro below is used to identify a Standard Service SMC call */
|
||||
#define is_std_svc_call(_fid) (GET_SMC_OEN(_fid) == OEN_STD_START)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue