ARM: hikey: hi6220: Migrate over to DM_SERIAL and use UART3 by default.
authorPeter Griffin <peter.griffin@linaro.org>
Thu, 10 Sep 2015 20:55:17 +0000 (21:55 +0100)
committerTom Rini <trini@konsulko.com>
Mon, 28 Sep 2015 14:48:22 +0000 (10:48 -0400)
Use DM for the pl01x serial driver on hikey. Also allow UART0 or
UART3 to be chosen via Kconfig.

By default we now output to UART3 as the latest version of ATF outputs
to this UART. Also UART3 comes out on the LS connector, as opposed to
UART0 which goes to a unpopulated header.

As part of this change we also enable CONFIG_BOARD_EARLY_INIT_F and
call the pinmux configuration code for the UART. Before we were
relying on ATF having already configured the pin configuration.

NB: Upstream Linux kernel doesn't yet support UART3, so serial console
will still be output on UART0 when booting a upstream kernel.

Signed-off-by: Peter Griffin <peter.griffin@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
arch/arm/Kconfig
board/hisilicon/hikey/Kconfig
board/hisilicon/hikey/hikey.c
configs/hikey_defconfig
include/configs/hikey.h

index 5a8d4b2052d9ed173b952ec8d4cd6a184ecb7a12..0b07e08db6c73d2da13933055c509ac7deed78e8 100644 (file)
@@ -604,6 +604,7 @@ config TARGET_HIKEY
        select ARM64
        select DM
        select DM_GPIO
+       select DM_SERIAL
          help
          Support for HiKey 96boards platform. It features a HI6220
          SoC, with 8xA53 CPU, mali450 gpu, and 1GB RAM.
@@ -612,7 +613,6 @@ config TARGET_LS1021AQDS
        bool "Support ls1021aqds"
        select CPU_V7
        select SUPPORT_SPL
-
 config TARGET_LS1021ATWR
        bool "Support ls1021atwr"
        select CPU_V7
index f7f1055e179206d4b71a03c9928fc4d95f9c015c..9171502a198b132c018d7bb6cebd551d530e27ed 100644 (file)
@@ -12,4 +12,11 @@ config SYS_SOC
 config SYS_CONFIG_NAME
        default "hikey"
 
+config CONS_INDEX
+       int "UART used for console"
+       range 1 4
+       default 4
+       help
+         The hi6220 SoC has 5 UARTs. For example to use UART0 enter 1 here.
+
 endif
index 99487472179e036f19ecde4e96590ec0fa7d26d6..c4ae40bfb4eec974b34491b29f0426ca32dd2610 100644 (file)
@@ -6,6 +6,7 @@
  */
 #include <common.h>
 #include <dm.h>
+#include <dm/platform_data/serial_pl01x.h>
 #include <errno.h>
 #include <malloc.h>
 #include <netdev.h>
@@ -69,6 +70,48 @@ U_BOOT_DEVICES(hi6220_gpios) = {
 
 DECLARE_GLOBAL_DATA_PTR;
 
+static const struct pl01x_serial_platdata serial_platdata = {
+#if CONFIG_CONS_INDEX == 1
+       .base = HI6220_UART0_BASE,
+#elif CONFIG_CONS_INDEX == 4
+       .base = HI6220_UART3_BASE,
+#else
+#error "Unsuported console index value."
+#endif
+       .type = TYPE_PL011,
+       .clock = 19200000
+};
+
+U_BOOT_DEVICE(hikey_seriala) = {
+       .name = "serial_pl01x",
+       .platdata = &serial_platdata,
+};
+
+#ifdef CONFIG_BOARD_EARLY_INIT_F
+int board_uart_init(void)
+{
+       switch (CONFIG_CONS_INDEX) {
+       case 1:
+               hi6220_pinmux_config(PERIPH_ID_UART0);
+               break;
+       case 4:
+               hi6220_pinmux_config(PERIPH_ID_UART3);
+               break;
+       default:
+               debug("%s: Unsupported UART selected\n", __func__);
+               return -1;
+       }
+
+       return 0;
+}
+
+int board_early_init_f(void)
+{
+       board_uart_init();
+       return 0;
+}
+#endif
+
 struct peri_sc_periph_regs *peri_sc =
        (struct peri_sc_periph_regs *)HI6220_PERI_BASE;
 
index 64a5929e9ebd326bfd2b5d49d35847174526f4e3..70aa7085fd5c8c66da208737da1091cbfe1a63a4 100644 (file)
@@ -1,2 +1,3 @@
 CONFIG_ARM=y
+CONFIG_SYS_MALLOC_F_LEN=0x2000
 # CONFIG_CMD_IMLS is not set
index ae8187ad1ccd36d164948e807c42e3e35b281690..b7c22e8c48afcdaf94d7b178426a8217b7c7551c 100644 (file)
@@ -31,6 +31,8 @@
 /* Flat Device Tree Definitions */
 #define CONFIG_OF_LIBFDT
 
+#define CONFIG_BOARD_EARLY_INIT_F
+
 /* Physical Memory Map */
 
 /* CONFIG_SYS_TEXT_BASE needs to align with where ATF loads bl33.bin */
 /* Size of malloc() pool */
 #define CONFIG_SYS_MALLOC_LEN          (CONFIG_ENV_SIZE + SZ_8M)
 
-/* PL011 Serial Configuration */
-#define CONFIG_PL011_SERIAL
-
-#define CONFIG_PL011_CLOCK             19200000
-#define CONFIG_PL01x_PORTS             {(void *)0xF8015000}
-#define CONFIG_CONS_INDEX              0
-
+/* Serial port PL010/PL011 through the device model */
+#define CONFIG_PL01X_SERIAL
 #define CONFIG_BAUDRATE                        115200
 
 #define CONFIG_CMD_USB