The current implementation of ArmGicGetSupportedArchRevision ()
that is used by all ARM platforms is entirely stateless (in order
to support being executed from flash) so it needs to interrogate
the hardware for the supported GIC revision upon each invocation.

However, this statelessness is only needed for SEC type modules;
in all other cases, we could easily determine the GIC revision once,
and store the result in a global variable.

In preparation of having separate early and normal versions, this patch
introduces the ArmGicArchLib library class and default implementation,
and moves the existing ArmGicGetSupportedArchRevision () into it.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <[email protected]>
Acked-by: Laszlo Ersek <[email protected]>
---
 ArmPkg/ArmPkg.dec                                                           |  
1 +
 ArmPkg/ArmPkg.dsc                                                           |  
1 +
 ArmPkg/Drivers/ArmGic/ArmGicLib.inf                                         |  
3 +-
 ArmPkg/Drivers/ArmGic/ArmGicSecLib.inf                                      |  
3 +-
 ArmPkg/Include/Library/ArmGicArchLib.h                                      | 
33 ++++++++++++++++++++
 ArmPkg/Include/Library/ArmGicLib.h                                          | 
14 +--------
 ArmPkg/{Drivers/ArmGic => Library/ArmGicArchLib}/AArch64/ArmGicArchLib.c    |  0
 ArmPkg/{Drivers/ArmGic => Library/ArmGicArchLib}/Arm/ArmGicArchLib.c        |  0
 ArmPkg/Library/{ArmSmcLib/ArmSmcLib.inf => ArmGicArchLib/ArmGicArchLib.inf} | 
20 ++++++------
 ArmPlatformPkg/ArmPlatformPkg-2ndstage.dsc                                  |  
1 +
 ArmPlatformPkg/ArmPlatformPkg.dsc                                           |  
1 +
 ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb.dsc.inc                       |  
1 +
 ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc                           |  
1 +
 ArmVirtPkg/ArmVirt.dsc.inc                                                  |  
1 +
 14 files changed, 54 insertions(+), 26 deletions(-)

diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec
index da0c8a9f27a7..46e9894d3f56 100644
--- a/ArmPkg/ArmPkg.dec
+++ b/ArmPkg/ArmPkg.dec
@@ -38,6 +38,7 @@ [LibraryClasses.common]
   UncachedMemoryAllocationLib|Include/Library/UncachedMemoryAllocationLib.h
   DefaultExceptionHandlerLib|Include/Library/DefaultExceptionHandlerLib.h
   ArmDisassemblerLib|Include/Library/ArmDisassemblerLib.h
+  ArmGicArchLib|Include/Library/ArmGicArchLib.h
 
 [Guids.common]
   gArmTokenSpaceGuid       = { 0xBB11ECFE, 0x820F, 0x4968, { 0xBB, 0xA6, 0xF7, 
0x6A, 0xFE, 0x30, 0x25, 0x96 } }
diff --git a/ArmPkg/ArmPkg.dsc b/ArmPkg/ArmPkg.dsc
index 1f69799dc24b..10e8a1a83d46 100644
--- a/ArmPkg/ArmPkg.dsc
+++ b/ArmPkg/ArmPkg.dsc
@@ -66,6 +66,7 @@ [LibraryClasses.common]
 
   CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf
   ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf
+  ArmGicArchLib|ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
   
ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf
   ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
   ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
diff --git a/ArmPkg/Drivers/ArmGic/ArmGicLib.inf 
b/ArmPkg/Drivers/ArmGic/ArmGicLib.inf
index 2ae3fd31e892..047adac85ff4 100644
--- a/ArmPkg/Drivers/ArmGic/ArmGicLib.inf
+++ b/ArmPkg/Drivers/ArmGic/ArmGicLib.inf
@@ -27,18 +27,17 @@ [Sources]
   GicV2/ArmGicV2NonSecLib.c
 
 [Sources.ARM]
-  Arm/ArmGicArchLib.c
   GicV3/Arm/ArmGicV3.S     | GCC
   GicV3/Arm/ArmGicV3.asm   | RVCT
 
 [Sources.AARCH64]
-  AArch64/ArmGicArchLib.c
   GicV3/AArch64/ArmGicV3.S
 
 [LibraryClasses]
   ArmLib
   DebugLib
   IoLib
