public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Leif Lindholm" <quic_llindhol@quicinc.com>
To: Pierre Gondois <pierre.gondois@arm.com>
Cc: <devel@edk2.groups.io>, Jiewen Yao <jiewen.yao@intel.com>,
	Yi Li <yi1.li@intel.com>, Xiaoyu Lu <xiaoyu1.lu@intel.com>,
	Guomin Jiang <guomin.jiang@intel.com>,
	Ard Biesheuvel <ardb+tianocore@kernel.org>,
	Sami Mujawar <sami.mujawar@arm.com>,
	Gerd Hoffmann <kraxel@redhat.com>,
	Michael D Kinney <michael.d.kinney@intel.com>,
	Liming Gao <gaoliming@byosoft.com.cn>
Subject: Re: [edk2-devel] [PATCH v2 1/7] MdePkg/BaseLib: AARCH64: Add ArmReadCntPctReg()
Date: Thu, 9 Nov 2023 14:11:53 +0000	[thread overview]
Message-ID: <ZUzoqe/eMlUnsH++@qc-i7.hemma.eciton.net> (raw)
In-Reply-To: <20231109092307.1770332-2-pierre.gondois@arm.com>

On Thu, Nov 09, 2023 at 10:23:01 +0100, Pierre Gondois wrote:
> To enable AARCH64 native instruction support for Openssl,
> some interfaces must be implemented. OPENSSL_rdtsc() requests
> an access to a counter to get some non-trusted entropy.
> 
> Add ArmReadCntPctReg() to read system count.
> A similar ArmReadCntPct() function is available in the ArmPkg,
> but the CryptoPkg where OPENSSL_rdtsc will reside cannot rely
> on the ArmPkg.

This is patently untrue, as can be discovered by grepping for ArmPkg
under CryptoPkg already.

Yes, we have a problematic history around how architectures that
weren't already in tree when edk2 was first published got
introduced at a later date. But this bit of contortionism helps no one.
Please move this to ArmPkg, which is effectively an exclave of MdePkg
anyway.

