From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.12575.1656515101897231123 for ; Wed, 29 Jun 2022 08:05:02 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: pierre.gondois@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BBE951764; Wed, 29 Jun 2022 08:05:01 -0700 (PDT) Received: from pierre123.arm.com (unknown [10.57.42.208]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 726FF3F792; Wed, 29 Jun 2022 08:04:59 -0700 (PDT) From: "PierreGondois" To: devel@edk2.groups.io Cc: Sami Mujawar , Leif Lindholm , Ard Biesheuvel , Rebecca Cran , Michael D Kinney , Liming Gao , Jiewen Yao , Jian J Wang Subject: [PATCH v3 20/21] SecurityPkg/RngDxe: Add Arm support of RngDxe Date: Wed, 29 Jun 2022 17:02:37 +0200 Message-Id: <20220629150241.2597898-29-Pierre.Gondois@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220629150241.2597898-1-Pierre.Gondois@arm.com> References: <20220629150241.2597898-1-Pierre.Gondois@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Pierre Gondois Bugzilla: 3668 (https://bugzilla.tianocore.org/show_bug.cgi?id=3D3668) Add RngDxe support for Arm. This implementation uses the TrngLib to support the RawAlgorithm and doens't support the RNDR instruction. Signed-off-by: Pierre Gondois --- SecurityPkg/RandomNumberGenerator/RngDxe/ArmRngDxe.c | 8 ++++++-- SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.inf | 9 ++++++--- SecurityPkg/SecurityPkg.dsc | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/SecurityPkg/RandomNumberGenerator/RngDxe/ArmRngDxe.c b/Secur= ityPkg/RandomNumberGenerator/RngDxe/ArmRngDxe.c index ffa32a29dc6a..4775252d30b6 100644 --- a/SecurityPkg/RandomNumberGenerator/RngDxe/ArmRngDxe.c +++ b/SecurityPkg/RandomNumberGenerator/RngDxe/ArmRngDxe.c @@ -22,6 +22,7 @@ =20 **/ =20 +#include #include #include #include @@ -55,8 +56,9 @@ RngInitAvailableAlgoArray ( UINT16 MajorRevision; UINT16 MinorRevision; =20 - // Check RngGetBytes() before advertising PcdCpuRngSupportedAlgorithm. - if (!EFI_ERROR (RngGetBytes (sizeof (Rand), (UINT8 *)&Rand))) { + #ifdef MDE_CPU_AARCH64 + // Check FEAT_RNG before advertising PcdCpuRngSupportedAlgorithm. + if (ArmHasRngExt ()) { CopyMem ( &mAvailableAlgoArray[mAvailableAlgoArrayCount], PcdGetPtr (PcdCpuRngSupportedAlgorithm), @@ -75,6 +77,8 @@ RngInitAvailableAlgoArray ( DEBUG_CODE_END (); } =20 + #endif + // Raw algorithm (Trng) if (!EFI_ERROR (GetTrngVersion (&MajorRevision, &MinorRevision))) { CopyMem ( diff --git a/SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.inf b/Securi= tyPkg/RandomNumberGenerator/RngDxe/RngDxe.inf index d2d0ff9ebb98..599a3085102d 100644 --- a/SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.inf +++ b/SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.inf @@ -27,7 +27,7 @@ [Defines] # # The following information is for reference only and not required by th= e build tools. # -# VALID_ARCHITECTURES =3D IA32 X64 AARCH64 +# VALID_ARCHITECTURES =3D IA32 X64 AARCH64 ARM # =20 [Sources.common] @@ -40,7 +40,7 @@ [Sources.IA32, Sources.X64] Rand/AesCore.c Rand/AesCore.h =20 -[Sources.AARCH64] +[Sources.AARCH64, Sources.ARM] ArmRngDxe.c ArmTrng.c =20 @@ -49,6 +49,9 @@ [Packages] MdePkg/MdePkg.dec SecurityPkg/SecurityPkg.dec =20 +[Packages.AARCH64, Packages.ARM] + ArmPkg/ArmPkg.dec + [LibraryClasses] UefiLib UefiBootServicesTableLib @@ -58,7 +61,7 @@ [LibraryClasses] TimerLib RngLib =20 -[LibraryClasses.AARCH64] +[LibraryClasses.AARCH64, LibraryClasses.ARM] TrngLib =20 [Guids] diff --git a/SecurityPkg/SecurityPkg.dsc b/SecurityPkg/SecurityPkg.dsc index 490076542a33..882d639489ea 100644 --- a/SecurityPkg/SecurityPkg.dsc +++ b/SecurityPkg/SecurityPkg.dsc @@ -292,7 +292,7 @@ [Components.IA32, Components.X64, Components.ARM, Com= ponents.AARCH64] SecurityPkg/EnrollFromDefaultKeysApp/EnrollFromDefaultKeysApp.inf SecurityPkg/VariableAuthenticated/SecureBootDefaultKeysDxe/SecureBootD= efaultKeysDxe.inf =20 -[Components.IA32, Components.X64, Components.AARCH64] +[Components.IA32, Components.X64, Components.AARCH64, Components.ARM] # # Random Number Generator # --=20 2.25.1