Trusted Firmware-A Tests, version 2.0

This is the first public version of the tests for the Trusted
Firmware-A project. Please see the documentation provided in the
source tree for more details.

Change-Id: I6f3452046a1351ac94a71b3525c30a4ca8db7867
Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
Co-authored-by: amobal01 <amol.balasokamble@arm.com>
Co-authored-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
Co-authored-by: Asha R <asha.r@arm.com>
Co-authored-by: Chandni Cherukuri <chandni.cherukuri@arm.com>
Co-authored-by: David Cunado <david.cunado@arm.com>
Co-authored-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
Co-authored-by: Douglas Raillard <douglas.raillard@arm.com>
Co-authored-by: dp-arm <dimitris.papastamos@arm.com>
Co-authored-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
Co-authored-by: Jonathan Wright <jonathan.wright@arm.com>
Co-authored-by: Kévin Petit <kevin.petit@arm.com>
Co-authored-by: Roberto Vargas <roberto.vargas@arm.com>
Co-authored-by: Sathees Balya <sathees.balya@arm.com>
Co-authored-by: Shawon Roy <Shawon.Roy@arm.com>
Co-authored-by: Soby Mathew <soby.mathew@arm.com>
Co-authored-by: Thomas Abraham <thomas.abraham@arm.com>
Co-authored-by: Vikram Kanigiri <vikram.kanigiri@arm.com>
Co-authored-by: Yatharth Kochar <yatharth.kochar@arm.com>
diff --git a/el3_payload/uart.S b/el3_payload/uart.S
new file mode 100644
index 0000000..b7c5e94
--- /dev/null
+++ b/el3_payload/uart.S
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2018, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include "asm_macros.S"
+#include "platform.h"
+
+/*
+ * PL011 UART registers
+ */
+/* UART Flag Register */
+#define UARTFR			0x018
+/* Transmit FIFO full bit in UARTFR register */
+#define PL011_UARTFR_TXFF_BIT	5
+/* UART Data Register */
+#define UARTDR			0x000
+
+	.text
+	.global print_string
+	.global print_char
+
+	/*
+	 * void print_char(unsigned int c);
+	 * clobbers: x3, x4
+	 */
+func print_char
+	ldr	x3, =UART_BASE
+1:
+	/* Check if the transmit FIFO is full */
+	ldr	w4, [x3, #UARTFR]
+	tbnz	w4, #PL011_UARTFR_TXFF_BIT, 1b
+	str	w0, [x3, #UARTDR]
+	ret
+endfunc print_char
+
+	/*
+	 * void print_string(const char *str);
+	 * clobbers: x0, x1, x2, x9
+	 */
+func print_string
+	ldr	x1, =UART_BASE
+	mov	x2, x0
+1:
+	ldrb	w0, [x2], #1
+	cmp	wzr, w0
+	b.eq	2f
+
+	mov	x9, x30
+	bl	print_char
+	mov	x30, x9
+	b	1b
+2:
+	ret
+endfunc print_string