Platforms/HiKey960: enable gpio controller

Support gpio controller in HiKey960 platform.

Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
diff --git a/Platforms/Hisilicon/HiKey960/HiKey960GpioDxe/HiKey960GpioDxe.c b/Platforms/Hisilicon/HiKey960/HiKey960GpioDxe/HiKey960GpioDxe.c
new file mode 100644
index 0000000..7c61ff7
--- /dev/null
+++ b/Platforms/Hisilicon/HiKey960/HiKey960GpioDxe/HiKey960GpioDxe.c
@@ -0,0 +1,77 @@
+/** @file

+*

+*  Copyright (c) 2017, Linaro. 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/UefiBootServicesTableLib.h>

+

+#include <Protocol/EmbeddedGpio.h>

+

+GPIO_CONTROLLER gGpioDevice[]= {

+  { 0xe8a0b000, 0, 8 },    // GPIO0

+  { 0xe8a0c000, 8, 8 },    // GPIO1

+  { 0xe8a0d000, 16, 8 },   // GPIO2

+  { 0xe8a0e000, 24, 8 },   // GPIO3

+  { 0xe8a0f000, 32, 8 },   // GPIO4

+  { 0xe8a10000, 40, 8 },   // GPIO5

+  { 0xe8a11000, 48, 8 },   // GPIO6

+  { 0xe8a12000, 56, 8 },   // GPIO7

+  { 0xe8a13000, 64, 8 },   // GPIO8

+  { 0xe8a14000, 72, 8 },   // GPIO9

+  { 0xe8a15000, 80, 8 },   // GPIO10

+  { 0xe8a16000, 88, 8 },   // GPIO11

+  { 0xe8a17000, 96, 8 },   // GPIO12

+  { 0xe8a18000, 104, 8 },  // GPIO13

+  { 0xe8a19000, 112, 8 },  // GPIO14

+  { 0xe8a1a000, 120, 8 },  // GPIO15

+  { 0xe8a1b000, 128, 8 },  // GPIO16

+  { 0xe8a1c000, 136, 8 },  // GPIO17

+  { 0xff3b4000, 144, 8 },  // GPIO18

+  { 0xff3b5000, 152, 8 },  // GPIO19

+  { 0xe8a1f000, 160, 8 },  // GPIO20

+  { 0xe8a20000, 168, 8 },  // GPIO21

+  { 0xfff0b000, 176, 8 },  // GPIO22

+  { 0xfff0c000, 184, 8 },  // GPIO23

+  { 0xfff0d000, 192, 8 },  // GPIO24

+  { 0xfff0e000, 200, 8 },  // GPIO25

+  { 0xfff0f000, 208, 8 },  // GPIO26

+  { 0xfff10000, 216, 8 },  // GPIO27

+  { 0xfff1d000, 224, 8 },  // GPIO28

+};

+

+PLATFORM_GPIO_CONTROLLER gPlatformGpioDevice = {

+  232, 29, gGpioDevice

+};

+

+EFI_STATUS

+EFIAPI

+HiKey960GpioEntryPoint (

+  IN EFI_HANDLE         ImageHandle,

+  IN EFI_SYSTEM_TABLE   *SystemTable

+  )

+{

+  EFI_STATUS  Status;

+  EFI_HANDLE  Handle;

+

+  // Install the Embedded Platform GPIO Protocol onto a new handle

+  Handle = NULL;

+  Status = gBS->InstallMultipleProtocolInterfaces(

+                  &Handle,

+                  &gPlatformGpioProtocolGuid, &gPlatformGpioDevice,

+                  NULL

+                 );

+  if (EFI_ERROR(Status)) {

+    Status = EFI_OUT_OF_RESOURCES;

+  }

+

+  return Status;

+}

diff --git a/Platforms/Hisilicon/HiKey960/HiKey960GpioDxe/HiKey960GpioDxe.inf b/Platforms/Hisilicon/HiKey960/HiKey960GpioDxe/HiKey960GpioDxe.inf
new file mode 100644
index 0000000..9160afe
--- /dev/null
+++ b/Platforms/Hisilicon/HiKey960/HiKey960GpioDxe/HiKey960GpioDxe.inf
@@ -0,0 +1,37 @@
+#

+#  Copyright (c) 2017, Linaro. 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.

+#

+

+[Defines]

+  INF_VERSION                    = 0x00010019

+  BASE_NAME                      = HiKey960Gpio

+  FILE_GUID                      = 6aa12592-7e36-4aec-acf8-2ac2fd13815c

+  MODULE_TYPE                    = DXE_DRIVER

+  VERSION_STRING                 = 1.0

+  ENTRY_POINT                    = HiKey960GpioEntryPoint

+

+[Sources.common]

+  HiKey960GpioDxe.c

+

+[Packages]

+  EmbeddedPkg/EmbeddedPkg.dec

+  MdePkg/MdePkg.dec

+  OpenPlatformPkg/Platforms/Hisilicon/HiKey960/HiKey960.dec

+

+[LibraryClasses]

+  DebugLib

+  UefiDriverEntryPoint

+

+[Protocols]

+  gPlatformGpioProtocolGuid

+

+[Depex]

+  TRUE