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