Revision: 18100
          http://sourceforge.net/p/edk2/code/18100
Author:   abiesheuvel
Date:     2015-07-28 20:45:10 +0000 (Tue, 28 Jul 2015)
Log Message:
-----------
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 <[email protected]>
Reviewed-by: Laszlo Ersek <[email protected]>
Reviewed-by: Leif Lindholm <[email protected]>
Tested-by: Leif Lindholm <[email protected]>

Modified Paths:
--------------
    trunk/edk2/ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c
    trunk/edk2/ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c
    trunk/edk2/ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf

Modified: trunk/edk2/ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c     
2015-07-28 20:44:58 UTC (rev 18099)
+++ trunk/edk2/ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c     
2015-07-28 20:45:10 UTC (rev 18100)
@@ -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 @@
       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;
+}

Modified: trunk/edk2/ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c 2015-07-28 
20:44:58 UTC (rev 18099)
+++ trunk/edk2/ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c 2015-07-28 
20:45:10 UTC (rev 18100)
@@ -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 @@
       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;
+}

Modified: trunk/edk2/ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf   2015-07-28 
20:44:58 UTC (rev 18099)
+++ trunk/edk2/ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf   2015-07-28 
20:45:10 UTC (rev 18100)
@@ -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


------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to