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/IntelFspPkg/Include/Library/CacheAsRamLib.h b/uefi/linaro-edk2/IntelFspPkg/Include/Library/CacheAsRamLib.h
new file mode 100644
index 0000000..6f3d068
--- /dev/null
+++ b/uefi/linaro-edk2/IntelFspPkg/Include/Library/CacheAsRamLib.h
@@ -0,0 +1,30 @@
+/** @file

+

+  Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>

+  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.

+

+**/

+

+#ifndef _CACHE_AS_RAM_LIB_H_

+#define _CACHE_AS_RAM_LIB_H_

+

+/**

+  This function disable CAR.

+

+  @param[in] DisableCar       TRUE means use INVD, FALSE means use WBINVD

+

+**/

+VOID

+EFIAPI

+DisableCacheAsRam (

+  IN BOOLEAN                   DisableCar

+  );

+

+#endif

+

diff --git a/uefi/linaro-edk2/IntelFspPkg/Include/Library/CacheLib.h b/uefi/linaro-edk2/IntelFspPkg/Include/Library/CacheLib.h
new file mode 100644
index 0000000..909ae92
--- /dev/null
+++ b/uefi/linaro-edk2/IntelFspPkg/Include/Library/CacheLib.h
@@ -0,0 +1,62 @@
+/** @file

+

+  Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>

+  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.

+

+**/

+

+#ifndef _CACHE_LIB_H_

+#define _CACHE_LIB_H_

+

+//

+// EFI_MEMORY_CACHE_TYPE

+//

+typedef INT32 EFI_MEMORY_CACHE_TYPE;

+

+#define EFI_CACHE_UNCACHEABLE                 0

+#define EFI_CACHE_WRITECOMBINING              1

+#define EFI_CACHE_WRITETHROUGH                4

+#define EFI_CACHE_WRITEPROTECTED              5

+#define EFI_CACHE_WRITEBACK                   6

+

+/**

+ Reset all the MTRRs to a known state.

+

+  @retval  EFI_SUCCESS All MTRRs have been reset successfully.

+

+**/

+EFI_STATUS

+EFIAPI

+ResetCacheAttributes (

+  VOID

+  );

+

+/**

+  Given the memory range and cache type, programs the MTRRs.

+

+  @param[in] MemoryAddress           Base Address of Memory to program MTRR.

+  @param[in] MemoryLength            Length of Memory to program MTRR.

+  @param[in] MemoryCacheType         Cache Type.

+

+  @retval EFI_SUCCESS            Mtrr are set successfully.

+  @retval EFI_LOAD_ERROR         No empty MTRRs to use.

+  @retval EFI_INVALID_PARAMETER  The input parameter is not valid.

+  @retval others                 An error occurs when setting MTTR.

+

+**/

+EFI_STATUS

+EFIAPI

+SetCacheAttributes (

+  IN  EFI_PHYSICAL_ADDRESS      MemoryAddress,

+  IN  UINT64                    MemoryLength,

+  IN  EFI_MEMORY_CACHE_TYPE     MemoryCacheType

+  );

+

+#endif

+

diff --git a/uefi/linaro-edk2/IntelFspPkg/Include/Library/DebugDeviceLib.h b/uefi/linaro-edk2/IntelFspPkg/Include/Library/DebugDeviceLib.h
new file mode 100644
index 0000000..5c35eda
--- /dev/null
+++ b/uefi/linaro-edk2/IntelFspPkg/Include/Library/DebugDeviceLib.h
@@ -0,0 +1,29 @@
+/** @file

+

+  Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>

+  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.

+

+**/

+

+#ifndef __DEBUG_DEVICE_LIB_H__

+#define __DEBUG_DEVICE_LIB_H__

+

+/**

+  Returns the debug print device enable state.

+

+  @return  Debug print device enable state.

+

+**/

+UINT8

+EFIAPI

+GetDebugPrintDeviceEnable (

+  VOID

+  );

+

+#endif

