linaro-vendor-package: Add hikey960/hikey binary objects

Add bootloader objects and mali libraries and TI firmware
for both hikey and hikey960 to the linaro-vendor-package.

Signed-off-by: John Stultz <john.stultz@linaro.org>
diff --git a/generate_vendor_package.sh b/generate_vendor_package.sh
index 7cad923..6cc9266 100755
--- a/generate_vendor_package.sh
+++ b/generate_vendor_package.sh
@@ -11,7 +11,7 @@
 TARGET_DIR=out/vendor/linaro/
 
 
-DEV_TARGETS="db845c rb5 linux-firmware"
+DEV_TARGETS="db845c rb5 linux-firmware hikey960"
 
 for DEV in $DEV_TARGETS; do
   DEV_TARGET_DIR=$TARGET_DIR/$DEV/$VER
diff --git a/src/hikey960/bootloader/README b/src/hikey960/bootloader/README
new file mode 100644
index 0000000..22dea18
--- /dev/null
+++ b/src/hikey960/bootloader/README
@@ -0,0 +1,53 @@
+These instructions will help you in flashing the prebuilt bootloader
+images and AOSP images (built from sources) on hikey960.
+
+There are two versions of HiKey960: v1 and v2.
+* v1 is using Jumper (J2001)
+* v2 is using DIP switch (SW2201).
+Both are located at the bottom side of the board.
+
+Jumper Pin 1-2 = DIP switch 1 (AutoBoot)
+Jumper Pin 3-4 = DIP switch 2 (Recovery Mode)
+JUmper Pin 5-6 = DIP switch 3 (Fastboot Mode)
+
+* Always power off the board before changing the switches or
+  jumpers.
+* To boot into fastboot mode set switch 1 & 3 to ON state and
+  switch 2 to OFF state.
+* To boot into normal mode set switch 1 to ON and switch 2 & 3 to
+  OFF state.
+
+To flash the OS to the board, set the jumpers to fastboot mode, and
+power on the device. Connect a USB-C cable to the OTG port and your
+host device.
+
+On your host device, run the flash-all.sh script to update boot files
+using fastboot. It assumes that you have already build hikey960 AOSP
+images locally, or are flashing a factory image.
+$ ./flash-all.sh
+
+After that completes, power the board off, and set the switches back
+to normal mode and boot the device.
+
+Known Issues:
+-------------
+When flashing ontop of the HiSi bootloader, you may see the following
+failure:
+  sending 'xloader' (151 KB)...
+  OKAY [  0.006s]
+  writing 'xloader'...
+  FAILED (remote: flash write back vrl failure)
+
+This is a transient error and can be ignored.
+
+
+Trouble shooting:
+-----------------
+If you have any trouble booting the device after running ./flash-all.sh
+you may need to do a board recovery. This is hopefully uncommon, but
+may be necessary in some cases (like if your board has pre-release
+firmware on it). In this case clone the git project here:
+  https://github.com/96boards-hikey/tools-images-hikey960/
+
+And follow the instructions in the README.md
+  https://github.com/96boards-hikey/tools-images-hikey960/blob/master/README.md
diff --git a/src/hikey960/bootloader/fip.bin b/src/hikey960/bootloader/fip.bin
new file mode 100644
index 0000000..dcf61e2
--- /dev/null
+++ b/src/hikey960/bootloader/fip.bin
Binary files differ
diff --git a/src/hikey960/bootloader/flash-all.sh b/src/hikey960/bootloader/flash-all.sh
new file mode 100755
index 0000000..70bb432
--- /dev/null
+++ b/src/hikey960/bootloader/flash-all.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+
+INSTALLER_DIR="`dirname ${0}`"
+ECHO_PREFIX="=== "
+
+# for cases that don't run "lunch hikey960-userdebug"
+if [ -z "${ANDROID_BUILD_TOP}" ]; then
+    ANDROID_BUILD_TOP=${INSTALLER_DIR}/../../../../../
+    ANDROID_PRODUCT_OUT="${ANDROID_BUILD_TOP}/out/target/product/hikey960"
+fi
+
+if [ ! -d "${ANDROID_PRODUCT_OUT}" ]; then
+    echo ${ECHO_PREFIX}"error in locating out directory, check if it exist"
+    exit
+fi
+
+echo ${ECHO_PREFIX}"android out dir:${ANDROID_PRODUCT_OUT}"
+
+function check_partition_table_version () {
+	fastboot erase reserved
+	if [ $? -eq 0 ]
+	then
+		IS_PTABLE_1MB_ALIGNED=true
+	else
+		IS_PTABLE_1MB_ALIGNED=false
+	fi
+}
+
+function flashing_atf_uefi () {
+	fastboot flash ptable "${INSTALLER_DIR}"/prm_ptable.img
+	fastboot flash xloader "${INSTALLER_DIR}"/hisi-sec_xloader.img
+	fastboot reboot-bootloader
+
+	fastboot flash fastboot "${INSTALLER_DIR}"/l-loader.bin
+	fastboot flash fip "${INSTALLER_DIR}"/fip.bin
+	fastboot flash nvme "${INSTALLER_DIR}"/hisi-nvme.img
+	fastboot flash fw_lpm3   "${INSTALLER_DIR}"/hisi-lpm3.img
+	fastboot flash trustfirmware   "${INSTALLER_DIR}"/hisi-bl31.bin
+	fastboot reboot-bootloader
+
+	fastboot flash ptable "${INSTALLER_DIR}"/prm_ptable.img
+	fastboot flash xloader "${INSTALLER_DIR}"/hisi-sec_xloader.img
+	fastboot flash fastboot "${INSTALLER_DIR}"/l-loader.bin
+	fastboot flash fip "${INSTALLER_DIR}"/fip.bin
+
+	fastboot flash boot "${ANDROID_PRODUCT_OUT}"/boot.img
+	fastboot flash super "${ANDROID_PRODUCT_OUT}"/super.img
+	fastboot flash userdata "${ANDROID_PRODUCT_OUT}"/userdata.img
+	fastboot format cache
+}
+
+function upgrading_ptable_1mb_aligned () {
+	fastboot flash xloader "${INSTALLER_DIR}"/hisi-sec_xloader.img
+	fastboot flash ptable "${INSTALLER_DIR}"/hisi-ptable.img
+	fastboot flash fastboot "${INSTALLER_DIR}"/hisi-fastboot.img
+	fastboot reboot-bootloader
+}
+
+echo ${ECHO_PREFIX}"Checking partition table version..."
+check_partition_table_version
+
+if [ "${IS_PTABLE_1MB_ALIGNED}" == "true" ]
+then
+	echo ${ECHO_PREFIX}"Partition table is 1MB aligned. Flashing ATF/UEFI..."
+	flashing_atf_uefi
+else
+	echo ${ECHO_PREFIX}"Partition table is 512KB aligned."
+	echo ${ECHO_PREFIX}"Upgrading to 1MB aligned version..."
+	upgrading_ptable_1mb_aligned
+	echo ${ECHO_PREFIX}"Flashing ATF/UEFI..."
+	flashing_atf_uefi
+	echo ${ECHO_PREFIX}"Done"
+fi
+
+fastboot reboot
diff --git a/src/hikey960/bootloader/hisi-bl31.bin b/src/hikey960/bootloader/hisi-bl31.bin
new file mode 100644
index 0000000..abebea6
--- /dev/null
+++ b/src/hikey960/bootloader/hisi-bl31.bin
Binary files differ
diff --git a/src/hikey960/bootloader/hisi-fastboot.img b/src/hikey960/bootloader/hisi-fastboot.img
new file mode 100644
index 0000000..72cbf90
--- /dev/null
+++ b/src/hikey960/bootloader/hisi-fastboot.img
Binary files differ
diff --git a/src/hikey960/bootloader/hisi-lpm3.img b/src/hikey960/bootloader/hisi-lpm3.img
new file mode 100644
index 0000000..bd0243b
--- /dev/null
+++ b/src/hikey960/bootloader/hisi-lpm3.img
Binary files differ
diff --git a/src/hikey960/bootloader/hisi-nvme.img b/src/hikey960/bootloader/hisi-nvme.img
new file mode 100644
index 0000000..ca5bc7c
--- /dev/null
+++ b/src/hikey960/bootloader/hisi-nvme.img
Binary files differ
diff --git a/src/hikey960/bootloader/hisi-ptable.img b/src/hikey960/bootloader/hisi-ptable.img
new file mode 100644
index 0000000..269aa63
--- /dev/null
+++ b/src/hikey960/bootloader/hisi-ptable.img
Binary files differ
diff --git a/src/hikey960/bootloader/hisi-sec_xloader.img b/src/hikey960/bootloader/hisi-sec_xloader.img
new file mode 100644
index 0000000..47c353b
--- /dev/null
+++ b/src/hikey960/bootloader/hisi-sec_xloader.img
Binary files differ
diff --git a/src/hikey960/bootloader/l-loader.bin b/src/hikey960/bootloader/l-loader.bin
new file mode 100644
index 0000000..e0c3726
--- /dev/null
+++ b/src/hikey960/bootloader/l-loader.bin
Binary files differ
diff --git a/src/hikey960/bootloader/legacy-flash-all.sh b/src/hikey960/bootloader/legacy-flash-all.sh
new file mode 100755
index 0000000..3f8bf9b
--- /dev/null
+++ b/src/hikey960/bootloader/legacy-flash-all.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+INSTALLER_DIR="`dirname ${0}`"
+
+# for cases that don't run "lunch hikey960-userdebug"
+if [ -z "${ANDROID_BUILD_TOP}" ]; then
+    ANDROID_BUILD_TOP=${INSTALLER_DIR}/../../../../../
+    ANDROID_PRODUCT_OUT="${ANDROID_BUILD_TOP}/out/target/product/hikey960"
+fi
+
+if [ ! -d "${ANDROID_PRODUCT_OUT}" ]; then
+    echo "error in locating out directory, check if it exist"
+    exit
+fi
+
+echo "android out dir:${ANDROID_PRODUCT_OUT}"
+
+fastboot flash xloader "${INSTALLER_DIR}"/hisi-sec_xloader.img
+fastboot flash ptable "${INSTALLER_DIR}"/hisi-ptable.img
+fastboot flash fastboot "${INSTALLER_DIR}"/hisi-fastboot.img
+fastboot reboot-bootloader
+fastboot flash nvme "${INSTALLER_DIR}"/hisi-nvme.img
+fastboot flash fw_lpm3   "${INSTALLER_DIR}"/hisi-lpm3.img
+fastboot flash trustfirmware   "${INSTALLER_DIR}"/hisi-bl31.bin
+fastboot flash boot "${ANDROID_PRODUCT_OUT}"/boot.img
+fastboot flash dts "${ANDROID_PRODUCT_OUT}"/dt.img
+fastboot flash super "${ANDROID_PRODUCT_OUT}"/super.img
+fastboot flash userdata "${ANDROID_PRODUCT_OUT}"/userdata.img
+fastboot format:ext4:10000000 cache
+fastboot reboot
diff --git a/src/hikey960/bootloader/mkdtimg b/src/hikey960/bootloader/mkdtimg
new file mode 100755
index 0000000..6572204
--- /dev/null
+++ b/src/hikey960/bootloader/mkdtimg
@@ -0,0 +1,159 @@
+#!/usr/bin/env python
+# Copyright 2017, The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+from __future__ import print_function
+try:
+	from os import fstat, stat, remove
+	from sys import exit
+	from argparse import ArgumentParser, FileType
+	from ctypes import sizeof, Structure, c_char, c_int
+	from struct import pack, calcsize
+	import zlib
+except Exception as e:
+	print("some module is needed:" + str(e))
+	exit(-1)
+
+dt_head_info_fmt = '4sII'
+dt_entry_fmt = 'Q4I2Q'
+dtimg_version = 1
+dtb_count = 1
+
+def write32(output, value):
+	output.write(chr(value & 255)) ; value=value // 256
+	output.write(chr(value & 255)) ; value=value // 256
+	output.write(chr(value & 255)) ; value=value // 256
+	output.write(chr(value & 255))
+
+def compress(filename, input, output):
+	output.write('\037\213\010')
+	output.write(chr(0))
+
+	statval = stat(filename)
+	write32(output, 0)
+	output.write('\002')
+	output.write('\003')
+
+	crcval = zlib.crc32("")
+	compobj = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS,
+		zlib.DEF_MEM_LEVEL, 0)
+	while True:
+		data = input.read(1024)
+		if data == "":
+			break
+		crcval = zlib.crc32(data, crcval)
+		output.write(compobj.compress(data))
+	output.write(compobj.flush())
+	write32(output, crcval)
+	write32(output, statval.st_size)
+
+def dtb_compress(dtb_file):
+	try:
+		outputname = dtb_file + '.gz'
+		input = open(dtb_file, 'rb')
+		output = open(outputname, 'wb')
+		compress(dtb_file, input, output)
+		input.close()
+		output.close()
+	except Exception as e:
+		print('dtb_compress error:' + str(e))
+		exit(-1)
+	return outputname
+
+class dt_head_info(Structure):
+	_fields_ = [('magic', c_char * 4),
+		    ('version', c_int),
+		    ('dt_count', c_int)]
+
+class dt_entry_t(Structure):
+	_fields_ = [('dtb_size', c_int),
+		    ('dtb_offset', c_int)]
+
+def align_page_size(offset, pagesize):
+	return (pagesize - (offset % pagesize))
+
+def write_head_info(head_info, args):
+	args.output.write(pack(dt_head_info_fmt,
+			       head_info.magic,
+			       head_info.version,
+			       head_info.dt_count))
+
+def write_dtb_entry_t(dt_entry, args):
+	args.output.write(pack(dt_entry_fmt,
+			       0,  # reserved
+			       dt_entry.dtb_size,
+			       0,  # reserved
+			       dt_entry.dtb_offset,
+			       0,  # reserved
+			       0,  # reserved
+			       0)) # reserved
+
+def write_padding(args, padding):
+	for i in range(0, padding):
+		args.output.write('\x00')
+
+def write_dtb(args):
+	dtb_file = args.dtb
+	out_dtb = dtb_file
+	if args.compress == True:
+		out_dtb = dtb_compress(dtb_file)
+	try:
+		dtb_offset = calcsize(dt_head_info_fmt) + \
+				      calcsize(dt_entry_fmt) + \
+				      4
+		padding = align_page_size(dtb_offset, args.pagesize)
+		dtb_size = stat(out_dtb).st_size
+		dtb_size_padding = align_page_size(dtb_size, args.pagesize)
+		dt_entry = dt_entry_t(dtb_size + dtb_size_padding,
+				      dtb_offset + padding)
+		write_dtb_entry_t(dt_entry, args)
+		args.output.write(pack('I', 0)) # SUCCESS code number
+		write_padding(args, padding)
+		with open(out_dtb, 'rb') as dtb_fd:
+			args.output.write(dtb_fd.read(dtb_size))
+			write_padding(args, dtb_size_padding)
+	except Exception as e:
+		print('write dtb error:' + str(e))
+		exit(-1)
+
+def clean_gz_file(args):
+	try:
+		if args.compress != True:
+			return
+		remove(args.dtb + '.gz')
+	except Exception as e:
+		print('clean gz file error:' + str(e))
+		exit(-1)
+
+def parse_cmdline():
+	parser = ArgumentParser()
+	parser.add_argument('-c', '--compress', help='compress dtb or not',
+			    action='store_true')
+	parser.add_argument('-d', '--dtb', help='path to the dtb', type=str,
+			    required=True)
+	parser.add_argument('-s', '--pagesize', help='align page size',
+			    type=int, choices=[2**i for i in range(11,15)],
+			    default=2048)
+	parser.add_argument('-o', '--output', help='output file name',
+			    type=FileType('wb'), required=True)
+	return parser.parse_args()
+
+def main():
+	args = parse_cmdline()
+	dtimg_head_info = dt_head_info('HSDT', dtimg_version, dtb_count)
+	write_head_info(dtimg_head_info, args)
+	write_dtb(args)
+	clean_gz_file(args)
+
+if __name__ == '__main__':
+	main()
diff --git a/src/hikey960/bootloader/prm_ptable.img b/src/hikey960/bootloader/prm_ptable.img
new file mode 100644
index 0000000..e7b9b03
--- /dev/null
+++ b/src/hikey960/bootloader/prm_ptable.img
Binary files differ
diff --git a/src/hikey960/bootloader/uefi-flash-all.sh b/src/hikey960/bootloader/uefi-flash-all.sh
new file mode 100755
index 0000000..347b5b2
--- /dev/null
+++ b/src/hikey960/bootloader/uefi-flash-all.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+INSTALLER_DIR="`dirname ${0}`"
+${INSTALLER_DIR}/flash-all.sh
diff --git a/src/hikey960/bt-wifi-firmware-util/NOTICE b/src/hikey960/bt-wifi-firmware-util/NOTICE
new file mode 100644
index 0000000..e5bdc11
--- /dev/null
+++ b/src/hikey960/bt-wifi-firmware-util/NOTICE
@@ -0,0 +1,72 @@
+TEXAS INSTRUMENTS TEXT FILE LICENSE
+
+
+Copyright (c) 2008 - 2013 Texas Instruments Incorporated
+
+All rights reserved not granted herein.
+
+Limited License.
+
+If you download and use any version of this software from www.github.com, you
+acknowledge and agree that the terms and conditions of this license control and any
+previous licenses under which this software may have been provided on www.github.com
+are superseded and replaced by the terms and conditions of this license.
+
+Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
+license under copyrights and patents it now or hereafter owns or controls to make,
+have made, use, import, offer to sell and sell ("Utilize") this software subject
+to the terms herein.  With respect to the foregoing patent license, such license
+is granted solely to the extent that any such patent is necessary to Utilize the
+software alone.  The patent license shall not apply to any combinations which
+include this software, other than combinations with devices manufactured by or
+for TI ("TI Devices").  No hardware patent is licensed hereunder.
+
+Redistributions must preserve existing copyright notices and reproduce this license
+(including the above copyright notice and the disclaimer and (if applicable) source
+code license limitations below) in the documentation and/or other materials provided
+with the distribution
+
+Redistribution and use in binary form, without modification, are permitted provided
+that the following conditions are met:
+
+*   No reverse engineering, decompilation, or disassembly of this software is permitted
+    with respect to any software provided in binary form.
+
+*   any redistribution and use are licensed by TI for use only with TI Devices.
+
+*   Nothing shall obligate TI to provide you with source code for the software
+    licensed and provided to you in object code.
+
+If software source code is provided to you, modification and redistribution of the
+source code are permitted provided that the following conditions are met:
+
+*   any redistribution and use of the source code, including any resulting
+    derivative works, are licensed by TI for use only with TI Devices.
+
+*   any redistribution and use of any object code compiled from the source
+    code and any resulting derivative works, are licensed by TI for use only
+    with TI Devices.
+
+Neither the name of Texas Instruments Incorporated nor the names of its suppliers
+may be used to endorse or promote products derived from this software without specific
+prior written permission.
+
+DISCLAIMER.
+
+THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+BY UTILIZING THIS SOFTWARE TO ENABLE ANT CODE EMBEDDED ON TI DEVICES, YOU
+AGREE THAT NOTHING IN THIS LICENSE GIVES RISE TO ANY WARRANTY OR OTHER
+OBLIGATIONS BY TI OR ITS LICENSORS WITH RESPECT TO THE ANT CODE EMBEDDED
+ON TI DEVICES AND ENABLED BY THE SOFTWARE UNDER THIS LICENSE.  FURTHER, YOU
+AGREE THAT NOTHING IN THIS LICENSE GIVES RISE TO ANY RIGHT TO REVERSE ENGINEER,
+DECOMPILE OR DISASSEMBLE THE ANT CODE EMBEDDED ON THE TI DEVICES.
diff --git a/src/hikey960/bt-wifi-firmware-util/TIInit_11.8.32-pcm-960.bts b/src/hikey960/bt-wifi-firmware-util/TIInit_11.8.32-pcm-960.bts
new file mode 100644
index 0000000..ff56d1c
--- /dev/null
+++ b/src/hikey960/bt-wifi-firmware-util/TIInit_11.8.32-pcm-960.bts
Binary files differ
diff --git a/src/hikey960/bt-wifi-firmware-util/TIInit_11.8.32.bts b/src/hikey960/bt-wifi-firmware-util/TIInit_11.8.32.bts
new file mode 100755
index 0000000..824ca0f
--- /dev/null
+++ b/src/hikey960/bt-wifi-firmware-util/TIInit_11.8.32.bts
Binary files differ
diff --git a/src/hikey960/bt-wifi-firmware-util/wl18xx-conf-wl1837mod.bin b/src/hikey960/bt-wifi-firmware-util/wl18xx-conf-wl1837mod.bin
new file mode 100644
index 0000000..5dd913c
--- /dev/null
+++ b/src/hikey960/bt-wifi-firmware-util/wl18xx-conf-wl1837mod.bin
Binary files differ
diff --git a/src/hikey960/bt-wifi-firmware-util/wl18xx-conf.bin b/src/hikey960/bt-wifi-firmware-util/wl18xx-conf.bin
new file mode 100644
index 0000000..2bd0f4d
--- /dev/null
+++ b/src/hikey960/bt-wifi-firmware-util/wl18xx-conf.bin
Binary files differ
diff --git a/src/hikey960/bt-wifi-firmware-util/wl18xx-fw-4.bin b/src/hikey960/bt-wifi-firmware-util/wl18xx-fw-4.bin
new file mode 100755
index 0000000..71c160a
--- /dev/null
+++ b/src/hikey960/bt-wifi-firmware-util/wl18xx-fw-4.bin
Binary files differ
diff --git a/src/hikey960/hikey.mk b/src/hikey960/hikey.mk
new file mode 100644
index 0000000..cffd3fd
--- /dev/null
+++ b/src/hikey960/hikey.mk
@@ -0,0 +1,10 @@
+FIRMWARE_VENDOR_PATH := $(LINARO_VENDOR_PATH)/hikey960/$(EXPECTED_LINARO_VENDOR_VERSION)
+
+# Copy BT firmware
+PRODUCT_COPY_FILES += \
+        $(FIRMWARE_VENDOR_PATH)/bt-wifi-firmware-util/TIInit_11.8.32.bts:$(TARGET_COPY_OUT_VENDOR)/firmware/ti-connectivity/TIInit_11.8.32.bts
+
+# Copy wlan firmware
+PRODUCT_COPY_FILES += \
+        $(FIRMWARE_VENDOR_PATH)/bt-wifi-firmware-util/wl18xx-fw-4.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/ti-connectivity/wl18xx-fw-4.bin \
+        $(FIRMWARE_VENDOR_PATH)/bt-wifi-firmware-util/wl18xx-conf.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/ti-connectivity/wl18xx-conf.bin
diff --git a/src/hikey960/hikey960.mk b/src/hikey960/hikey960.mk
new file mode 100644
index 0000000..d370aa5
--- /dev/null
+++ b/src/hikey960/hikey960.mk
@@ -0,0 +1,13 @@
+FIRMWARE_VENDOR_PATH := $(LINARO_VENDOR_PATH)/hikey960/$(EXPECTED_LINARO_VENDOR_VERSION)
+
+
+# Copy BT firmware
+PRODUCT_COPY_FILES += \
+        $(FIRMWARE_VENDOR_PATH)/bt-wifi-firmware-util/TIInit_11.8.32-pcm-960.bts:$(TARGET_COPY_OUT_VENDOR)/firmware/ti-connectivity/TIInit_11.8.32.bts
+
+# Copy wlan firmware
+PRODUCT_COPY_FILES += \
+        $(FIRMWARE_VENDOR_PATH)/bt-wifi-firmware-util/wl18xx-fw-4.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/ti-connectivity/wl18xx-fw-4.bin \
+        $(FIRMWARE_VENDOR_PATH)/bt-wifi-firmware-util/wl18xx-conf-wl1837mod.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/ti-connectivity/wl18xx-conf.bin
+
+
diff --git a/src/hikey960/mali/Android.mk b/src/hikey960/mali/Android.mk
new file mode 100644
index 0000000..4060483
--- /dev/null
+++ b/src/hikey960/mali/Android.mk
@@ -0,0 +1,31 @@
+#
+# Copyright (C) 2015 The Android Open-Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# WARNING: Everything listed here will be built on ALL platforms,
+# including x86, the emulator, and the SDK.  Modules must be uniquely
+# named (liblights.panda), and must build everywhere, or limit themselves
+# to only building on ARM if they include assembly. Individual makefiles
+# are responsible for having their own logic, for fine-grained control.
+
+ifneq ($(filter hikey%, $(TARGET_DEVICE)),)
+
+LOCAL_PATH := $(call my-dir)
+
+# if some modules are built directly from this directory (not subdirectories),
+# their rules should be written here.
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
+endif
diff --git a/src/hikey960/mali/bifrost/Android.bp b/src/hikey960/mali/bifrost/Android.bp
new file mode 100644
index 0000000..b66541e
--- /dev/null
+++ b/src/hikey960/mali/bifrost/Android.bp
@@ -0,0 +1,136 @@
+// ANDROIDMK TRANSLATION ERROR: unsupported conditional
+// ifneq ($(filter hikey960, $(TARGET_DEVICE)),)
+
+soong_namespace {}
+
+cc_prebuilt_library_shared {
+    name: "libGLES_mali",
+    notice: "END_USER_LICENCE_AGREEMENT.txt",
+    strip: {
+        none: true,
+    },
+    arch: {
+        arm: {
+            srcs: ["lib/egl/libGLES_mali.so"],
+        },
+        arm64: {
+            srcs: ["lib64/egl/libGLES_mali.so"],
+        },
+    },
+    vendor: true,
+    relative_install_path: "egl",
+
+    compile_multilib: "both",
+    shared_libs: [
+        "android.hardware.graphics.common@1.0",
+        "libz",
+        "libnativewindow",
+        "libc++",
+        "liblog",
+        "libm",
+        "libc",
+        "libdl",
+    ],
+}
+
+cc_prebuilt_library_shared {
+    name: "libbccArm",
+    notice: "END_USER_LICENCE_AGREEMENT.txt",
+    strip: {
+        none: true,
+    },
+    arch: {
+        arm64: {
+            srcs: ["lib64/libbccArm.so"],
+        },
+    },
+    vendor: true,
+    compile_multilib: "64",
+    // Bypass prebuilt ELF check because libLLVM is not a module (it is copied by
+    // PRODUCT_COPY_FILES instead).
+    check_elf_files: false,
+}
+
+cc_prebuilt_library_shared {
+    name: "libRSDriverArm",
+    notice: "END_USER_LICENCE_AGREEMENT.txt",
+    strip: {
+        none: true,
+    },
+    arch: {
+        arm: {
+            srcs: ["lib/libRSDriverArm.so"],
+        },
+        arm64: {
+            srcs: ["lib64/libRSDriverArm.so"],
+        },
+    },
+    vendor: true,
+    compile_multilib: "both",
+    shared_libs: [
+        "libRS_internal",
+        "libRSCpuRef",
+        "liblog",
+        "libnativewindow",
+        "libbcinfo",
+        "libdl",
+        "libc++",
+        "libc",
+        "libm",
+    ],
+}
+
+cc_prebuilt_library_shared {
+    name: "libmalicore.bc",
+    notice: "END_USER_LICENCE_AGREEMENT.txt",
+
+    strip: {
+        none: true,
+    },
+    arch: {
+        arm: {
+            srcs: ["lib/libmalicore.bc"],
+        },
+        arm64: {
+            srcs: ["lib64/libmalicore.bc"],
+        },
+    },
+   vendor: true,
+   compile_multilib: "both",
+}
+
+cc_prebuilt_library_shared {
+    name: "vulkan.hikey960",
+    notice: "END_USER_LICENCE_AGREEMENT.txt",
+
+    strip: {
+        none: true,
+    },
+    arch: {
+        arm: {
+            srcs: ["lib/hw/vulkan.hikey960.so"],
+        },
+        arm64: {
+            srcs: ["lib64/hw/vulkan.hikey960.so"],
+        },
+    },
+    vendor: true,
+    relative_install_path: "hw",
+    compile_multilib: "both",
+    shared_libs: [
+        "android.hardware.graphics.common@1.0",
+        "libz",
+        "libnativewindow",
+        "libc++",
+        "liblog",
+        "libm",
+        "libc",
+        "libdl",
+    ],
+    // Bypass prebuilt ELF check because the DT_SONAME "libGLES_mali.so" is
+    // different from LOCAL_MODULE "vulkan.hikey960.so".
+    check_elf_files: false,
+}
+
+// ANDROIDMK TRANSLATION ERROR: endif from unsupported conditional
+// endif
diff --git a/src/hikey960/mali/bifrost/END_USER_LICENCE_AGREEMENT.txt b/src/hikey960/mali/bifrost/END_USER_LICENCE_AGREEMENT.txt
new file mode 100644
index 0000000..34da5f8
--- /dev/null
+++ b/src/hikey960/mali/bifrost/END_USER_LICENCE_AGREEMENT.txt
@@ -0,0 +1,194 @@
+LES-PRE-20769

