From a7c8969d03bb025020948fe9ababf428033de668 Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Fri, 21 Apr 2023 17:51:15 +0200 Subject: ArmLib: add functions to read system registers ArmCpuInfo uses those to read system registers and other parts of EDK2 may find them useful. Signed-off-by: Marcin Juszkiewicz Reviewed-by: Leif Lindholm --- ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h | 50 +++++++++++++++++++++- ArmPkg/Library/ArmLib/AArch64/AArch64Support.S | 58 ++++++++++++++++++++++---- 2 files changed, 99 insertions(+), 9 deletions(-) diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h b/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h index 330481fc50..6380a019dd 100644 --- a/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h +++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.h @@ -40,7 +40,43 @@ ArmCleanInvalidateDataCacheEntryBySetWay ( UINTN EFIAPI -ArmReadIdAA64Pfr0 ( +ArmReadIdAA64Dfr0 ( + VOID + ); + +UINTN +EFIAPI +ArmReadIdAA64Dfr1 ( + VOID + ); + +UINTN +EFIAPI +ArmReadIdAA64Isar0 ( + VOID + ); + +UINTN +EFIAPI +ArmReadIdAA64Isar1 ( + VOID + ); + +UINTN +EFIAPI +ArmReadIdAA64Isar2 ( + VOID + ); + +UINTN +EFIAPI +ArmReadIdAA64Mmfr0 ( + VOID + ); + +UINTN +EFIAPI +ArmReadIdAA64Mmfr1 ( VOID ); @@ -54,4 +90,16 @@ ArmReadIdAA64Mmfr2 ( VOID ); +UINTN +EFIAPI +ArmReadIdAA64Pfr0 ( + VOID + ); + +UINTN +EFIAPI +ArmReadIdAA64Pfr1 ( + VOID + ); + #endif // AARCH64_LIB_H_ diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S b/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S index d3cc1e8671..a7111e5188 100644 --- a/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S +++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S @@ -425,10 +425,6 @@ ASM_FUNC(ArmCallWFI) wfi ret -ASM_FUNC(ArmReadIdAA64Mmfr2) - mrs x0, ID_AA64MMFR2_EL1 // read EL1 MMFR2 - ret - ASM_FUNC(ArmReadMpidr) mrs x0, mpidr_el1 // read EL1 MPIDR ret @@ -452,10 +448,6 @@ ASM_FUNC(ArmIsArchTimerImplemented) ret -ASM_FUNC(ArmReadIdAA64Pfr0) - mrs x0, id_aa64pfr0_el1 // Read ID_AA64PFR0 Register - ret - // VOID ArmWriteHcr(UINTN Hcr) ASM_FUNC(ArmWriteHcr) @@ -482,4 +474,54 @@ ASM_FUNC(ArmWriteCntHctl) msr cnthctl_el2, x0 ret + +ASM_FUNC(ArmReadIdAA64Dfr0) + mrs x0, ID_AA64DFR0_EL1 + ret + + +ASM_FUNC(ArmReadIdAA64Dfr1) + mrs x0, ID_AA64DFR1_EL1 + ret + + +ASM_FUNC(ArmReadIdAA64Isar0) + mrs x0, ID_AA64ISAR0_EL1 + ret + + +ASM_FUNC(ArmReadIdAA64Isar1) + mrs x0, ID_AA64ISAR1_EL1 + ret + + +ASM_FUNC(ArmReadIdAA64Isar2) + mrs x0, ID_AA64ISAR2_EL1 + ret + + +ASM_FUNC(ArmReadIdAA64Mmfr0) + mrs x0, ID_AA64MMFR0_EL1 + ret + + +ASM_FUNC(ArmReadIdAA64Mmfr1) + mrs x0, ID_AA64MMFR1_EL1 + ret + + +ASM_FUNC(ArmReadIdAA64Mmfr2) + mrs x0, ID_AA64MMFR2_EL1 + ret + + +ASM_FUNC(ArmReadIdAA64Pfr0) + mrs x0, ID_AA64PFR0_EL1 + ret + + +ASM_FUNC(ArmReadIdAA64Pfr1) + mrs x0, ID_AA64PFR1_EL1 + ret + ASM_FUNCTION_REMOVE_IF_UNREFERENCED -- cgit v1.2.3