Re: [Xen-devel] [PATCH v2 03/15] xen/arm: vsmc: Implement SMCCC 1.1

2018-02-09 Thread Volodymyr Babchuk


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 

Reviewed-by: Volodymyr Babchuk 


--- 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   0x1 +#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

Re: [Xen-devel] [PATCH v2 03/15] xen/arm: vsmc: Implement SMCCC 1.1

2018-02-09 Thread Julien Grall



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.


Cheers,


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 

Reviewed-by: Volodymyr Babchuk 


--- 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   0x1 +#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)






--
Julien Grall

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

Re: [Xen-devel] [PATCH v2 03/15] xen/arm: vsmc: Implement SMCCC 1.1

2018-02-09 Thread Volodymyr Babchuk

Hi,

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 

Reviewed-by: Volodymyr Babchuk 


--- 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   0x1 +#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