+SP-Version: 1.0

+25 November 2015

+

+END USER LICENCE AGREEMENT FOR THE MALI USERSPACE DRIVER ("Mali DRIVER")

+

+THIS END USER LICENCE AGREEMENT ("LICENCE") IS A LEGAL AGREEMENT

+BETWEEN YOU (EITHER A SINGLE INDIVIDUAL, OR SINGLE LEGAL ENTITY) AND

+ARM LIMITED ("ARM") FOR THE USE OF THE SOFTWARE ACCOMPANYING THIS

+LICENCE. ARM IS ONLY WILLING TO LICENSE THE SOFTWARE TO YOU ON

+CONDITION THAT YOU ACCEPT ALL OF THE TERMS IN THIS LICENCE. BY

+INSTALLING OR OTHERWISE USING OR COPYING THE SOFTWARE YOU INDICATE

+THAT YOU AGREE TO BE BOUND BY ALL OF THE TERMS OF THIS LICENCE. IF YOU

+DO NOT AGREE TO THE TERMS OF THIS LICENCE, ARM IS UNWILLING TO LICENSE

+THE SOFTWARE TO YOU AND YOU MAY NOT INSTALL, USE OR COPY THE SOFTWARE,

+AND YOU SHOULD PROMPTLY RETURN THE SOFTWARE TO YOUR SUPPLIER.

