The current GIC revision detection code infers the GIC revision from
the AA64PFR0_EL1.GIC feature bit that tells us whether the GIC system
register interface is implemented in the hardware, and then proceeds
to attempt and enable it.

The library containing this code deliberately does not cache the
detected revision since it may execute in the SEC phase and may
be running from NOR flash and not RAM.

However, since the detection code runs very often, and is quite
heavy-weight when running under virtualization (especially KVM),
this series refactors the GIC revision detection to:
- use fewer system register accesses if possible
- provide an alternative that does cache the detected revision
- use the DT supplied revision when executing on a DT based platform


Ard Biesheuvel (7):
  ArmPkg: reduce sysreg access count in GIC revision probe
  ArmPkg: merge ArmGicV[23]Lib.h into ArmGicLib.h
  ArmPkg: split off ArmGicArchLib from ArmGicLib
  ArmPkg: copy ArmGicArchLib to ArmGicArchSecLib
  ArmPkg: cache detected revision in ArmGicArchLib
  ArmVirtPkg: record GIC revision in dynamic PCD
  ArmVirtPkg: implement DT-based ArmGicArchLib

 ArmPkg/ArmPkg.dec                                                           |  
 1 +
 ArmPkg/ArmPkg.dsc                                                           |  
 1 +
 ArmPkg/Drivers/ArmGic/ArmGicLib.c                                           |  
 3 -
 ArmPkg/Drivers/ArmGic/ArmGicLib.inf                                         |  
 3 +-
 ArmPkg/Drivers/ArmGic/ArmGicSecLib.c                                        |  
 2 -
 ArmPkg/Drivers/ArmGic/ArmGicSecLib.inf                                      |  
 3 +-
 ArmPkg/Drivers/ArmGic/GicV2/ArmGicV2Dxe.c                                   |  
 3 +-
 ArmPkg/Drivers/ArmGic/GicV2/ArmGicV2Lib.h                                   |  
54 ------
 ArmPkg/Drivers/ArmGic/GicV3/ArmGicV3Dxe.c                                   |  
 3 +-
 ArmPkg/Drivers/ArmGic/GicV3/ArmGicV3Lib.h                                   |  
68 -------
 ArmPkg/Include/Library/ArmGicArchLib.h                                      |  
33 ++++
 ArmPkg/Include/Library/ArmGicLib.h                                          | 
108 ++++++++++--
 ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c                        |  
66 +++++++
 ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c                            |  
66 +++++++
 ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf                              |  
34 ++++
 ArmPkg/{Drivers/ArmGic => Library/ArmGicArchSecLib}/AArch64/ArmGicArchLib.c |  
12 +-
 ArmPkg/{Drivers/ArmGic => Library/ArmGicArchSecLib}/Arm/ArmGicArchLib.c     |  
12 +-
 ArmPkg/Library/ArmGicArchSecLib/ArmGicArchSecLib.inf                        |  
33 ++++
 ArmPlatformPkg/ArmPlatformPkg-2ndstage.dsc                                  |  
 2 +
 ArmPlatformPkg/ArmPlatformPkg.dsc                                           |  
 3 +
 ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb.dsc.inc                       |  
 3 +
 ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc                           |  
 3 +
 ArmVirtPkg/ArmVirt.dsc.inc                                                  |  
 1 +
 ArmVirtPkg/ArmVirtPkg.dec                                                   |  
 7 +-
 ArmVirtPkg/ArmVirtQemu.dsc                                                  |  
 1 +
 ArmVirtPkg/ArmVirtXen.dsc                                                   |  
 1 +
 ArmVirtPkg/Library/ArmVirtGicArchLib/ArmVirtGicArchLib.c                    |  
75 ++++++++
 ArmVirtPkg/Library/ArmVirtGicArchLib/ArmVirtGicArchLib.inf                  |  
40 +++++
 ArmVirtPkg/VirtFdtDxe/VirtFdtDxe.c                                          |  
 2 +
 ArmVirtPkg/VirtFdtDxe/VirtFdtDxe.inf                                        |  
 1 +
 30 files changed, 489 insertions(+), 155 deletions(-)
 delete mode 100644 ArmPkg/Drivers/ArmGic/GicV2/ArmGicV2Lib.h
 delete mode 100644 ArmPkg/Drivers/ArmGic/GicV3/ArmGicV3Lib.h
 create mode 100644 ArmPkg/Include/Library/ArmGicArchLib.h
 create mode 100644 ArmPkg/Library/ArmGicArchLib/AArch64/ArmGicArchLib.c
 create mode 100644 ArmPkg/Library/ArmGicArchLib/Arm/ArmGicArchLib.c
 create mode 100644 ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
 rename ArmPkg/{Drivers/ArmGic => 
Library/ArmGicArchSecLib}/AArch64/ArmGicArchLib.c (82%)
 rename ArmPkg/{Drivers/ArmGic => Library/ArmGicArchSecLib}/Arm/ArmGicArchLib.c 
(82%)
 create mode 100644 ArmPkg/Library/ArmGicArchSecLib/ArmGicArchSecLib.inf
 create mode 100644 ArmVirtPkg/Library/ArmVirtGicArchLib/ArmVirtGicArchLib.c
 create mode 100644 ArmVirtPkg/Library/ArmVirtGicArchLib/ArmVirtGicArchLib.inf

-- 
1.9.1


------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to