+  ArmGicArchLib
 
 [Packages]
   ArmPkg/ArmPkg.dec
diff --git a/ArmPkg/Drivers/ArmGic/ArmGicSecLib.inf 
b/ArmPkg/Drivers/ArmGic/ArmGicSecLib.inf
index 7d4e49e4b96f..fc2e1bc01efe 100644
--- a/ArmPkg/Drivers/ArmGic/ArmGicSecLib.inf
+++ b/ArmPkg/Drivers/ArmGic/ArmGicSecLib.inf
@@ -27,12 +27,10 @@ [Sources]
   GicV2/ArmGicV2SecLib.c
 
 [Sources.ARM]
-  Arm/ArmGicArchLib.c
   GicV3/Arm/ArmGicV3.S     | GCC
   GicV3/Arm/ArmGicV3.asm   | RVCT
 
 [Sources.AARCH64]
-  AArch64/ArmGicArchLib.c
   GicV3/AArch64/ArmGicV3.S
 
 [Packages]
@@ -45,6 +43,7 @@ [LibraryClasses]
   ArmLib
   DebugLib
   IoLib
+  ArmGicArchLib
 
 [Pcd]
   gArmPlatformTokenSpaceGuid.PcdCoreCount
diff --git a/ArmPkg/Include/Library/ArmGicArchLib.h 
b/ArmPkg/Include/Library/ArmGicArchLib.h
new file mode 100644
index 000000000000..e6964a2d5790
--- /dev/null
+++ b/ArmPkg/Include/Library/ArmGicArchLib.h
@@ -0,0 +1,33 @@
+/** @file
+*
+*  Copyright (c) 2015, Linaro Ltd. All rights reserved.
+*
+*  This program and the accompanying materials are licensed and made available
+*  under the terms and conditions of the BSD License which accompanies this
+*  distribution.  The full text of the license may be found at
+*  http://opensource.org/licenses/bsd-license.php
+*
+*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
IMPLIED.
+*
+**/
+
+#ifndef __ARM_GIC_ARCH_LIB_H__
+#define __ARM_GIC_ARCH_LIB_H__
+
+//
+// GIC definitions
+//
+typedef enum {
+  ARM_GIC_ARCH_REVISION_2,
+  ARM_GIC_ARCH_REVISION_3
+} ARM_GIC_ARCH_REVISION;
+
+
+ARM_GIC_ARCH_REVISION
+EFIAPI
+ArmGicGetSupportedArchRevision (
+  VOID
+  );
+
+#endif
diff --git a/ArmPkg/Include/Library/ArmGicLib.h 
b/ArmPkg/Include/Library/ArmGicLib.h
index e3db9c0d250f..10c4a9d72eb2 100644
--- a/ArmPkg/Include/Library/ArmGicLib.h
+++ b/ArmPkg/Include/Library/ArmGicLib.h
@@ -15,13 +15,7 @@
 #ifndef __ARMGIC_H
 #define __ARMGIC_H
 
-//
-// GIC definitions
-//
-typedef enum {
-  ARM_GIC_ARCH_REVISION_2,
-  ARM_GIC_ARCH_REVISION_3
-} ARM_GIC_ARCH_REVISION;
+#include <Library/ArmGicArchLib.h>
 
 //
 // GIC Distributor
@@ -103,12 +97,6 @@ typedef enum {
 // Bit Mask for
 #define ARM_GIC_ICCIAR_ACKINTID                 0x3FF
 
-ARM_GIC_ARCH_REVISION
-EFIAPI
-ArmGicGetSupportedArchRevision (
-  VOID
-  );
-
 UINTN
 EFIAPI
 ArmGicGetInterfaceIdentification (
diff --git a/ArmPkg/Drivers/ArmGic/AArch64/ArmGicArchLib.c 
b/ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c
similarity index 100%
rename from ArmPkg/Drivers/ArmGic/AArch64/ArmGicArchLib.c
rename to ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c
diff --git a/ArmPkg/Drivers/ArmGic/Arm/ArmGicArchLib.c 
b/ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c
similarity index 100%
rename from ArmPkg/Drivers/ArmGic/Arm/ArmGicArchLib.c
rename to ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c
diff --git a/ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf 
b/ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
similarity index 64%
copy from ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
copy to ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
index 9f9ba729967c..d71b2adc3027 100644
--- a/ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
+++ b/ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
@@ -1,6 +1,6 @@
-#/** @file
+#/* @file
+#  Copyright (c) 2015, Linaro Ltd. All rights reserved.
 #
-#  Copyright (c) 2012-2013, ARM Ltd. All rights reserved.<BR>
 #  This program and the accompanying materials
 #  are licensed and made available under the terms and conditions of the BSD 
License
 #  which accompanies this distribution.  The full text of the license may be 
found at
@@ -9,23 +9,25 @@
 #  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
IMPLIED.
 #
-#**/
+#*/
 
 [Defines]
   INF_VERSION                    = 0x00010005
-  BASE_NAME                      = ArmSmcLib
-  FILE_GUID                      = eb3f17d5-a3cc-4eac-8912-84162d0f79da
+  BASE_NAME                      = ArmGicArchLib
+  FILE_GUID                      = cd67f41a-26e9-4482-90c9-a9aff803382a
   MODULE_TYPE                    = BASE
   VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = ArmSmcLib
+  LIBRARY_CLASS                  = ArmGicArchLib
 
 [Sources.ARM]
-  Arm/ArmSmc.asm    | RVCT
-  Arm/ArmSmc.S      | GCC
+  Arm/ArmGicArchLib.c
 
 [Sources.AARCH64]
-  AArch64/ArmSmc.S
+  AArch64/ArmGicArchLib.c
 
 [Packages]
   MdePkg/MdePkg.dec
   ArmPkg/ArmPkg.dec
+
+[LibraryClasses]
+  ArmGicLib
diff --git a/ArmPlatformPkg/ArmPlatformPkg-2ndstage.dsc 
b/ArmPlatformPkg/ArmPlatformPkg-2ndstage.dsc
index 76415fec586e..e50fcb095953 100644
--- a/ArmPlatformPkg/ArmPlatformPkg-2ndstage.dsc
+++ b/ArmPlatformPkg/ArmPlatformPkg-2ndstage.dsc
@@ -78,6 +78,7 @@ [LibraryClasses.common]
   ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
   DmaLib|ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf
   ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf
+  ArmGicArchLib|ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
   
ArmPlatformStackLib|ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf
   ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
 
diff --git a/ArmPlatformPkg/ArmPlatformPkg.dsc 
b/ArmPlatformPkg/ArmPlatformPkg.dsc
index 014714632221..0f59fec113f1 100644
--- a/ArmPlatformPkg/ArmPlatformPkg.dsc
+++ b/ArmPlatformPkg/ArmPlatformPkg.dsc
@@ -78,6 +78,7 @@ [LibraryClasses.common]
   ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
   DmaLib|ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf
   ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf
+  ArmGicArchLib|ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
   ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
 
   SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
diff --git a/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb.dsc.inc 
b/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb.dsc.inc
index 9445ce2710ab..4d0ecfa713d3 100644
--- a/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb.dsc.inc
+++ b/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb.dsc.inc
@@ -62,6 +62,7 @@ [LibraryClasses.common]
   ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
   DmaLib|ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf
   ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf
+  ArmGicArchLib|ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
   ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
   
ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf
 
diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc 
b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
index a488218300e4..3c7be4e64ab6 100644
--- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
+++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
@@ -71,6 +71,7 @@ [LibraryClasses.common]
   ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
   DmaLib|ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf
   ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf
+  ArmGicArchLib|ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
   
ArmPlatformStackLib|ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf
   ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
   
ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf
diff --git a/ArmVirtPkg/ArmVirt.dsc.inc b/ArmVirtPkg/ArmVirt.dsc.inc
index d3f401b1dc19..eaafe51a7dab 100644
--- a/ArmVirtPkg/ArmVirt.dsc.inc
+++ b/ArmVirtPkg/ArmVirt.dsc.inc
@@ -76,6 +76,7 @@ [LibraryClasses.common]
   ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
   DmaLib|ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf
   ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf
+  ArmGicArchLib|ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
   
ArmPlatformStackLib|ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf
   ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
   ArmHvcLib|ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf
-- 
1.9.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to