[edk2-devel] [PATCH v7 08/19] ArmPkg: Add FID definitions for Firmware TRNG
Leif Lindholm
quic_llindhol at quicinc.com
Wed Oct 5 11:39:54 UTC 2022
On Mon, Oct 03, 2022 at 09:34:52 +0200, Pierre.Gondois at arm.com wrote:
> From: Sami Mujawar <sami.mujawar at arm.com>
>
> Bugzilla: 3668 (https://bugzilla.tianocore.org/show_bug.cgi?id=3668)
>
> The Arm True Random Number Generator Firmware, Interface 1.0,
> Platform Design Document
> (https://developer.arm.com/documentation/den0098/latest/)
> defines an interface between an Operating System (OS) executing
> at EL1 and Firmware (FW) exposing a conditioned entropy source
> that is provided by a TRNG back end.
>
> New function IDs have been defined by the specification for
> accessing the TRNG services. Therefore, add these definitions
> to the Arm standard SMC header.
>
> Signed-off-by: Pierre Gondois <pierre.gondois at arm.com>
> ---
> ArmPkg/Include/IndustryStandard/ArmStdSmc.h | 109 +++++++++++++++++++-
> 1 file changed, 107 insertions(+), 2 deletions(-)
>
> diff --git a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
> index 78ce77cd734d..fa977a03a7ab 100644
> --- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
> +++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
> @@ -1,13 +1,20 @@
> /** @file
> *
> * Copyright (c) 2020, NUVIA Inc. All rights reserved.<BR>
> -* Copyright (c) 2012-2017, ARM Limited. All rights reserved.
> +* Copyright (c) 2012 - 2022, Arm Limited. All rights reserved.
> *
> * SPDX-License-Identifier: BSD-2-Clause-Patent
> *
> * @par Revision Reference:
> -* - SMC Calling Convention version 1.2
> +* - [1] SMC Calling Convention version 1.2
> * (https://developer.arm.com/documentation/den0028/c/?lang=en)
> +* - [2] Arm True Random Number Generator Firmware, Interface 1.0,
> +* Platform Design Document.
> +* (https://developer.arm.com/documentation/den0098/latest/)
> +*
> +* @par Glossary:
> +* - TRNG - True Random Number Generator
> +*
> **/
>
> #ifndef ARM_STD_SMC_H_
> @@ -139,4 +146,102 @@
> /* 0xbf00ff02 is reserved */
> #define ARM_SMC_ID_TOS_REVISION 0xbf00ff03
>
> +// Firmware TRNG interface Function IDs
> +
> +/*
> + SMC/HVC call to get the version of the TRNG backend,
> + Cf. [2], 2.1 TRNG_VERSION
> + Input values:
> + W0 0x8400_0050
> + W1-W7 Reserved (MBZ)
> + Return values:
> + Success (W0 > 0) W0[31] MBZ
> + W0[30:16] Major revision
> + W0[15:0] Minor revision
> + W1 - W3 Reserved (MBZ)
> + Error (W0 < 0)
> + NOT_SUPPORTED Function not implemented
> +*/
> +#define FID_TRNG_VERSION 0x84000050
Hmm, I think, given this is ArmStdSmc.h, we ideally want ARM_SMC_ID_
prefixes on these, just like on the PSCI ones.
/
Leif
> +
> +/*
> + SMC/HVC call to check if a TRNG function ID is implemented by the backend,
> + Cf. [2], Section 2.2 TRNG_FEATURES
> + Input Values
> + W0 0x8400_0051
> + W1 trng_func_id
> + W2-W7 Reserved (MBZ)
> + Return values:
> + Success (W0 >= 0):
> + SUCCESS Function is implemented.
> + > 0 Function is implemented and
> + has specific capabilities,
> + see function definition.
> + Error (W0 < 0)
> + NOT_SUPPORTED Function with FID=trng_func_id
> + is not implemented
> +*/
> +#define FID_TRNG_FEATURES 0x84000051
> +
> +/*
> + SMC/HVC call to get the UUID of the TRNG backend,
> + Cf. [2], Section 2.3 TRNG_GET_UUID
> + Input Values:
> + W0 0x8400_0052
> + W1-W7 Reserved (MBZ)
> + Return Values:
> + Success (W0 != -1)
> + W0 UUID[31:0]
> + W1 UUID[63:32]
> + W2 UUID[95:64]
> + W3 UUID[127:96]
> + Error (W0 = -1)
> + W0 NOT_SUPPORTED
> +*/
> +#define FID_TRNG_GET_UUID 0x84000052
> +
> +/*
> + AARCH32 SMC/HVC call to get entropy bits, Cf. [2], Section 2.4 TRNG_RND.
> + Input values:
> + W0 0x8400_0053
> + W2-W7 Reserved (MBZ)
> + Return values:
> + Success (W0 = 0):
> + W0 MBZ
> + W1 Entropy[95:64]
> + W2 Entropy[63:32]
> + W3 Entropy[31:0]
> + Error (W0 < 0)
> + W0 NOT_SUPPORTED
> + NO_ENTROPY
> + INVALID_PARAMETERS
> + W1 - W3 Reserved (MBZ)
> +*/
> +#define FID_TRNG_RND_AARCH32 0x84000053
> +
> +/*
> + AARCH64 SMC/HVC call to get entropy bits, Cf. [2], Section 2.4 TRNG_RND.
> + Input values:
> + X0 0xC400_0053
> + X2-X7 Reserved (MBZ)
> + Return values:
> + Success (X0 = 0):
> + X0 MBZ
> + X1 Entropy[191:128]
> + X2 Entropy[127:64]
> + X3 Entropy[63:0]
> + Error (X0 < 0)
> + X0 NOT_SUPPORTED
> + NO_ENTROPY
> + INVALID_PARAMETERS
> + X1 - X3 Reserved (MBZ)
> +*/
> +#define FID_TRNG_RND_AARCH64 0xC4000053
> +
> +// Firmware TRNG status codes
> +#define TRNG_STATUS_SUCCESS (INT32)(0)
> +#define TRNG_STATUS_NOT_SUPPORTED (INT32)(-1)
> +#define TRNG_STATUS_INVALID_PARAMETER (INT32)(-2)
> +#define TRNG_STATUS_NO_ENTROPY (INT32)(-3)
> +
> #endif // ARM_STD_SMC_H_
> --
> 2.25.1
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#94751): https://edk2.groups.io/g/devel/message/94751
Mute This Topic: https://groups.io/mt/94085852/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list