diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 5a8d4b2..0b07e08 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -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 diff --git a/board/hisilicon/hikey/Kconfig b/board/hisilicon/hikey/Kconfig index f7f1055..9171502 100644 --- a/board/hisilicon/hikey/Kconfig +++ b/board/hisilicon/hikey/Kconfig @@ -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 diff --git a/board/hisilicon/hikey/hikey.c b/board/hisilicon/hikey/hikey.c index 9948747..c4ae40b 100644 --- a/board/hisilicon/hikey/hikey.c +++ b/board/hisilicon/hikey/hikey.c @@ -6,6 +6,7 @@ */ #include #include +#include #include #include #include @@ -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; diff --git a/configs/hikey_defconfig b/configs/hikey_defconfig index 64a5929..70aa708 100644 --- a/configs/hikey_defconfig +++ b/configs/hikey_defconfig @@ -1,2 +1,3 @@ CONFIG_ARM=y +CONFIG_SYS_MALLOC_F_LEN=0x2000 # CONFIG_CMD_IMLS is not set diff --git a/include/configs/hikey.h b/include/configs/hikey.h index ae8187a..b7c22e8 100644 --- a/include/configs/hikey.h +++ b/include/configs/hikey.h @@ -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 */ @@ -59,13 +61,8 @@ /* 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