public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Leif Lindholm" <leif@nuviainc.com>
To: Rebecca Cran <rebecca@nuviainc.com>
Cc: devel@edk2.groups.io, Ard Biesheuvel <ard.biesheuvel@arm.com>,
	Laszlo Ersek <lersek@redhat.com>
Subject: Re: [PATCH v4 04/10] ArmPkg: Add helper to read the Memory Model Features Register 2
Date: Tue, 15 Dec 2020 19:11:14 +0000	[thread overview]
Message-ID: <20201215191114.GD1664@vanye> (raw)
In-Reply-To: <20201207175427.28712-5-rebecca@nuviainc.com>

+Laszlo

Ard, I could use your input on the below, and Laszlo might also have
an opinion:

On Mon, Dec 07, 2020 at 10:54:21 -0700, Rebecca Cran wrote:
> Add helper function to read the MMFR2 register. We will need this to
> determine CCIDX support.
> 
> Signed-off-by: Rebecca Cran <rebecca@nuviainc.com>
> ---
>  ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h     | 6 ++++++
>  ArmPkg/Library/ArmLib/AArch64/AArch64Support.S | 3 +++
>  2 files changed, 9 insertions(+)
> 
> diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h b/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h
> index b2c8a8ea0b84..d6bcfc3b82ae 100644
> --- a/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h
> +++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h
> @@ -35,5 +35,11 @@ ArmCleanInvalidateDataCacheEntryBySetWay (
>    IN  UINTN   SetWayFormat
>    );
>  
> +UINTN
> +EFIAPI
> +ArmReadIdMmfr2 (
> +  VOID
> +  );
> +

First of all, I think this prototype belongs in
Include/Library/ArmLib.h ... but!

So, there are a lot of system registers, many of which share at least
the view of the bottom 32 bits between aarch64/aarch32 versions.

This isn't true for the ID registers - which are always 64-bit for
aarch64 state, and always 32-bit for aarch32, where aarch64 have
access to both.

So this helper function isn't generic - in this particular case, we're
adding this accessor because we want to determine CCIDX support.
For aarch64 this means ID_AA64MMFR2_EL1, but for aarch32 this means
ID_MMFR4 (also accessible from aarch64 as ID_MMFR4_EL1).

We already have ArmReadIdPfr0 and ArmReadIdPfr1 in ArmLib.h, already
being made use of, helping to demonstrate the problem:

ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c:  if (ArmReadIdPfr0 () & AARCH64_PFR0_GIC) {
ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c:  if (ArmReadIdPfr1 () & ARM_PFR1_GIC) {

I would propose that since the high-level abstraction serve only to
confuse things, we change existing (and new) accessors to ID registers
to be explicit:

- ArmReadIdAArch64Mmfr0
- ArmReadIdAArch64Pfr0
- ArmReadIdAArch64Pfr1

The question is whether we should make the AArch32 aspect explicit or
implicit? My instinctive reaction is the latter. This matches the
native naming scheme used in the ARM ARM, and we don't support mixing
instruction set widths in UEFI.

The AArch64 prototypes should then only be made available to AARCH64
code, and the AArch32 ones only to ARM.

Does the above makes sense to everyone?

Best Regards,

Leif

>  #endif // __AARCH64_LIB_H__
>  
> diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S b/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
> index 199374ff59e3..874bc2866ac3 100644
> --- a/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
> +++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
> @@ -424,6 +424,9 @@ ASM_FUNC(ArmCallWFI)
>    wfi
>    ret
>  
> +ASM_FUNC(ArmReadIdMmfr2)
> +  mrs   x0, ID_AA64MMFR2_EL1           // read EL1 MMFR2
> +  ret
>  
>  ASM_FUNC(ArmReadMpidr)
>    mrs   x0, mpidr_el1           // read EL1 MPIDR
> -- 
> 2.26.2
> 

  reply	other threads:[~2020-12-15 19:11 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-07 17:54 [PATCH v4 00/10] ArmPkg,MdePkg: Add Universal/Smbios, and related changes Rebecca Cran
2020-12-07 17:54 ` [PATCH v4 01/10] ArmPkg: Add ARM SMC Architecture functions to ArmStdSmc.h Rebecca Cran
2020-12-15 18:06   ` Leif Lindholm
2020-12-16 11:23   ` [edk2-devel] " Sami Mujawar
2020-12-07 17:54 ` [PATCH v4 02/10] MdePkg: Update IndustryStandard/SmBios.h with processor status data Rebecca Cran
2020-12-08  4:50   ` 回复: " gaoliming
2020-12-07 17:54 ` [PATCH v4 03/10] ArmPkg: Add register encoding definition for MMFR2 Rebecca Cran
2020-12-15 18:42   ` Leif Lindholm
2020-12-16 11:31   ` [edk2-devel] " Sami Mujawar
2020-12-07 17:54 ` [PATCH v4 04/10] ArmPkg: Add helper to read the Memory Model Features Register 2 Rebecca Cran
2020-12-15 19:11   ` Leif Lindholm [this message]
2020-12-16 11:06     ` [edk2-devel] " Sami Mujawar
2020-12-17 13:38     ` Laszlo Ersek
2020-12-17 13:47       ` Ard Biesheuvel
2020-12-17 18:04         ` Leif Lindholm
2020-12-17 18:19           ` Rebecca Cran
2020-12-17 17:57       ` Leif Lindholm
2020-12-07 17:54 ` [PATCH v4 05/10] ArmPkg: Add helper function to read the Memory Model Feature Register 4 Rebecca Cran
2020-12-16 11:23   ` [edk2-devel] " Sami Mujawar
2020-12-07 17:54 ` [PATCH v4 06/10] ArmPkg: Add helper to read CCIDX status Rebecca Cran
2020-12-16 11:23   ` [edk2-devel] " Sami Mujawar
2020-12-07 17:54 ` [PATCH v4 07/10] ArmPkg: Fix the return type of the ReadCCSIDR function Rebecca Cran
2020-12-15 19:24   ` Leif Lindholm
2020-12-16 11:31   ` [edk2-devel] " Sami Mujawar
2020-12-07 17:54 ` [PATCH v4 08/10] ArmPkg: Update ArmLibPrivate.h with cache register definitions Rebecca Cran
2020-12-15 19:27   ` Leif Lindholm
2020-12-07 17:54 ` [PATCH v4 09/10] ArmPkg: Add definition of the maximum cache level in ARMv8-A Rebecca Cran
2020-12-15 19:27   ` Leif Lindholm
2020-12-16 11:31   ` [edk2-devel] " Sami Mujawar
2020-12-07 17:54 ` [PATCH v4 10/10] ArmPkg: Add Universal/Smbios, a generic SMBIOS library for ARM Rebecca Cran
2020-12-15 19:29   ` Leif Lindholm
2020-12-15 21:14     ` Rebecca Cran
2020-12-16 15:13   ` [edk2-devel] " Sami Mujawar
2020-12-16 15:21     ` Rebecca Cran
2020-12-19  3:14     ` Rebecca Cran
     [not found]   ` <16513B32D4BA613C.12945@groups.io>
2020-12-29 15:10     ` Sami Mujawar
2021-01-03 23:52       ` Rebecca Cran
2021-01-04 10:21         ` Sami Mujawar
2020-12-14 15:45 ` [PATCH v4 00/10] ArmPkg,MdePkg: Add Universal/Smbios, and related changes Rebecca Cran
2020-12-15 18:36 ` Leif Lindholm

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=20201215191114.GD1664@vanye \
    --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