aboutsummaryrefslogtreecommitdiffstats
path: root/roms/edk2/ArmPkg/Drivers/ArmGic/ArmGicNonSecLib.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/edk2/ArmPkg/Drivers/ArmGic/ArmGicNonSecLib.c')
-rw-r--r--roms/edk2/ArmPkg/Drivers/ArmGic/ArmGicNonSecLib.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/roms/edk2/ArmPkg/Drivers/ArmGic/ArmGicNonSecLib.c b/roms/edk2/ArmPkg/Drivers/ArmGic/ArmGicNonSecLib.c
new file mode 100644
index 000000000..7e8ae5ac2
--- /dev/null
+++ b/roms/edk2/ArmPkg/Drivers/ArmGic/ArmGicNonSecLib.c
@@ -0,0 +1,35 @@
+/** @file
+*
+* Copyright (c) 2011-2015, ARM Limited. All rights reserved.
+*
+* SPDX-License-Identifier: BSD-2-Clause-Patent
+*
+**/
+
+#include <Uefi.h>
+#include <Library/IoLib.h>
+#include <Library/ArmGicLib.h>
+
+VOID
+EFIAPI
+ArmGicEnableDistributor (
+ IN INTN GicDistributorBase
+ )
+{
+ ARM_GIC_ARCH_REVISION Revision;
+
+ /*
+ * Enable GIC distributor in Non-Secure world.
+ * Note: The ICDDCR register is banked when Security extensions are implemented
+ */
+ Revision = ArmGicGetSupportedArchRevision ();
+ if (Revision == ARM_GIC_ARCH_REVISION_2) {
+ MmioWrite32 (GicDistributorBase + ARM_GIC_ICDDCR, 0x1);
+ } else {
+ if (MmioRead32 (GicDistributorBase + ARM_GIC_ICDDCR) & ARM_GIC_ICDDCR_ARE) {
+ MmioOr32 (GicDistributorBase + ARM_GIC_ICDDCR, 0x2);
+ } else {
+ MmioOr32 (GicDistributorBase + ARM_GIC_ICDDCR, 0x1);
+ }
+ }
+}