]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPkg: cache detected revision in ArmGicArchLib
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Tue, 28 Jul 2015 20:45:10 +0000 (20:45 +0000)
committerabiesheuvel <abiesheuvel@Edk2>
Tue, 28 Jul 2015 20:45:10 +0000 (20:45 +0000)
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

ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c
ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c
ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf

index 0e0fa3b9f33e2adccaae7bca03a32189ec76b948..9853c7ba85661ee477fa1246a2c0a9998fd0aef1 100644 (file)
 #include <Library/ArmLib.h>\r
 #include <Library/ArmGicLib.h>\r
 \r
-ARM_GIC_ARCH_REVISION\r
+STATIC ARM_GIC_ARCH_REVISION        mGicArchRevision;\r
+\r
+RETURN_STATUS\r
 EFIAPI\r
-ArmGicGetSupportedArchRevision (\r
+ArmGicArchLibInitialize (\r
   VOID\r
   )\r
 {\r
@@ -43,9 +45,22 @@ ArmGicGetSupportedArchRevision (
       IccSre = ArmGicV3GetControlSystemRegisterEnable ();\r
     }\r
     if (IccSre & ICC_SRE_EL2_SRE) {\r
-      return ARM_GIC_ARCH_REVISION_3;\r
+      mGicArchRevision = ARM_GIC_ARCH_REVISION_3;\r
+      goto Done;\r
     }\r
   }\r
 \r
-  return ARM_GIC_ARCH_REVISION_2;\r
+  mGicArchRevision = ARM_GIC_ARCH_REVISION_2;\r
+\r
+Done:\r
+  return RETURN_SUCCESS;\r
+}\r
+\r
+ARM_GIC_ARCH_REVISION\r
+EFIAPI\r
+ArmGicGetSupportedArchRevision (\r
+  VOID\r
+  )\r
+{\r
+  return mGicArchRevision;\r
 }\r
index f256de70463194d05a2718e5511cccc1392bf70d..f8822a224580d310e2c66889f0e1e0440846889c 100644 (file)
 #include <Library/ArmLib.h>\r
 #include <Library/ArmGicLib.h>\r
 \r
-ARM_GIC_ARCH_REVISION\r
+STATIC ARM_GIC_ARCH_REVISION        mGicArchRevision;\r
+\r
+RETURN_STATUS\r
 EFIAPI\r
-ArmGicGetSupportedArchRevision (\r
+ArmGicArchLibInitialize (\r
   VOID\r
   )\r
 {\r
@@ -43,9 +45,22 @@ ArmGicGetSupportedArchRevision (
       IccSre = ArmGicV3GetControlSystemRegisterEnable ();\r
     }\r
     if (IccSre & ICC_SRE_EL2_SRE) {\r
-      return ARM_GIC_ARCH_REVISION_3;\r
+      mGicArchRevision = ARM_GIC_ARCH_REVISION_3;\r
+      goto Done;\r
     }\r
   }\r
 \r
-  return ARM_GIC_ARCH_REVISION_2;\r
+  mGicArchRevision = ARM_GIC_ARCH_REVISION_2;\r
+\r
+Done:\r
+  return RETURN_SUCCESS;\r
+}\r
+\r
+ARM_GIC_ARCH_REVISION\r
+EFIAPI\r
+ArmGicGetSupportedArchRevision (\r
+  VOID\r
+  )\r
+{\r
+  return mGicArchRevision;\r
 }\r
index d71b2adc30279e7c1dcbbc12a0daf4000d2ed3e1..7dbcb08f50d64e6dbca70f72caa9a8ce9f3ddc34 100644 (file)
@@ -17,7 +17,8 @@
   FILE_GUID                      = cd67f41a-26e9-4482-90c9-a9aff803382a\r
   MODULE_TYPE                    = BASE\r
   VERSION_STRING                 = 1.0\r
-  LIBRARY_CLASS                  = ArmGicArchLib\r
+  LIBRARY_CLASS                  = ArmGicArchLib|DXE_DRIVER UEFI_DRIVER UEFI_APPLICATION\r
+  CONSTRUCTOR                    = ArmGicArchLibInitialize\r
 \r
 [Sources.ARM]\r
   Arm/ArmGicArchLib.c\r