On 09.02.18 18:15, Julien Grall wrote:



On 02/09/2018 04:08 PM, Volodymyr Babchuk wrote:
Hi,

Hi Volodymyr,

Thank you for the review. I have noticed that your e-mail client seem to mess up with the e-mail sent sometimes (see below). You may want to configure it to avoid that.
Oops, sorry for this. Looks like I hit CTRL+R in Thunderbird accidentally.

On 08.02.18 21:21, Julien Grall wrote:
The new SMC Calling Convention (v1.1) allows for a reduced overhead
when calling into the firmware, and provides a new feature discovery mechanism. See "Firmware interfaces for mitigating CVE-2017-5715" ARM
DEN 00070A.

Signed-off-by: Julien Grall <julien.gr...@arm.com>
Reviewed-by: Volodymyr Babchuk <volodymyr_babc...@epam.com>

--- Changes in v2: - Add a humand readable name for the
specification --- xen/arch/arm/vpsci.c        |  1 + xen/arch/arm/vsmc.c         | 23 +++++++++++++++++++++++ xen/include/asm-arm/smccc.h | 15 +++++++++++++++ 3 files changed, 39
insertions(+)

diff --git a/xen/arch/arm/vpsci.c b/xen/arch/arm/vpsci.c index
e82b62db1a..19ee7caeb4 100644 --- a/xen/arch/arm/vpsci.c +++
b/xen/arch/arm/vpsci.c @@ -212,6 +212,7 @@ static int32_t
do_psci_1_0_features(uint32_t psci_func_id) case
PSCI_0_2_FN32_SYSTEM_OFF: case PSCI_0_2_FN32_SYSTEM_RESET: case
PSCI_1_0_FN32_PSCI_FEATURES: +    case ARM_SMCCC_VERSION_FID: return
0; default: return PSCI_NOT_SUPPORTED; diff --git
a/xen/arch/arm/vsmc.c b/xen/arch/arm/vsmc.c index
3d3bd95fee..a708aa5e81 100644 --- a/xen/arch/arm/vsmc.c +++
b/xen/arch/arm/vsmc.c @@ -81,6 +81,26 @@ static bool
fill_function_call_count(struct cpu_user_regs *regs, uint32_t cnt) return true; }

+/* SMCCC interface for ARM Architecture */ +static bool
handle_arch(struct cpu_user_regs *regs) +{ +    uint32_t fid =
(uint32_t)get_user_reg(regs, 0); + +    switch ( fid ) +    { +
case ARM_SMCCC_VERSION_FID: +        set_user_reg(regs, 0,
ARM_SMCCC_VERSION_1_1); +        return true; + +    case
ARM_SMCCC_ARCH_FEATURES_FID: +        /* Nothing supported yet */ +
set_user_reg(regs, 0, -1); +        return true; +    } + +    return
false; +} + /* SMCCC interface for hypervisor. Tell about itself. */ static bool handle_hypervisor(struct cpu_user_regs *regs) { @@ -188,6 +208,9 @@ static bool vsmccc_handle_call(struct cpu_user_regs *regs) { switch ( smccc_get_owner(funcid) ) { +        case
ARM_SMCCC_OWNER_ARCH: +            handled = handle_arch(regs); +
break; case ARM_SMCCC_OWNER_HYPERVISOR: handled =
handle_hypervisor(regs); break; diff --git
a/xen/include/asm-arm/smccc.h b/xen/include/asm-arm/smccc.h index
62b3a8cdf5..431389c118 100644 --- a/xen/include/asm-arm/smccc.h +++
b/xen/include/asm-arm/smccc.h @@ -16,6 +16,9 @@ #ifndef
__ASM_ARM_SMCCC_H__ #define __ASM_ARM_SMCCC_H__

+#define ARM_SMCCC_VERSION_1_0   0x10000 +#define
ARM_SMCCC_VERSION_1_1   0x10001 + /* * This file provides common
defines for ARM SMC Calling Convention as * specified in @@ -100,6
+103,18 @@ static inline uint32_t smccc_get_owner(register_t funcid) ARM_SMCCC_OWNER_##owner,     \ 0xFF03)

+#define ARM_SMCCC_VERSION_FID                       \ +
ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,         \ +
ARM_SMCCC_CONV_32,           \ +
ARM_SMCCC_OWNER_ARCH,        \ +                       0x0)
\ + +#define ARM_SMCCC_ARCH_FEATURES_FID                 \ +
ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,         \ +
ARM_SMCCC_CONV_32,           \ +
ARM_SMCCC_OWNER_ARCH,        \ +                       0x1) + /* Only
one error code defined in SMCCC */ #define
ARM_SMCCC_ERR_UNKNOWN_FUNCTION  (-1)





--
Volodymyr Babchuk

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to