diff options
author | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2015-07-28 20:45:10 +0000 |
---|---|---|
committer | abiesheuvel <abiesheuvel@Edk2> | 2015-07-28 20:45:10 +0000 |
commit | f94522c823610a4b44486835aca195c267bd3953 (patch) | |
tree | c6e89207fd96cd4b67dba763ce74a4bf429da231 /ArmPkg/Library/ArmGicArchLib | |
parent | e9e9c7e8a4a987f9e68c016514aa8b60570a6450 (diff) | |
download | edk2-f94522c823610a4b44486835aca195c267bd3953.tar.gz edk2-f94522c823610a4b44486835aca195c267bd3953.tar.bz2 edk2-f94522c823610a4b44486835aca195c267bd3953.zip |
ArmPkg: cache detected revision in ArmGicArchLib
Instead of inferring the GIC revision from the CPU id registers
and the presence/availability of the system register interface
upon each invocation, move the logic to a constructor and cache
the result.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Tested-by: Leif Lindholm <leif.lindholm@linaro.org>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18100 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPkg/Library/ArmGicArchLib')
-rw-r--r-- | ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c | 23 | ||||
-rw-r--r-- | ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c | 23 | ||||
-rw-r--r-- | ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf | 3 |
3 files changed, 40 insertions, 9 deletions
diff --git a/ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c b/ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c index 0e0fa3b9f3..9853c7ba85 100644 --- a/ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c +++ b/ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c @@ -15,9 +15,11 @@ #include <Library/ArmLib.h>
#include <Library/ArmGicLib.h>
-ARM_GIC_ARCH_REVISION
+STATIC ARM_GIC_ARCH_REVISION mGicArchRevision;
+
+RETURN_STATUS
EFIAPI
-ArmGicGetSupportedArchRevision (
+ArmGicArchLibInitialize (
VOID
)
{
@@ -43,9 +45,22 @@ ArmGicGetSupportedArchRevision ( IccSre = ArmGicV3GetControlSystemRegisterEnable ();
}
if (IccSre & ICC_SRE_EL2_SRE) {
- return ARM_GIC_ARCH_REVISION_3;
+ mGicArchRevision = ARM_GIC_ARCH_REVISION_3;
+ goto Done;
}
}
- return ARM_GIC_ARCH_REVISION_2;
+ mGicArchRevision = ARM_GIC_ARCH_REVISION_2;
+
+Done:
+ return RETURN_SUCCESS;
+}
+
+ARM_GIC_ARCH_REVISION
+EFIAPI
+ArmGicGetSupportedArchRevision (
+ VOID
+ )
+{
+ return mGicArchRevision;
}
diff --git a/ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c b/ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c index f256de7046..f8822a2245 100644 --- a/ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c +++ b/ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c @@ -15,9 +15,11 @@ #include <Library/ArmLib.h>
#include <Library/ArmGicLib.h>
-ARM_GIC_ARCH_REVISION
+STATIC ARM_GIC_ARCH_REVISION mGicArchRevision;
+
+RETURN_STATUS
EFIAPI
-ArmGicGetSupportedArchRevision (
+ArmGicArchLibInitialize (
VOID
)
{
@@ -43,9 +45,22 @@ ArmGicGetSupportedArchRevision ( IccSre = ArmGicV3GetControlSystemRegisterEnable ();
}
if (IccSre & ICC_SRE_EL2_SRE) {
- return ARM_GIC_ARCH_REVISION_3;
+ mGicArchRevision = ARM_GIC_ARCH_REVISION_3;
+ goto Done;
}
}
- return ARM_GIC_ARCH_REVISION_2;
+ mGicArchRevision = ARM_GIC_ARCH_REVISION_2;
+
+Done:
+ return RETURN_SUCCESS;
+}
+
+ARM_GIC_ARCH_REVISION
+EFIAPI
+ArmGicGetSupportedArchRevision (
+ VOID
+ )
+{
+ return mGicArchRevision;
}
diff --git a/ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf b/ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf index d71b2adc30..7dbcb08f50 100644 --- a/ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf +++ b/ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf @@ -17,7 +17,8 @@ FILE_GUID = cd67f41a-26e9-4482-90c9-a9aff803382a
MODULE_TYPE = BASE
VERSION_STRING = 1.0
- LIBRARY_CLASS = ArmGicArchLib
+ LIBRARY_CLASS = ArmGicArchLib|DXE_DRIVER UEFI_DRIVER UEFI_APPLICATION
+ CONSTRUCTOR = ArmGicArchLibInitialize
[Sources.ARM]
Arm/ArmGicArchLib.c
|