(Yes, there is an argument for moving ArmLib into MdePkg, but that
quickly escalates through dependencies to moving all of ArmPkg into
MdePkg, and that's a fairly big task.)

/
    Leif

> Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
> ---
>  MdePkg/Include/Library/BaseLib.h              | 14 +++++++++
>  .../BaseLib/AArch64/ArmReadCntPctReg.S        | 30 +++++++++++++++++++
>  .../BaseLib/AArch64/ArmReadCntPctReg.asm      | 30 +++++++++++++++++++
>  MdePkg/Library/BaseLib/BaseLib.inf            |  4 ++-
>  4 files changed, 77 insertions(+), 1 deletion(-)
>  create mode 100644 MdePkg/Library/BaseLib/AArch64/ArmReadCntPctReg.S
>  create mode 100644 MdePkg/Library/BaseLib/AArch64/ArmReadCntPctReg.asm
> 
> diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/BaseLib.h
> index 5d7067ee854e..b81c9dd83508 100644
> --- a/MdePkg/Include/Library/BaseLib.h
> +++ b/MdePkg/Include/Library/BaseLib.h
> @@ -126,6 +126,20 @@ typedef struct {
>  
>  #define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT  8
>  
> +/**
> +  Reads the current value of CNTPCT_EL0 register.
> +
> +  Reads and returns the current value of CNTPCT_EL0.
> +  This function is only available on AARCH64.
> +
> +  @return The current value of CNTPCT_EL0
> +**/
> +UINT64
> +EFIAPI
> +ArmReadCntPctReg (
> +  VOID
> +  );
> +
>  #endif // defined (MDE_CPU_AARCH64)
>  
>  #if defined (MDE_CPU_RISCV64)
> diff --git a/MdePkg/Library/BaseLib/AArch64/ArmReadCntPctReg.S b/MdePkg/Library/BaseLib/AArch64/ArmReadCntPctReg.S
> new file mode 100644
> index 000000000000..d5f3a0082a99
> --- /dev/null
> +++ b/MdePkg/Library/BaseLib/AArch64/ArmReadCntPctReg.S
> @@ -0,0 +1,30 @@
> +#------------------------------------------------------------------------------
> +#
> +# ArmReadCntPctReg() for AArch64
> +#
> +# Copyright (c) 2023, Arm Limited. All rights reserved.<BR>
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +#------------------------------------------------------------------------------
> +
> +.text
> +.p2align 2
> +GCC_ASM_EXPORT(ArmReadCntPctReg)
> +
> +#/**
> +#  Reads the CNTPCT_EL0 Register.
> +#
> +#  @return The contents of the CNTPCT_EL0 register.
> +#
> +#**/
> +#UINT64
> +#EFIAPI
> +#ArmReadCntPctReg (
> +#  VOID
> +#  );
> +#
> +ASM_PFX(ArmReadCntPctReg):
> +  AARCH64_BTI(c)
> +  mrs   x0, cntpct_el0
> +  ret
> diff --git a/MdePkg/Library/BaseLib/AArch64/ArmReadCntPctReg.asm b/MdePkg/Library/BaseLib/AArch64/ArmReadCntPctReg.asm
> new file mode 100644
> index 000000000000..cfdfe4cea4eb
> --- /dev/null
> +++ b/MdePkg/Library/BaseLib/AArch64/ArmReadCntPctReg.asm
> @@ -0,0 +1,30 @@
> +;------------------------------------------------------------------------------
> +;
> +; ArmReadCntPctReg() for AArch64
> +;
> +; Copyright (c) 2023, Arm Limited. All rights reserved.<BR>
> +;
> +; SPDX-License-Identifier: BSD-2-Clause-Patent
> +;
> +;------------------------------------------------------------------------------
> +
> +  EXPORT ArmReadCntPctReg
> +  AREA BaseLib_LowLevel, CODE, READONLY
> +
> +;/**
> +;  Reads the CNTPCT_EL0 Register.
> +;
> +; @return The contents of the CNTPCT_EL0 register.
> +;
> +;**/
> +;UINT64
> +;EFIAPI
> +;ArmReadCntPctReg (
> +;  VOID
> +;  );
> +;
> +ArmReadCntPctReg
> +  mrs   x0, cntpct_el0
> +  ret
> +
> +  END
> diff --git a/MdePkg/Library/BaseLib/BaseLib.inf b/MdePkg/Library/BaseLib/BaseLib.inf
> index 03c7b02e828b..24e5e6c3ecb5 100644
> --- a/MdePkg/Library/BaseLib/BaseLib.inf
> +++ b/MdePkg/Library/BaseLib/BaseLib.inf
> @@ -3,7 +3,7 @@
>  #
>  #  Copyright (c) 2007 - 2021, Intel Corporation. All rights reserved.<BR>
>  #  Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> -#  Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>
> +#  Portions copyright (c) 2011 - 2023, Arm Limited. All rights reserved.<BR>
>  #  Copyright (c) 2020 - 2021, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
>  #
>  #  SPDX-License-Identifier: BSD-2-Clause-Patent
> @@ -376,6 +376,7 @@ [Sources.AARCH64]
>    AArch64/SetJumpLongJump.S         | GCC
>    AArch64/CpuBreakpoint.S           | GCC
>    AArch64/SpeculationBarrier.S      | GCC
> +  AArch64/ArmReadCntPctReg.S        | GCC
>  
>    AArch64/MemoryFence.asm           | MSFT
>    AArch64/SwitchStack.asm           | MSFT
> @@ -385,6 +386,7 @@ [Sources.AARCH64]
>    AArch64/SetJumpLongJump.asm       | MSFT
>    AArch64/CpuBreakpoint.asm         | MSFT
>    AArch64/SpeculationBarrier.asm    | MSFT
> +  AArch64/ArmReadCntPctReg.asm      | MSFT
>  
>  [Sources.RISCV64]
>    Math64.c
> -- 
> 2.25.1
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110983): https://edk2.groups.io/g/devel/message/110983
Mute This Topic: https://groups.io/mt/102482399/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



  reply	other threads:[~2023-11-09 14:12 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-09  9:23 [edk2-devel] [PATCH v2 0/7] CryptoPkg: Enable Openssl native instruction support for AARCH64 PierreGondois
2023-11-09  9:23 ` [edk2-devel] [PATCH v2 1/7] MdePkg/BaseLib: AARCH64: Add ArmReadCntPctReg() PierreGondois
2023-11-09 14:11   ` Leif Lindholm [this message]
2023-11-10  9:04     ` PierreGondois
2023-11-09  9:23 ` [edk2-devel] [PATCH v2 2/7] MdePkg/BaseLib: AARCH64: Add ArmReadIdAA64Isar0Reg() PierreGondois
2023-11-09 14:14   ` Leif Lindholm
2023-11-09  9:23 ` [edk2-devel] [PATCH v2 3/7] MdePkg/BaseRngLib: Prefer ArmReadIdAA64Isar0Reg() over ArmReadIdIsar0() PierreGondois
2023-11-09  9:23 ` [edk2-devel] [PATCH v2 4/7] CryptoPkg/OpensslLib: Add native instruction support for AARCH64 PierreGondois
2023-11-09  9:23 ` [edk2-devel] [PATCH v2 5/7] CryptoPkg/OpensslLib: Generate files for AARCH64 native support PierreGondois
2023-11-09  9:23 ` [edk2-devel] [PATCH v2 6/7] CryptoPkg/OpensslLib: Add AArch64Cap for arch specific hooks PierreGondois
2023-11-09  9:23 ` [edk2-devel] [PATCH v2 7/7] CryptoPkg: Enable Openssl Accel builds for AARCH64 PierreGondois

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZUzoqe/eMlUnsH++@qc-i7.hemma.eciton.net \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox