ArmPkg/ArmGic: Added GicV3 detection

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>
Signed-off-by: Harry Liebel <Harry.Liebel@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16232 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Olivier Martin 2014-10-27 10:28:44 +00:00 committed by oliviermartin
parent d5c6b7fca3
commit 5f525769b9
6 changed files with 85 additions and 12 deletions

View File

@ -0,0 +1,35 @@
/** @file
*
* Copyright (c) 2014, ARM Limited. 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.
*
**/
#include <Library/ArmLib.h>
#include <Library/ArmGicLib.h>
ARM_GIC_ARCH_REVISION
EFIAPI
ArmGicGetSupportedArchRevision (
VOID
)
{
// Ideally we would like to use the GICC IIDR Architecture version here, but
// this does not seem to be very reliable as the implementation could easily
// get it wrong. It is more reliable to check if the GICv3 System Register
// feature is implemented on the CPU. This is also convenient as our GICv3
// driver requires SRE. If only Memory mapped access is available we try to
// drive the GIC as a v2.
if (ArmReadIdPfr0 () & AARCH64_PFR0_GIC) {
return ARM_GIC_ARCH_REVISION_3;
}
return ARM_GIC_ARCH_REVISION_2;
}

View File

@ -0,0 +1,35 @@
/** @file
*
* Copyright (c) 2014, ARM Limited. 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.
*
**/
#include <Library/ArmLib.h>
#include <Library/ArmGicLib.h>
ARM_GIC_ARCH_REVISION
EFIAPI
ArmGicGetSupportedArchRevision (
VOID
)
{
// Ideally we would like to use the GICC IIDR Architecture version here, but
// this does not seem to be very reliable as the implementation could easily
// get it wrong. It is more reliable to check if the GICv3 System Register
// feature is implemented on the CPU. This is also convenient as our GICv3
// driver requires SRE. If only Memory mapped access is available we try to
// drive the GIC as a v2.
if (ArmReadIdPfr1 () & ARM_PFR1_GIC) {
return ARM_GIC_ARCH_REVISION_3;
}
return ARM_GIC_ARCH_REVISION_2;
}

View File

@ -19,15 +19,6 @@
#include "GicV2/ArmGicV2Lib.h" #include "GicV2/ArmGicV2Lib.h"
ARM_GIC_ARCH_REVISION
EFIAPI
ArmGicGetSupportedArchRevision (
VOID
)
{
return ARM_GIC_ARCH_REVISION_2;
}
UINTN UINTN
EFIAPI EFIAPI
ArmGicGetInterfaceIdentification ( ArmGicGetInterfaceIdentification (

View File

@ -26,7 +26,14 @@
GicV2/ArmGicV2Lib.c GicV2/ArmGicV2Lib.c
GicV2/ArmGicV2NonSecLib.c GicV2/ArmGicV2NonSecLib.c
[Sources.ARM]
Arm/ArmGicArchLib.c
[Sources.AARCH64]
AArch64/ArmGicArchLib.c
[LibraryClasses] [LibraryClasses]
ArmLib
DebugLib DebugLib
IoLib IoLib

View File

@ -26,6 +26,12 @@
GicV2/ArmGicV2Lib.c GicV2/ArmGicV2Lib.c
GicV2/ArmGicV2SecLib.c GicV2/ArmGicV2SecLib.c
[Sources.ARM]
Arm/ArmGicArchLib.c
[Sources.AARCH64]
AArch64/ArmGicArchLib.c
[Packages] [Packages]
ArmPkg/ArmPkg.dec ArmPkg/ArmPkg.dec
ArmPlatformPkg/ArmPlatformPkg.dec ArmPlatformPkg/ArmPlatformPkg.dec
@ -34,7 +40,5 @@
[LibraryClasses] [LibraryClasses]
ArmLib ArmLib
ArmPlatformLib
DebugLib DebugLib
IoLib IoLib
PcdLib

View File

@ -19,7 +19,8 @@
// GIC definitions // GIC definitions
// //
typedef enum { typedef enum {
ARM_GIC_ARCH_REVISION_2 ARM_GIC_ARCH_REVISION_2,
ARM_GIC_ARCH_REVISION_3
} ARM_GIC_ARCH_REVISION; } ARM_GIC_ARCH_REVISION;
// //