rpi: console: Autodetect Mini-UART vs. PL011 configuration

The Raspberry Pi has two different UART devices pin-muxed to GPIO 14&15:
One ARM PL011 one and the 8250 compatible "Mini-UART".
A dtoverlay parameter in config.txt will tell the firmware to switch
between the two: it will setup the right clocks and will configure the
pinmuxes accordingly.

To autodetect the user's choice, we read the pinmux register and check
its setting: ALT5 (0x2) means the Mini-UART is used, ALT0 (0x4) points
to the PL011.
Based on that we select the UART driver to initialise.

This will allow console output in any case.

Change-Id: I620d3ce68de6c6576599f2a405636020e1fd1376
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
diff --git a/plat/rpi/common/rpi3_common.c b/plat/rpi/common/rpi3_common.c
index 8fc357a..ef88bf1 100644
--- a/plat/rpi/common/rpi3_common.c
+++ b/plat/rpi/common/rpi3_common.c
@@ -13,6 +13,7 @@
 #include <common/debug.h>
 #include <bl31/interrupt_mgmt.h>
 #include <drivers/console.h>
+#include <drivers/rpi3/gpio/rpi3_gpio.h>
 #include <drivers/ti/uart/uart_16550.h>
 #include <drivers/arm/pl011.h>
 #include <lib/xlat_tables/xlat_tables_v2.h>
@@ -105,9 +106,10 @@
  ******************************************************************************/
 static console_t rpi3_console;
 
+
 static bool rpi3_use_mini_uart(void)
 {
-	return true;
+	return rpi3_gpio_get_select(14) == RPI3_GPIO_FUNC_ALT5;
 }
 
 void rpi3_console_init(void)
@@ -118,6 +120,8 @@
 	if (RPI3_RUNTIME_UART != -1)
 		console_scope |= CONSOLE_FLAG_RUNTIME;
 
+	rpi3_gpio_init();
+
 	if (rpi3_use_mini_uart())
 		rc = console_16550_register(PLAT_RPI_MINI_UART_BASE,
 					    0,