hikey: make console configurable

Signed-off-by: Victor Chong <victor.chong@linaro.org>
Tested-by: Victor Chong <victor.chong@linaro.org> (hikey)
Reviewed-by: Joakim Bech <joakim.bech@linaro.org>
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
diff --git a/hikey.mk b/hikey.mk
index 10306af..535bd86 100644
--- a/hikey.mk
+++ b/hikey.mk
@@ -1,6 +1,7 @@
 ################################################################################
 # User-defined variables
 # Edit so these match your target
+# NOTE: If making changes after a build, please clean before rebuilding!
 ################################################################################
 # Non-secure user mode (root fs binaries): 32 or 64-bit [default 64]
 NSU ?= 64
@@ -9,6 +10,10 @@
 # Secure user mode (Trusted Apps): 32 or 64-bit [default 32, requires SK=64 for 64]
 SU ?= 32
 
+# Normal/secure world console UARTs: 3 or 0 [default 3]
+CFG_NW_CONSOLE_UART ?= 3
+CFG_SW_CONSOLE_UART ?= 3
+
 ################################################################################
 # Includes
 ################################################################################
@@ -107,6 +112,12 @@
 	PLAT=hikey \
 	SPD=opteed
 
+ARM_TF_CONSOLE_UART ?= $(CFG_SW_CONSOLE_UART)
+ifeq ($(ARM_TF_CONSOLE_UART),0)
+	ARM_TF_FLAGS += CONSOLE_BASE=PL011_UART0_BASE \
+			CRASH_CONSOLE_BASE=PL011_UART0_BASE
+endif
+
 arm-tf: optee-os edk2
 	$(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) all fip
 
@@ -136,12 +147,20 @@
 ################################################################################
 # EDK2 / Tianocore
 ################################################################################
+EDK2_VARS ?= EDK2_ARCH=AARCH64 \
+		EDK2_DSC=HisiPkg/HiKeyPkg/HiKey.dsc \
+		EDK2_TOOLCHAIN=GCC49 \
+		EDK2_BUILD=$(EDK2_BUILD)
+
+EDK2_CONSOLE_UART ?= $(CFG_NW_CONSOLE_UART)
+ifeq ($(EDK2_CONSOLE_UART),0)
+	EDK2_VARS += EDK2_MACROS="-DSERIAL_BASE=0xF8015000"
+endif
+
 define edk2-call
 	GCC49_AARCH64_PREFIX=$(AARCH64_CROSS_COMPILE) \
 	$(MAKE) -j1 -C $(EDK2_PATH) \
-		-f HisiPkg/HiKeyPkg/Makefile EDK2_ARCH=AARCH64 \
-		EDK2_DSC=HisiPkg/HiKeyPkg/HiKey.dsc \
-		EDK2_TOOLCHAIN=GCC49 EDK2_BUILD=$(EDK2_BUILD)
+		-f HisiPkg/HiKeyPkg/Makefile $(EDK2_VARS)
 endef
 
 edk2: edk2-common
@@ -195,8 +214,9 @@
 ################################################################################
 # OP-TEE
 ################################################################################
-OPTEE_OS_COMMON_FLAGS += PLATFORM=hikey CFG_TEE_TA_LOG_LEVEL=3
-OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=hikey CFG_TEE_TA_LOG_LEVEL=3
+OPTEE_OS_COMMON_FLAGS += PLATFORM=hikey CFG_TEE_TA_LOG_LEVEL=3 CFG_CONSOLE_UART=$(CFG_SW_CONSOLE_UART)
+OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=hikey
+
 ifeq ($(SK),64)
 OPTEE_OS_COMMON_FLAGS += CFG_ARM64_core=y
 OPTEE_OS_CLEAN_COMMON_FLAGS += CFG_ARM64_core=y
@@ -344,6 +364,13 @@
 ################################################################################
 # Boot Image
 ################################################################################
+LINUX_CONSOLE_UART ?= $(CFG_NW_CONSOLE_UART)
+ifeq ($(LINUX_CONSOLE_UART),3)
+GRUBCFG = $(PATCHES_PATH)/grub/grub_uart3.cfg
+else
+GRUBCFG = $(PATCHES_PATH)/grub/grub_uart0.cfg
+endif
+
 boot-img: linux update_rootfs edk2 grub
 	sudo -p "[sudo] Password:" true
 	if [ -d .tmpbootimg ] ; then sudo rm -rf .tmpbootimg ; fi
@@ -353,7 +380,8 @@
 	sudo mount -o loop,rw,sync $(BOOT_IMG) .tmpbootimg
 	sudo cp $(LINUX_PATH)/arch/arm64/boot/Image $(DTB) .tmpbootimg/
 	sudo mkdir -p .tmpbootimg/EFI/BOOT
-	sudo cp $(OUT_PATH)/grubaa64.efi $(PATCHES_PATH)/grub/grub_uart3.cfg .tmpbootimg/EFI/BOOT/
+	sudo cp $(OUT_PATH)/grubaa64.efi .tmpbootimg/EFI/BOOT/
+	sudo cp $(GRUBCFG) .tmpbootimg/EFI/BOOT/grub.cfg
 	sudo cp $(GEN_ROOTFS_PATH)/filesystem.cpio.gz .tmpbootimg/initrd.img
 	sudo cp $(EDK2_PATH)/Build/HiKey/$(EDK2_BUILD)_GCC49/AARCH64/AndroidFastbootApp.efi .tmpbootimg/EFI/BOOT/fastboot.efi
 	# We cannot figure out why we need the sleep here, but from time to time