public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-devel] [PATCH 0/2] ArmPkg/ArmLib: add functions to read system registers
@ 2024-02-23 10:56 Marcin Juszkiewicz
  2024-02-23 10:56 ` [edk2-devel] [PATCH v2 1/2] ArmPkg/ArmLib: Add functions to read SVE/SME " Marcin Juszkiewicz
  2024-02-23 10:56 ` [edk2-devel] [PATCH v2 2/2] ArmPkg/ArmLib: Add functions to read future " Marcin Juszkiewicz
  0 siblings, 2 replies; 3+ messages in thread
From: Marcin Juszkiewicz @ 2024-02-23 10:56 UTC (permalink / raw)
  To: devel; +Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Marcin Juszkiewicz

My ArmCpuInfo tool reads system registers to check which features are
supported by AArch64 cores in host system.

I am updating it for 2023-12 update of "Arm A-profile Architecture
Registers" document [1] and had to add reading of several new system
registers.

1. https://developer.arm.com/documentation/ddi0601/2023-12/

While I can keep them in my application, they may be useful for someone
else too.

ArmLib build requirements need bump to 'armv8-a+sme' to get access to
SVE/SME related system registers.

Marcin Juszkiewicz (2):
  ArmPkg/ArmLib: Add functions to read SVE/SME system registers
  ArmPkg/ArmLib: Add functions to read future system registers

 ArmPkg/Library/ArmLib/ArmBaseLib.inf          |  4 ++
 ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h    | 46 +++++++++++++++++--
 .../Library/ArmLib/AArch64/AArch64Support.S   | 42 +++++++++++++++++
 3 files changed, 88 insertions(+), 4 deletions(-)

--
2.43.2



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



^ permalink raw reply	[flat|nested] 3+ messages in thread

* [edk2-devel] [PATCH v2 1/2] ArmPkg/ArmLib: Add functions to read SVE/SME system registers
  2024-02-23 10:56 [edk2-devel] [PATCH 0/2] ArmPkg/ArmLib: add functions to read system registers Marcin Juszkiewicz
@ 2024-02-23 10:56 ` Marcin Juszkiewicz
  2024-02-23 10:56 ` [edk2-devel] [PATCH v2 2/2] ArmPkg/ArmLib: Add functions to read future " Marcin Juszkiewicz
  1 sibling, 0 replies; 3+ messages in thread
From: Marcin Juszkiewicz @ 2024-02-23 10:56 UTC (permalink / raw)
  To: devel; +Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Marcin Juszkiewicz

There are functions to read DFR, MMFR, PFR system registers. So let add
ones for SMFR0 and ZFR0 ones too.

ArmReadIdAA64Zfr0() uses s3_0_c0_c4_4 notation as clang 17 on my system
does not recognize normal name.

Bumps build flags to "armv8-a+sme" to get access to both registers.

Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
---
 ArmPkg/Library/ArmLib/ArmBaseLib.inf           |  4 ++++
 ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h     | 12 ++++++++++++
 ArmPkg/Library/ArmLib/AArch64/AArch64Support.S | 11 +++++++++++
 3 files changed, 27 insertions(+)

diff --git a/ArmPkg/Library/ArmLib/ArmBaseLib.inf b/ArmPkg/Library/ArmLib/ArmBaseLib.inf
index e37d85bee471..2e8812e8a386 100644
--- a/ArmPkg/Library/ArmLib/ArmBaseLib.inf
+++ b/ArmPkg/Library/ArmLib/ArmBaseLib.inf
@@ -48,3 +48,7 @@ [Packages]
 
 [FeaturePcd.ARM]
   gArmTokenSpaceGuid.PcdNormalMemoryNonshareableOverride
+
+[BuildOptions]
+  GCC:*_*_AARCH64_ASM_FLAGS = -march=armv8-a+sme
+  CLANGDWARF:*_*_AARCH64_ASM_FLAGS = -march=armv8-a+sme
diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h b/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h
index 6380a019ddc5..2fd256f4acc8 100644
--- a/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h
+++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h
@@ -102,4 +102,16 @@ ArmReadIdAA64Pfr1 (
   VOID
   );
 
+UINTN
+EFIAPI
+ArmReadIdAA64Smfr0 (
+  VOID
+  );
+
+UINTN
+EFIAPI
+ArmReadIdAA64Zfr0 (
+  VOID
+  );
+
 #endif // AARCH64_LIB_H_
diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S b/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
index a7111e51882c..0e8e7b5cf0e6 100644
--- a/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
+++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
@@ -524,4 +524,15 @@ ASM_FUNC(ArmReadIdAA64Pfr1)
   mrs   x0, ID_AA64PFR1_EL1
   ret
 
+ASM_FUNC(ArmReadIdAA64Smfr0)
+  mrs   x0, ID_AA64SMFR0_EL1
+  ret
+
+
+ASM_FUNC(ArmReadIdAA64Zfr0)
+  mrs   x0, s3_0_c0_c4_4
+#  mrs   x0, ID_AA64ZFR0_EL1
+  ret
+
+
 ASM_FUNCTION_REMOVE_IF_UNREFERENCED
-- 
2.43.2



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



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [edk2-devel] [PATCH v2 2/2] ArmPkg/ArmLib: Add functions to read future system registers
  2024-02-23 10:56 [edk2-devel] [PATCH 0/2] ArmPkg/ArmLib: add functions to read system registers Marcin Juszkiewicz
  2024-02-23 10:56 ` [edk2-devel] [PATCH v2 1/2] ArmPkg/ArmLib: Add functions to read SVE/SME " Marcin Juszkiewicz
@ 2024-02-23 10:56 ` Marcin Juszkiewicz
  1 sibling, 0 replies; 3+ messages in thread
