hikey: Add UEFI sources for reference

UEFI needs to be built outside Android build system.
Please follow the instructions in README.

The sources correspond to:
https://github.com/96boards/edk2/commit/14eae0c12e71fd33c4c0fc51e4475e8db02566cf
https://github.com/96boards/arm-trusted-firmware/commit/e9b4909dcd75fc4ae7041cfb83d28ab9adb7afdf
https://github.com/96boards/l-loader/commit/6b784ad5c4ab00e2b1c6f53cd5f74054e5d00a78
https://git.linaro.org/uefi/uefi-tools.git/commit/abe618f8ab72034fff1ce46c9c006a2c6bd40a7e

Change-Id: Ieeefdb63e673e0c8e64e0a1f02c7bddc63b2c7fb
Signed-off-by: Vishal Bhoj <vishal.bhoj@linaro.org>
diff --git a/uefi/linaro-edk2/ArmPkg/Drivers/ArmGic/ArmGicSecLib.c b/uefi/linaro-edk2/ArmPkg/Drivers/ArmGic/ArmGicSecLib.c
new file mode 100644
index 0000000..1fdd4d7
--- /dev/null
+++ b/uefi/linaro-edk2/ArmPkg/Drivers/ArmGic/ArmGicSecLib.c
@@ -0,0 +1,66 @@
+/** @file

+*

+*  Copyright (c) 2011-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 <Base.h>

+#include <Library/DebugLib.h>

+#include <Library/IoLib.h>

+#include <Library/ArmGicLib.h>

+

+#include "GicV2/ArmGicV2Lib.h"

+

+/*

+ * This function configures the interrupts set by the mask to be secure.

+ *

+ */

+VOID

+EFIAPI

+ArmGicSetSecureInterrupts (

+  IN  UINTN         GicDistributorBase,

+  IN  UINTN*        GicSecureInterruptMask,

+  IN  UINTN         GicSecureInterruptMaskSize

+  )

+{

+  UINTN  Index;

+  UINT32 InterruptStatus;

+

+  // We must not have more interrupts defined by the mask than the number of available interrupts

+  ASSERT(GicSecureInterruptMaskSize <= (ArmGicGetMaxNumInterrupts (GicDistributorBase) / 32));

+

+  // Set all the interrupts defined by the mask as Secure

+  for (Index = 0; Index < GicSecureInterruptMaskSize; Index++) {

+    InterruptStatus = MmioRead32 (GicDistributorBase + ARM_GIC_ICDISR + (Index * 4));

+    MmioWrite32 (GicDistributorBase + ARM_GIC_ICDISR + (Index * 4), InterruptStatus & (~GicSecureInterruptMask[Index]));

+  }

+}

+

+VOID

+EFIAPI

+ArmGicEnableDistributor (

+  IN  INTN          GicDistributorBase

+  )

+{

+  // Turn on the GIC distributor

+  MmioWrite32 (GicDistributorBase + ARM_GIC_ICDDCR, 1);

+}

+

+VOID

+EFIAPI

+ArmGicSetupNonSecure (

+  IN  UINTN         MpId,

+  IN  INTN          GicDistributorBase,

+  IN  INTN          GicInterruptInterfaceBase

+  )

+{

+  ArmGicV2SetupNonSecure (MpId, GicDistributorBase, GicInterruptInterfaceBase);

+}