+

+"Applications" means applications for use solely in conjunction with

+Mali-based products manufactured under licence from ARM.

+

+"Output" means data resulting from your use of the Software and all

+direct and indirect derivatives thereof.

+

+"Software" means any software, firmware and data accompanying this

+Licence, any printed, electronic or online documentation supplied with

+it under the terms of this Licence for the Mali Driver.

+

+1. LICENCE GRANTS TO YOU.

+

+1.1 ARM hereby grants to you, subject to the terms and conditions of

+this Licence, a non-exclusive, non-transferable, revocable, worldwide

+licence to:

+

+(i)	use and copy the Software or certain components or optional

+	functionality in the Software, as applicable, solely for the

+	purposes of running, designing or developing Applications; and

+

+(ii)	subject to Clause 1.2, distribute the whole of the Software;

+	and/or (b) the whole or any part of the Software together

+	with, or as incorporated into, Applications; and

+

+1.2 If you choose to redistribute the whole or any part of the

+Software pursuant to the licences granted in Clause 1.1(ii), you

+agree: (i) not to use ARM's or any of its licensors names, logos or

+trademarks to market Applications; (ii) to retain any and all

+copyright notices and other notices (whether ARM's or its licensor's)

+which are included with the Software; and (iii) include a copy of this

+Licence with such redistribution.