From: Marcin Juszkiewicz @ 2024-02-23 10:56 UTC (permalink / raw)
  To: devel; +Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Marcin Juszkiewicz

https://developer.arm.com/documentation/ddi0601/2023-12/ lists
more system registers than EDK2 supports now.

ISAR3, MMFR3, MMFR4, PFR2, FPFR0 were added.

Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
---
 ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h    | 34 ++++++++++++++++---
 .../Library/ArmLib/AArch64/AArch64Support.S   | 31 +++++++++++++++++
 2 files changed, 61 insertions(+), 4 deletions(-)

diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h b/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h
index 2fd256f4acc8..172b73f7acad 100644
--- a/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h
+++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h
@@ -50,6 +50,12 @@ ArmReadIdAA64Dfr1 (
   VOID
   );
 
+UINTN
+EFIAPI
+ArmReadIdAA64Fpfr0 (
+  VOID
+  );
+
 UINTN
 EFIAPI
 ArmReadIdAA64Isar0 (
@@ -68,6 +74,12 @@ ArmReadIdAA64Isar2 (
   VOID
   );
 
+UINTN
+EFIAPI
+ArmReadIdAA64Isar3 (
+  VOID
+  );
+
 UINTN
 EFIAPI
 ArmReadIdAA64Mmfr0 (
@@ -80,16 +92,24 @@ ArmReadIdAA64Mmfr1 (
   VOID
   );
 
-/** Reads the ID_AA64MMFR2_EL1 register.
-
-   @return The contents of the ID_AA64MMFR2_EL1 register.
-**/
 UINTN
 EFIAPI
 ArmReadIdAA64Mmfr2 (
   VOID
   );
 
+UINTN
+EFIAPI
+ArmReadIdAA64Mmfr3 (
+  VOID
+  );
+
+UINTN
+EFIAPI
+ArmReadIdAA64Mmfr4 (
+  VOID
+  );
+
 UINTN
 EFIAPI
 ArmReadIdAA64Pfr0 (
@@ -102,6 +122,12 @@ ArmReadIdAA64Pfr1 (
   VOID
   );
 
+UINTN
+EFIAPI
+ArmReadIdAA64Pfr2 (
+  VOID
+  );
+
 UINTN
 EFIAPI
 ArmReadIdAA64Smfr0 (
diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S b/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
index 0e8e7b5cf0e6..b007aef67adf 100644
--- a/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
+++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
@@ -485,6 +485,12 @@ ASM_FUNC(ArmReadIdAA64Dfr1)
   ret
 
 
+ASM_FUNC(ArmReadIdAA64Fpfr0)
+  mrs   x0, s3_0_c0_c4_7
+#  mrs   x0, ID_AA64FPFR0_EL1
+  ret
+
+
 ASM_FUNC(ArmReadIdAA64Isar0)
   mrs   x0, ID_AA64ISAR0_EL1
   ret
@@ -500,6 +506,12 @@ ASM_FUNC(ArmReadIdAA64Isar2)
   ret
 
 
+ASM_FUNC(ArmReadIdAA64Isar3)
+  mrs   x0, s3_0_c0_c6_3
+#  mrs   x0, ID_AA64ISAR3_EL1
+  ret
+
+
 ASM_FUNC(ArmReadIdAA64Mmfr0)
   mrs   x0, ID_AA64MMFR0_EL1
   ret
@@ -515,6 +527,18 @@ ASM_FUNC(ArmReadIdAA64Mmfr2)
   ret
 
 
+ASM_FUNC(ArmReadIdAA64Mmfr3)
+  mrs   x0, s3_0_c0_c7_3
+#  mrs   x0, ID_AA64MMFR3_EL1
+  ret
+
+
+ASM_FUNC(ArmReadIdAA64Mmfr4)
+  mrs   x0, s3_0_c0_c7_4
+#  mrs   x0, ID_AA64MMFR4_EL1
+  ret
+
+
 ASM_FUNC(ArmReadIdAA64Pfr0)
   mrs   x0, ID_AA64PFR0_EL1
   ret
@@ -524,6 +548,13 @@ ASM_FUNC(ArmReadIdAA64Pfr1)
   mrs   x0, ID_AA64PFR1_EL1
   ret
 
+
+ASM_FUNC(ArmReadIdAA64Pfr2)
+  mrs   x0, s3_0_c0_c4_2
+#  mrs   x0, ID_AA64PFR2_EL1
+  ret
+
+
 ASM_FUNC(ArmReadIdAA64Smfr0)
   mrs   x0, ID_AA64SMFR0_EL1
   ret
--
2.43.2



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



^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-02-23 10:56 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-23 10:56 [edk2-devel] [PATCH 0/2] ArmPkg/ArmLib: add functions to read system registers Marcin Juszkiewicz
2024-02-23 10:56 ` [edk2-devel] [PATCH v2 1/2] ArmPkg/ArmLib: Add functions to read SVE/SME " Marcin Juszkiewicz
2024-02-23 10:56 ` [edk2-devel] [PATCH v2 2/2] ArmPkg/ArmLib: Add functions to read future " Marcin Juszkiewicz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox