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/OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c b/uefi/linaro-edk2/OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c
new file mode 100644
index 0000000..2be0793
--- /dev/null
+++ b/uefi/linaro-edk2/OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c
@@ -0,0 +1,99 @@
+/** @file

+  Provide constructor and GetTick for Dxe instance of ACPI Timer Library

+

+  Copyright (C) 2014, Gabriel L. Somlo <somlo@cmu.edu>

+

+  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/DebugLib.h>

+#include <Library/IoLib.h>

+#include <Library/PcdLib.h>

+#include <Library/PciLib.h>

+#include <OvmfPlatforms.h>

+

+//

+// Power Management PCI Configuration Register fields

+//

+#define PMBA_RTE  BIT0

+

+//

+// Offset in the Power Management Base Address to the ACPI Timer

+//

+#define ACPI_TIMER_OFFSET  0x8

+

+//

+// Cached ACPI Timer IO Address

+//

+STATIC UINT32 mAcpiTimerIoAddr;

+

+/**

+  The constructor function caches the ACPI tick counter address

+

+  At the time this constructor runs (DXE_CORE or later), ACPI IO space

+  has already been enabled by either PlatformPei or by the "Base"

+  instance of this library.

+  In order to avoid querying the underlying platform type during each

+  tick counter read operation, we cache the counter address during

+  initialization of this instance of the Timer Library.

+

+  @retval EFI_SUCCESS   The constructor always returns RETURN_SUCCESS.

+

+**/

+RETURN_STATUS

+EFIAPI

+AcpiTimerLibConstructor (

+  VOID

+  )

+{

+  UINT16 HostBridgeDevId;

+  UINTN Pmba;

+

+  //

+  // Query Host Bridge DID to determine platform type

+  //

+  HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId);

+  switch (HostBridgeDevId) {

+    case INTEL_82441_DEVICE_ID:

+      Pmba = POWER_MGMT_REGISTER_PIIX4 (0x40);

+      break;

+    case INTEL_Q35_MCH_DEVICE_ID:

+      Pmba = POWER_MGMT_REGISTER_Q35 (0x40);

+      break;

+    default:

+      DEBUG ((EFI_D_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n",

+        __FUNCTION__, HostBridgeDevId));

+      ASSERT (FALSE);

+      return RETURN_UNSUPPORTED;

+  }

+

+  mAcpiTimerIoAddr = (PciRead32 (Pmba) & ~PMBA_RTE) + ACPI_TIMER_OFFSET;

+

+  return RETURN_SUCCESS;

+}

+

+/**

+  Internal function to read the current tick counter of ACPI.

+

+  Read the current ACPI tick counter using the counter address cached

+  by this instance's constructor.

+

+  @return The tick counter read.

+

+**/

+UINT32

+InternalAcpiGetTimerTick (

+  VOID

+  )

+{

+  //

+  //   Return the current ACPI timer value.

+  //

+  return IoRead32 (mAcpiTimerIoAddr);

+}