+

+2. RESTRICTIONS ON USE OF THE SOFTWARE.

+

+BENCHMARKING: This Licence does not prevent you from using the

+Software for benchmarking purposes. However, you shall ensure that any

+and all benchmarking data relating to the Software, and any other

+results of your use or testing of the Software which are indicative of

+its performance, efficacy, reliability or quality, shall not be used

+to disparage ARM, its products or services, or in a manner that, in

+ARM's reasonable judgment, may diminish or otherwise damage the

+reputation of ARM.

+

+COPYRIGHT AND RESERVATION OF RIGHTS: The Software is owned by ARM or

+its licensors and is protected by copyright and other intellectual

+property laws and international treaties. The Software is licensed not

+sold. You acquire no rights to the Software other than as expressly

+provided by this Licence. You shall not remove from the Software any

+copyright notice or other notice and shall ensure that any such notice

+is reproduced in any copies of the whole or any part of the Software

+made by you or other permitted users.

+

+REVERSE ENGINEERING: Except to the extent that such activity is

+permitted by applicable law you shall not reverse engineer, decompile

+or disassemble any of the Software. If the Software was provided to

+you in Europe you shall not reverse engineer, decompile or disassemble

+any of the Software for the purposes of error correction.

+

+RESTRICTED USE: You agree that you shall not use the Software or the