diff --git a/uefi/linaro-edk2/IntelFspPkg/Include/Library/FspCommonLib.h b/uefi/linaro-edk2/IntelFspPkg/Include/Library/FspCommonLib.h
new file mode 100644
index 0000000..e7d7b02
--- /dev/null
+++ b/uefi/linaro-edk2/IntelFspPkg/Include/Library/FspCommonLib.h
@@ -0,0 +1,206 @@
+/** @file

+

+  Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>

+  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.

+

+**/

+

+#ifndef _FSP_COMMON_LIB_H_

+#define _FSP_COMMON_LIB_H_

+

+#include <FspGlobalData.h>

+#include <FspMeasurePointId.h>

+

+/**

+  This function sets the FSP global data pointer.

+

+  @param[in] FspData       Fsp global data pointer.

+

+**/

+VOID

+EFIAPI

+SetFspGlobalDataPointer (

+  IN FSP_GLOBAL_DATA   *FspData

+  );

+

+/**

+  This function gets the FSP global data pointer.

+

+**/

+FSP_GLOBAL_DATA *

+EFIAPI

+GetFspGlobalDataPointer (

+  VOID

+  );

+

+/**

+  This function gets back the FSP API paramter passed by the bootlaoder.

+

+  @retval ApiParameter FSP API paramter passed by the bootlaoder.

+**/

+UINT32

+EFIAPI

+GetFspApiParameter (

+  VOID

+  );

+

+/**

+  This function sets the FSP API paramter in the stack.

+

+   @param[in] Value       New parameter value.

+

+**/

+VOID

+EFIAPI

+SetFspApiParameter (

+  IN UINT32      Value

+  );

+

+/**

+  This function sets the FSP continuation function parameters in the stack.

+

+  @param[in] Value             New parameter value to set.

+  @param[in] Index             Parameter index.

+**/

+VOID

+EFIAPI

+SetFspContinuationFuncParameter (

+  IN UINT32      Value,

+  IN UINT32      Index

+  );

+

+/**

+  This function changes the Bootloader return address in stack.

+

+  @param[in] ReturnAddress       Address to return.

+

+**/

+VOID

+EFIAPI

+SetFspApiReturnAddress (

+  IN UINT32  ReturnAddress

+  );

+

+/**

+  This function set the API status code returned to the bootloader.

+

+  @param[in] ReturnStatus       Status code to return.

+

+**/

+VOID

+EFIAPI

+SetFspApiReturnStatus (

+  IN UINT32  ReturnStatus

+  );

+

+/**

+  This function sets the context switching stack to a new stack frame.

+

+  @param[in] NewStackTop       New core stack to be set.

+

+**/

+VOID

+EFIAPI

+SetFspCoreStackPointer (

+  IN VOID   *NewStackTop

+  );

+

+/**

+  This function sets the platform specific data pointer.

+

+  @param[in] PlatformData       Fsp platform specific data pointer.

+

+**/

+VOID

+EFIAPI

+SetFspPlatformDataPointer (

+  IN VOID   *PlatformData

+  );

+

+/**

+  This function gets the platform specific data pointer.

+

+   @param[in] PlatformData       Fsp platform specific data pointer.

+

+**/

+VOID *

+EFIAPI

+GetFspPlatformDataPointer (

+  VOID

+  );

+

+/**

+  This function sets the UPD data pointer.

+

+  @param[in] UpdDataRgnPtr   UPD data pointer.

+**/

+VOID

+EFIAPI

+SetFspUpdDataPointer (

+  IN VOID    *UpdDataRgnPtr

+  );

+

+/**

+  This function gets the UPD data pointer.

+

+  @return UpdDataRgnPtr   UPD data pointer.

+**/

+VOID *

+EFIAPI

+GetFspUpdDataPointer (

+  VOID

+  );

+

+/**

+  Set FSP measurement point timestamp.

+

+  @param[in] Id       Measurement point ID.

+

+  @return performance timestamp.

+**/

+UINT64

+EFIAPI

+SetFspMeasurePoint (

+  IN UINT8  Id

+  );

