Initialise UART console in all bootloader stages

This patch reworks the console driver to ensure that each bootloader stage
initializes it independently. As a result, both BL3-1 and BL2 platform code
now calls console_init() instead of relying on BL1 to perform console setup

Fixes ARM-software/tf-issues#120

Change-Id: Ic4d66e0375e40a2fc7434afcabc8bbb4715c14ab
diff --git a/drivers/console/console.c b/drivers/console/console.c
index efe1201..1a684ff 100644
--- a/drivers/console/console.c
+++ b/drivers/console/console.c
@@ -31,11 +31,19 @@
 #include <console.h>
 #include <platform.h>
 #include <pl011.h>
+#include <assert.h>
 
-static unsigned long uart_base = PL011_BASE;
+static unsigned long uart_base;
 
 void console_init(unsigned long base_addr)
 {
+	/* TODO: assert() internally calls printf() and will result in
+	 * an infinite loop. This needs to be fixed with some kind of
+	 * exception  mechanism or early panic support. This also applies
+	 * to the other assert() calls below.
+	 */
+	assert(base_addr);
+
 	/* Initialise internal base address variable */
 	uart_base = base_addr;
 
@@ -60,6 +68,8 @@
 
 int console_putc(int c)
 {
+	assert(uart_base);
+
 	if (c == '\n')
 		console_putc('\r');
 
@@ -71,6 +81,8 @@
 
 int console_getc(void)
 {
+	assert(uart_base);
+
 	while ((pl011_read_fr(uart_base) & PL011_UARTFR_RXFE) != 0)
 		;
 	return pl011_read_dr(uart_base);