+Output other than pursuant to and in accordance with the exercise of

+any of the licences granted under this Licence. Without limiting the

+generality of the foregoing, you shall not use the Software or any

+Output: (a) for determining if any features, functions or processes

+provided by the Software are covered by any patents or patent

+applications owned by you or a third party; or (b) for developing

+technology, applications or products which avoid any of ARM's

+intellectual property in the Software licensed hereunder; or (c) as a

+reference for modifying existing patents or patent applications or

+creating any continuation, continuation in part, or extension of

+existing patents or patent applications.

+

+3. SUPPORT.

+

+ARM is not under an obligation to provide support, but it may do so at

+its own discretion, and if it does, it will only be in respect of the

+Software as delivered.

+

+4. NO WARRANTIES.

+

+YOU AGREE THAT THE SOFTWARE IS LICENSED "AS IS", AND THAT ARM

+EXPRESSLY DISCLAIMS ALL REPRESENTATIONS, WARRANTIES, CONDITIONS OR

+OTHER TERMS, EXPRESS OR IMPLIED OR STATUTORY, INCLUDING WITHOUT

+LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, SATISFACTORY

+QUALITY, AND FITNESS FOR A PARTICULAR PURPOSE.

+

+YOU EXPRESSLY ASSUME ALL LIABILITIES AND RISKS, FOR USE OR OPERATION

+OF APPLICATIONS, INCLUDING WITHOUT LIMITATION, APPLICATIONS DESIGNED

+OR INTENDED FOR MISSION CRITICAL APPLICATIONS, SUCH AS PACEMAKERS,

+WEAPONRY, AIRCRAFT NAVIGATION, FACTORY CONTROL SYSTEMS, ETC. SHOULD

+THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE ENTIRE COST OF ALL

+NECESSARY SERVICING, REPAIR OR CORRECTION.

+

+5. LIMITATION OF LIABILITY.

+

+TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL

+ARM BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL

+DAMAGES (INCLUDING LOSS OF PROFITS) ARISING OUT OF THE USE OR

+INABILITY TO USE THE SOFTWARE WHETHER BASED ON A CLAIM UNDER CONTRACT,

+TORT OR OTHER LEGAL THEORY, EVEN IF ARM WAS ADVISED OF THE POSSIBILITY

+OF SUCH DAMAGES.

+

+ARM does not seek to limit or exclude liability for death or personal

+injury arising from ARM's negligence or ARM's fraud and because some

