[PATCH] arm: socfpga: smc: Add function to get usercode

Tan, Ley Foon ley.foon.tan at intel.com
Thu Mar 25 07:48:21 CET 2021



> -----Original Message-----
> From: Lim, Elly Siew Chin <elly.siew.chin.lim at intel.com>
> Sent: Thursday, March 25, 2021 2:08 PM
> To: u-boot at lists.denx.de
> Cc: Marek Vasut <marex at denx.de>; Tan, Ley Foon
> <ley.foon.tan at intel.com>; See, Chin Liang <chin.liang.see at intel.com>;
> Simon Goldschmidt <simon.k.r.goldschmidt at gmail.com>; Chee, Tien Fong
> <tien.fong.chee at intel.com>; Westergreen, Dalon
> <dalon.westergreen at intel.com>; Simon Glass <sjg at chromium.org>; Gan,
> Yau Wai <yau.wai.gan at intel.com>; Lim, Elly Siew Chin
> <elly.siew.chin.lim at intel.com>
> Subject: [PATCH] arm: socfpga: smc: Add function to get usercode
> 
> Add function to send mailbox command via SMC to get usercode from SDM.
> 
> Signed-off-by: Siew Chin Lim <elly.siew.chin.lim at intel.com>
> ---
>  arch/arm/mach-socfpga/include/mach/smc_api.h |  1 +
>  arch/arm/mach-socfpga/smc_api.c              | 17 +++++++++++++++++
>  include/linux/intel-smc.h                    | 18 ++++++++++++++++++
>  3 files changed, 36 insertions(+)
> 
> diff --git a/arch/arm/mach-socfpga/include/mach/smc_api.h
> b/arch/arm/mach-socfpga/include/mach/smc_api.h
> index bbefdd8dd9..6b5b7eadc6 100644
> --- a/arch/arm/mach-socfpga/include/mach/smc_api.h
> +++ b/arch/arm/mach-socfpga/include/mach/smc_api.h
> @@ -9,5 +9,6 @@
>  int invoke_smc(u32 func_id, u64 *args, int arg_len, u64 *ret_arg, int ret_len);
> int smc_send_mailbox(u32 cmd, u32 len, u32 *arg, u8 urgent, u32
> *resp_buf_len,
>  		     u32 *resp_buf);
> +int smc_get_usercode(u32 *usercode);
> 
>  #endif /* _SMC_API_H_ */
> diff --git a/arch/arm/mach-socfpga/smc_api.c b/arch/arm/mach-
> socfpga/smc_api.c index 085daba162..8ffc7a472b 100644
> --- a/arch/arm/mach-socfpga/smc_api.c
> +++ b/arch/arm/mach-socfpga/smc_api.c
> @@ -54,3 +54,20 @@ int smc_send_mailbox(u32 cmd, u32 len, u32 *arg, u8
> urgent, u32 *resp_buf_len,
> 
>  	return (int)resp[0];
>  }
> +
> +int smc_get_usercode(u32 *usercode)
> +{
> +	int ret;
> +	u64 resp;
> +
> +	if (!usercode)
> +		return -EINVAL;
> +
> +	ret = invoke_smc(INTEL_SIP_SMC_GET_USERCODE, NULL, 0,
> +			 &resp, 1);
> +
> +	if (ret == INTEL_SIP_SMC_STATUS_OK)
> +		*usercode = (u32)resp;
> +
> +	return ret;
> +}
> diff --git a/include/linux/intel-smc.h b/include/linux/intel-smc.h index
> 68d62be417..a54eff43ad 100644
> --- a/include/linux/intel-smc.h
> +++ b/include/linux/intel-smc.h
> @@ -518,4 +518,22 @@
> INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_
> COMPLETED_WRITE)
>  #define INTEL_SIP_SMC_MBOX_SEND_CMD \
> 
> 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_MBOX_
> SEND_CMD)
> 
> +/*
> + * Request INTEL_SIP_SMC_GET_USERCODE
> + *
> + * Send mailbox command to get usercode from SDM
> + *
> + * Call register usage:
> + * a0 INTEL_SIP_SMC_GET_USERCODE
> + * a1-7 not used.
> + *
> + * Return status
> + * a0 INTEL_SIP_SMC_STATUS_OK or INTEL_SIP_SMC_STATUS_ERROR
> + * a1 User code
> + * a2-3 not used.
> + */
> +#define INTEL_SIP_SMC_FUNCID_GET_USERCODE	61
> +#define INTEL_SIP_SMC_GET_USERCODE \
> +
> 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_GET_US
> ERCODE)
> +
>  #endif
> --
> 2.13.0

Reviewed-by: Ley Foon Tan <ley.foon.tan at intel.com>



More information about the U-Boot mailing list