+

+/**

+  This function gets the FSP info header pointer.

+

+  @retval FspInfoHeader   FSP info header pointer

+**/

+FSP_INFO_HEADER *

+EFIAPI

+GetFspInfoHeader (

+  VOID

+  );

+

+/**

+  This function gets FSP API calling mode.

+

+  @retval API calling mode

+**/

+UINT8

+EFIAPI

+GetFspApiCallingMode (

+  VOID

+  );

+

+/**

+  This function sets FSP API calling mode.

+

+  @param[in] Mode     API calling mode

+**/

+VOID

+EFIAPI

+SetFspApiCallingMode (

+  UINT8  Mode

+  );

+

+#endif

diff --git a/uefi/linaro-edk2/IntelFspPkg/Include/Library/FspPlatformLib.h b/uefi/linaro-edk2/IntelFspPkg/Include/Library/FspPlatformLib.h
new file mode 100644
index 0000000..51d2968
--- /dev/null
+++ b/uefi/linaro-edk2/IntelFspPkg/Include/Library/FspPlatformLib.h
@@ -0,0 +1,74 @@
+/** @file

+

+  Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>

+  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.

+

+**/

+

+#ifndef _FSP_PLATFORM_LIB_H_

+#define _FSP_PLATFORM_LIB_H_

+

+/**

+  Get system memory from HOB.

+

+  @param[in,out] LowMemoryLength   less than 4G memory length

+  @param[in,out] HighMemoryLength  greater than 4G memory length

+**/

+VOID

+EFIAPI

+FspGetSystemMemorySize (

+  IN OUT UINT64              *LowMemoryLength,

+  IN OUT UINT64              *HighMemoryLength

+  );

+

+/**

+  Migrate bootloader data before destroying CAR.

+

+**/

+VOID

+EFIAPI

+FspMigrateTemporaryMemory (

+  VOID

+  );

+

+/**

+  Set a new stack frame for the continuation function.

+

+**/

+VOID

+EFIAPI

+FspSetNewStackFrame (

+  VOID

+  );

+

+/**

+  This function transfer control to the ContinuationFunc passed in by the

+  bootloader.

+

+**/

+VOID

+EFIAPI

+FspInitDone (

+  VOID

+  );

+

+/**

+  This function handle NotifyPhase API call from the bootloader.

+  It gives control back to the bootloader after it is handled. If the

+  Notification code is a ReadyToBoot event, this function will return

+  and FSP continues the remaining execution until it reaches the DxeIpl.

+

+**/

+VOID

+EFIAPI

+FspWaitForNotify (

+  VOID

+  );

+

+#endif

diff --git a/uefi/linaro-edk2/IntelFspPkg/Include/Library/FspSwitchStackLib.h b/uefi/linaro-edk2/IntelFspPkg/Include/Library/FspSwitchStackLib.h
new file mode 100644
index 0000000..e90b13e
--- /dev/null
+++ b/uefi/linaro-edk2/IntelFspPkg/Include/Library/FspSwitchStackLib.h
@@ -0,0 +1,45 @@
+/** @file

+

+  Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>

+  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.

+

+**/

+

+#ifndef _FSP_SWITCH_STACK_LIB_H_

+#define _FSP_SWITCH_STACK_LIB_H_

+

+/**

+

+  This funciton will switch the current stack to the previous saved stack.

+  Before calling the previous stack has to be set in  FSP_GLOBAL_DATA.CoreStack.

+                    EIP

+                    FLAGS  16 bit  FLAGS  16 bit

+                    EDI

+                    ESI

+                    EBP

+                    ESP

+                    EBX

+                    EDX

+                    ECX

+                    EAX

+                    DWORD     IDT base1

+  StackPointer:     DWORD     IDT base2

+

+  @return ReturnKey          After switching to the saved stack,

+                             this value will be saved in eax before returning.

+

+

+**/

+UINT32

+EFIAPI

+Pei2LoaderSwitchStack (

+  VOID

+  );

+

+#endif