+jurisdictions do not permit the exclusion or limitation of liability

+for consequential or incidental damages the above limitation relating

+to liability for consequential damages may not apply to you.

+

+NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED IN THIS LICENCE,

+THE MAXIMUM LIABILITY OF ARM TO YOU IN AGGREGATE FOR ALL CLAIMS MADE

+AGAINST ARM IN CONTRACT TORT OR OTHERWISE UNDER OR IN CONNECTION WITH

+THE SUBJECT MATTER OF THIS LICENCE SHALL NOT EXCEED THE GREATER OF:

+(I) THE TOTAL OF SUMS PAID BY YOU TO ARM (IF ANY) FOR THIS LICENCE;

+AND (II) $10.00 USD. THE EXISTENCE OF MORE THAN ONE CLAIM WILL NOT

+ENLARGE OR EXTEND THE LIMIT.

+

+6. U.S. GOVERNMENT END USERS.

+

+US Government Restrictions: Use, duplication, reproduction, release,

+modification, disclosure or transfer of the Software is restricted in

+accordance with the terms of this Licence.

+

+7. TERM AND TERMINATION.

+

+This Licence shall remain in force until terminated by you or by ARM.

+Without prejudice to any of its other rights if you are in breach of

+any of the terms and conditions of this Licence then ARM may terminate

+this Licence immediately upon giving written notice to you or on

+thirty (30) days written notice without cause. You may terminate this

+Licence at any time. Upon termination of this Licence by you or by ARM

+, you shall stop using the Software and destroy all copies of the

+Software in your possession, together with all documentation and

+related materials. The provisions of clauses 2, 3, 4, 5, 6, 7, and 8

+shall survive termination of this Licence.

+

+8. GENERAL.

+

+This Licence is governed by English Law. Except where ARM agrees

+otherwise in: (i) a written contract signed by you and ARM; or (ii) a

+written contract provided by ARM and accepted by you, this is the only

+agreement between you and ARM relating to the Software and it may only

+be modified by written agreement between you and ARM. Except as

+expressly agreed in writing, this Licence may not be modified by

+purchase orders, advertising or other representation by any person. If

+any clause or sentence in this Licence is held by a court of law to be

+illegal or unenforceable the remaining provisions of this Licence

+shall not be affected thereby. The failure by ARM to enforce any of

+the provisions of this Licence, unless waived in writing, shall not

+constitute a waiver of ARM's rights to enforce such provision or any

+other provision of this Licence in the future.

+

+At ARM's request, you agree to check your computers for installations

+of the Software and any other information requested by ARM relating to

+Software installation and to provide this information to ARM. You

+agree that auditors nominated by ARM may also perform such checking

+and reporting on behalf of ARM by prior appointment during your normal

+business hours on seven (7) days' notice. ARM shall bear the auditors'

+costs for that audit unless it reveals unlicensed usage in which case

+you shall promptly reimburse ARM for all reasonable costs and

+expenses, including professional fees, relating to such audit. Any

+information which is disclosed to ARM or such auditors during checking

+or audit shall be treated as your confidential information and shall

+only be used by ARM for licence management, compliance and enforcement

+purposes.

+

+The Software provided under this Agreement is subject to U.K.,

+European Union, and U.S. export control laws and regulations,

+including the U.S. Export Administration Act and its associated

+regulations (hereafter collectively referred to as "Export

+Regulations").  LICENSEE agrees to comply fully with all such Export

+Regulations and LICENSEE agrees that it shall not, either directly or

+indirectly, export in breach of the Export Regulations, any Software

+received under this Agreement, nor any direct products thereof; (i) to

+any country, company or person subject to export restrictions or

+sanctions under the Export Regulations; or (ii) for any prohibited end

+use, which at the time of export requires an export license or other

+governmental approval, without first obtaining such license or

+approval.

diff --git a/src/hikey960/mali/bifrost/bin/bcc b/src/hikey960/mali/bifrost/bin/bcc
new file mode 100755
index 0000000..c828bca
--- /dev/null
+++ b/src/hikey960/mali/bifrost/bin/bcc
Binary files differ
diff --git a/src/hikey960/mali/bifrost/lib/egl/libGLES_mali.so b/src/hikey960/mali/bifrost/lib/egl/libGLES_mali.so
new file mode 100755
index 0000000..092d472
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib/egl/libGLES_mali.so
Binary files differ
diff --git a/src/hikey960/mali/bifrost/lib/hw/vulkan.hikey960.so b/src/hikey960/mali/bifrost/lib/hw/vulkan.hikey960.so
new file mode 120000
index 0000000..57c186c
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib/hw/vulkan.hikey960.so
@@ -0,0 +1 @@
+../egl/libGLES_mali.so
\ No newline at end of file
diff --git a/src/hikey960/mali/bifrost/lib/libRSDriverArm.so b/src/hikey960/mali/bifrost/lib/libRSDriverArm.so
new file mode 100755
index 0000000..721e324
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib/libRSDriverArm.so
Binary files differ
diff --git a/src/hikey960/mali/bifrost/lib/libclcore.bc b/src/hikey960/mali/bifrost/lib/libclcore.bc
new file mode 100644
index 0000000..ee0429a
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib/libclcore.bc
Binary files differ
diff --git a/src/hikey960/mali/bifrost/lib/libclcore_neon.bc b/src/hikey960/mali/bifrost/lib/libclcore_neon.bc
new file mode 100644
index 0000000..ce3da69
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib/libclcore_neon.bc
Binary files differ
diff --git a/src/hikey960/mali/bifrost/lib/libmalicore.bc b/src/hikey960/mali/bifrost/lib/libmalicore.bc
new file mode 100644
index 0000000..5901017
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib/libmalicore.bc
Binary files differ
diff --git a/src/hikey960/mali/bifrost/lib64/egl/libGLES_mali.so b/src/hikey960/mali/bifrost/lib64/egl/libGLES_mali.so
new file mode 100755
index 0000000..19c41f1
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib64/egl/libGLES_mali.so
Binary files differ
diff --git a/src/hikey960/mali/bifrost/lib64/hw/vulkan.hikey960.so b/src/hikey960/mali/bifrost/lib64/hw/vulkan.hikey960.so
new file mode 120000
index 0000000..57c186c
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib64/hw/vulkan.hikey960.so
@@ -0,0 +1 @@
+../egl/libGLES_mali.so
\ No newline at end of file
diff --git a/src/hikey960/mali/bifrost/lib64/libLLVM.so b/src/hikey960/mali/bifrost/lib64/libLLVM.so
new file mode 100755
index 0000000..894b1d1
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib64/libLLVM.so
Binary files differ
diff --git a/src/hikey960/mali/bifrost/lib64/libRSDriverArm.so b/src/hikey960/mali/bifrost/lib64/libRSDriverArm.so
new file mode 100755
index 0000000..0a10776
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib64/libRSDriverArm.so
Binary files differ
diff --git a/src/hikey960/mali/bifrost/lib64/libbcc.so b/src/hikey960/mali/bifrost/lib64/libbcc.so
new file mode 100755
index 0000000..b95b141
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib64/libbcc.so
Binary files differ
diff --git a/src/hikey960/mali/bifrost/lib64/libbccArm.so b/src/hikey960/mali/bifrost/lib64/libbccArm.so
new file mode 100755
index 0000000..7fe1dfd
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib64/libbccArm.so
Binary files differ
diff --git a/src/hikey960/mali/bifrost/lib64/libclcore.bc b/src/hikey960/mali/bifrost/lib64/libclcore.bc
new file mode 100644
index 0000000..ca3d10b
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib64/libclcore.bc
Binary files differ
diff --git a/src/hikey960/mali/bifrost/lib64/libmalicore.bc b/src/hikey960/mali/bifrost/lib64/libmalicore.bc
new file mode 100644
index 0000000..f8c6d71
--- /dev/null
+++ b/src/hikey960/mali/bifrost/lib64/libmalicore.bc
Binary files differ
diff --git a/src/hikey960/mali/utgard/Android.bp b/src/hikey960/mali/utgard/Android.bp
new file mode 100644
index 0000000..d9d7092
--- /dev/null
+++ b/src/hikey960/mali/utgard/Android.bp
@@ -0,0 +1,28 @@
+soong_namespace {}
+
+cc_prebuilt_library_shared {
+    name: "libGLES_mali",
+    notice: "END_USER_LICENCE_AGREEMENT.txt",
+    strip: {
+        none: true,
+    },
+    arch: {
+        arm: {
+            srcs: ["lib/egl/libGLES_mali.so"],
+        },
+        arm64: {
+            srcs: ["lib64/egl/libGLES_mali.so"],
+        },
+    },
+    vendor: true,
+    relative_install_path: "egl",
+
+    compile_multilib: "both",
+    shared_libs: [
+        "libc++",
+        "libc",
+        "libdl",
+        "liblog",
+        "libm",
+    ],
+}
diff --git a/src/hikey960/mali/utgard/Android.mk.old b/src/hikey960/mali/utgard/Android.mk.old
new file mode 100644
index 0000000..c7afa7b
--- /dev/null
+++ b/src/hikey960/mali/utgard/Android.mk.old
@@ -0,0 +1,30 @@
+ifneq ($(filter hikey hikey64 hikey32, $(TARGET_DEVICE)),)
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := END_USER_LICENCE_AGREEMENT.txt
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+LOCAL_STRIP_MODULE := false
+LOCAL_SRC_FILES_arm := $(LOCAL_MODULE)
+LOCAL_MODULE_PATH_32 := $(TARGET_OUT_VENDOR)
+LOCAL_MULTILIB := 32
+LOCAL_SHARED_LIBRARIES := libc++ libc libdl liblog libm
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := libGLES_mali.so
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+LOCAL_STRIP_MODULE := false
+LOCAL_SRC_FILES_arm := lib/egl/$(LOCAL_MODULE)
+LOCAL_SRC_FILES_arm64 := lib64/egl/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH_32 := $(TARGET_OUT_VENDOR)/lib/egl/
+LOCAL_MODULE_PATH_64 := $(TARGET_OUT_VENDOR)/lib64/egl/
+LOCAL_MULTILIB := both
+LOCAL_SHARED_LIBRARIES := libc++ libc libdl liblog libm
+include $(BUILD_PREBUILT)
+
+endif
diff --git a/src/hikey960/mali/utgard/END_USER_LICENCE_AGREEMENT.txt b/src/hikey960/mali/utgard/END_USER_LICENCE_AGREEMENT.txt
new file mode 100644
index 0000000..34da5f8
--- /dev/null
+++ b/src/hikey960/mali/utgard/END_USER_LICENCE_AGREEMENT.txt
@@ -0,0 +1,194 @@
+LES-PRE-20769

+SP-Version: 1.0

+25 November 2015

+

+END USER LICENCE AGREEMENT FOR THE MALI USERSPACE DRIVER ("Mali DRIVER")

+

+THIS END USER LICENCE AGREEMENT ("LICENCE") IS A LEGAL AGREEMENT

+BETWEEN YOU (EITHER A SINGLE INDIVIDUAL, OR SINGLE LEGAL ENTITY) AND

+ARM LIMITED ("ARM") FOR THE USE OF THE SOFTWARE ACCOMPANYING THIS

+LICENCE. ARM IS ONLY WILLING TO LICENSE THE SOFTWARE TO YOU ON

+CONDITION THAT YOU ACCEPT ALL OF THE TERMS IN THIS LICENCE. BY

+INSTALLING OR OTHERWISE USING OR COPYING THE SOFTWARE YOU INDICATE

+THAT YOU AGREE TO BE BOUND BY ALL OF THE TERMS OF THIS LICENCE. IF YOU

+DO NOT AGREE TO THE TERMS OF THIS LICENCE, ARM IS UNWILLING TO LICENSE

+THE SOFTWARE TO YOU AND YOU MAY NOT INSTALL, USE OR COPY THE SOFTWARE,

+AND YOU SHOULD PROMPTLY RETURN THE SOFTWARE TO YOUR SUPPLIER.

+

+"Applications" means applications for use solely in conjunction with

+Mali-based products manufactured under licence from ARM.

+

+"Output" means data resulting from your use of the Software and all

+direct and indirect derivatives thereof.

+

+"Software" means any software, firmware and data accompanying this

+Licence, any printed, electronic or online documentation supplied with

+it under the terms of this Licence for the Mali Driver.

+

+1. LICENCE GRANTS TO YOU.

+

+1.1 ARM hereby grants to you, subject to the terms and conditions of

+this Licence, a non-exclusive, non-transferable, revocable, worldwide

+licence to:

+

+(i)	use and copy the Software or certain components or optional

+	functionality in the Software, as applicable, solely for the

+	purposes of running, designing or developing Applications; and

+

+(ii)	subject to Clause 1.2, distribute the whole of the Software;

+	and/or (b) the whole or any part of the Software together

+	with, or as incorporated into, Applications; and

+

+1.2 If you choose to redistribute the whole or any part of the

+Software pursuant to the licences granted in Clause 1.1(ii), you

+agree: (i) not to use ARM's or any of its licensors names, logos or

+trademarks to market Applications; (ii) to retain any and all

+copyright notices and other notices (whether ARM's or its licensor's)

+which are included with the Software; and (iii) include a copy of this

+Licence with such redistribution.

+

+2. RESTRICTIONS ON USE OF THE SOFTWARE.

+

+BENCHMARKING: This Licence does not prevent you from using the

+Software for benchmarking purposes. However, you shall ensure that any

+and all benchmarking data relating to the Software, and any other

+results of your use or testing of the Software which are indicative of

+its performance, efficacy, reliability or quality, shall not be used

+to disparage ARM, its products or services, or in a manner that, in

+ARM's reasonable judgment, may diminish or otherwise damage the

+reputation of ARM.

+

+COPYRIGHT AND RESERVATION OF RIGHTS: The Software is owned by ARM or

+its licensors and is protected by copyright and other intellectual

+property laws and international treaties. The Software is licensed not

+sold. You acquire no rights to the Software other than as expressly

+provided by this Licence. You shall not remove from the Software any

+copyright notice or other notice and shall ensure that any such notice

+is reproduced in any copies of the whole or any part of the Software

+made by you or other permitted users.

+

+REVERSE ENGINEERING: Except to the extent that such activity is

+permitted by applicable law you shall not reverse engineer, decompile

+or disassemble any of the Software. If the Software was provided to

+you in Europe you shall not reverse engineer, decompile or disassemble

+any of the Software for the purposes of error correction.

+

+RESTRICTED USE: You agree that you shall not use the Software or the

+Output other than pursuant to and in accordance with the exercise of

+any of the licences granted under this Licence. Without limiting the

+generality of the foregoing, you shall not use the Software or any

+Output: (a) for determining if any features, functions or processes

+provided by the Software are covered by any patents or patent

+applications owned by you or a third party; or (b) for developing

+technology, applications or products which avoid any of ARM's

+intellectual property in the Software licensed hereunder; or (c) as a

+reference for modifying existing patents or patent applications or

+creating any continuation, continuation in part, or extension of

+existing patents or patent applications.

+

+3. SUPPORT.

+

+ARM is not under an obligation to provide support, but it may do so at

+its own discretion, and if it does, it will only be in respect of the

+Software as delivered.

+

+4. NO WARRANTIES.

+

+YOU AGREE THAT THE SOFTWARE IS LICENSED "AS IS", AND THAT ARM

+EXPRESSLY DISCLAIMS ALL REPRESENTATIONS, WARRANTIES, CONDITIONS OR

+OTHER TERMS, EXPRESS OR IMPLIED OR STATUTORY, INCLUDING WITHOUT

+LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, SATISFACTORY

+QUALITY, AND FITNESS FOR A PARTICULAR PURPOSE.

+

+YOU EXPRESSLY ASSUME ALL LIABILITIES AND RISKS, FOR USE OR OPERATION

+OF APPLICATIONS, INCLUDING WITHOUT LIMITATION, APPLICATIONS DESIGNED

+OR INTENDED FOR MISSION CRITICAL APPLICATIONS, SUCH AS PACEMAKERS,

+WEAPONRY, AIRCRAFT NAVIGATION, FACTORY CONTROL SYSTEMS, ETC. SHOULD

+THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE ENTIRE COST OF ALL

+NECESSARY SERVICING, REPAIR OR CORRECTION.

+

+5. LIMITATION OF LIABILITY.

+

+TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL

+ARM BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL

+DAMAGES (INCLUDING LOSS OF PROFITS) ARISING OUT OF THE USE OR

+INABILITY TO USE THE SOFTWARE WHETHER BASED ON A CLAIM UNDER CONTRACT,

+TORT OR OTHER LEGAL THEORY, EVEN IF ARM WAS ADVISED OF THE POSSIBILITY

+OF SUCH DAMAGES.

+

+ARM does not seek to limit or exclude liability for death or personal

+injury arising from ARM's negligence or ARM's fraud and because some

+jurisdictions do not permit the exclusion or limitation of liability

+for consequential or incidental damages the above limitation relating

+to liability for consequential damages may not apply to you.

+

+NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED IN THIS LICENCE,

+THE MAXIMUM LIABILITY OF ARM TO YOU IN AGGREGATE FOR ALL CLAIMS MADE

+AGAINST ARM IN CONTRACT TORT OR OTHERWISE UNDER OR IN CONNECTION WITH

+THE SUBJECT MATTER OF THIS LICENCE SHALL NOT EXCEED THE GREATER OF:

+(I) THE TOTAL OF SUMS PAID BY YOU TO ARM (IF ANY) FOR THIS LICENCE;

+AND (II) $10.00 USD. THE EXISTENCE OF MORE THAN ONE CLAIM WILL NOT

+ENLARGE OR EXTEND THE LIMIT.

+

+6. U.S. GOVERNMENT END USERS.

+

+US Government Restrictions: Use, duplication, reproduction, release,

+modification, disclosure or transfer of the Software is restricted in

+accordance with the terms of this Licence.

+

+7. TERM AND TERMINATION.

+

+This Licence shall remain in force until terminated by you or by ARM.

+Without prejudice to any of its other rights if you are in breach of

+any of the terms and conditions of this Licence then ARM may terminate

+this Licence immediately upon giving written notice to you or on

+thirty (30) days written notice without cause. You may terminate this

+Licence at any time. Upon termination of this Licence by you or by ARM

+, you shall stop using the Software and destroy all copies of the

+Software in your possession, together with all documentation and

+related materials. The provisions of clauses 2, 3, 4, 5, 6, 7, and 8

+shall survive termination of this Licence.

+

+8. GENERAL.

+

+This Licence is governed by English Law. Except where ARM agrees

+otherwise in: (i) a written contract signed by you and ARM; or (ii) a

+written contract provided by ARM and accepted by you, this is the only

+agreement between you and ARM relating to the Software and it may only

+be modified by written agreement between you and ARM. Except as

+expressly agreed in writing, this Licence may not be modified by

+purchase orders, advertising or other representation by any person. If

+any clause or sentence in this Licence is held by a court of law to be

+illegal or unenforceable the remaining provisions of this Licence

+shall not be affected thereby. The failure by ARM to enforce any of

+the provisions of this Licence, unless waived in writing, shall not

+constitute a waiver of ARM's rights to enforce such provision or any

+other provision of this Licence in the future.

+

+At ARM's request, you agree to check your computers for installations

+of the Software and any other information requested by ARM relating to

+Software installation and to provide this information to ARM. You

+agree that auditors nominated by ARM may also perform such checking

+and reporting on behalf of ARM by prior appointment during your normal

+business hours on seven (7) days' notice. ARM shall bear the auditors'

+costs for that audit unless it reveals unlicensed usage in which case

+you shall promptly reimburse ARM for all reasonable costs and

+expenses, including professional fees, relating to such audit. Any

+information which is disclosed to ARM or such auditors during checking

+or audit shall be treated as your confidential information and shall

+only be used by ARM for licence management, compliance and enforcement

+purposes.

+

+The Software provided under this Agreement is subject to U.K.,

+European Union, and U.S. export control laws and regulations,

+including the U.S. Export Administration Act and its associated

+regulations (hereafter collectively referred to as "Export

+Regulations").  LICENSEE agrees to comply fully with all such Export

+Regulations and LICENSEE agrees that it shall not, either directly or

+indirectly, export in breach of the Export Regulations, any Software

+received under this Agreement, nor any direct products thereof; (i) to

+any country, company or person subject to export restrictions or

+sanctions under the Export Regulations; or (ii) for any prohibited end

+use, which at the time of export requires an export license or other

+governmental approval, without first obtaining such license or

+approval.

diff --git a/src/hikey960/mali/utgard/lib/egl/libGLES_mali.so b/src/hikey960/mali/utgard/lib/egl/libGLES_mali.so
new file mode 100755
index 0000000..f86da7e
--- /dev/null
+++ b/src/hikey960/mali/utgard/lib/egl/libGLES_mali.so
Binary files differ
diff --git a/src/hikey960/mali/utgard/lib64/egl/libGLES_mali.so b/src/hikey960/mali/utgard/lib64/egl/libGLES_mali.so
new file mode 100755
index 0000000..5c0af47
--- /dev/null
+++ b/src/hikey960/mali/utgard/lib64/egl/libGLES_mali.so
Binary files differ