diff options
author | Anson Huang <Anson.Huang@nxp.com> | 2018-07-05 10:28:58 +0800 |
---|---|---|
committer | Anson Huang <Anson.Huang@nxp.com> | 2018-07-05 10:30:55 +0800 |
commit | ec182180f98539ea0fdbe427b60c9d0276524aea (patch) | |
tree | c74716bdf805cd55db1e3e904ca7a3d50ef8f492 | |
parent | e88e844028da9805c8de695ef2371090e44ccfe2 (diff) |
imx8qm/imx8qxp: switch to MULTI_CONSOLE_API for debug uart support
Switch to MULTI_CONSOLE_API to make debug UART work.
Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
-rw-r--r-- | plat/imx/common/include/lpuart.h | 22 | ||||
-rw-r--r-- | plat/imx/common/lpuart_console.S | 75 | ||||
-rw-r--r-- | plat/imx/imx8qm/imx8qm_bl31_setup.c | 8 | ||||
-rw-r--r-- | plat/imx/imx8qxp/imx8qxp_bl31_setup.c | 8 |
4 files changed, 69 insertions, 44 deletions
diff --git a/plat/imx/common/include/lpuart.h b/plat/imx/common/include/lpuart.h index d64ea197..4ff91bda 100644 --- a/plat/imx/common/include/lpuart.h +++ b/plat/imx/common/include/lpuart.h @@ -1,5 +1,5 @@ /* - * Copyright 2017 NXP + * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -7,6 +7,8 @@ #ifndef __IMX_LPUART_H__ #define __IMX_LPUART_H__ +#include <console.h> + #define VERID 0x0 #define PARAM 0x4 #define GLOBAL 0x8 @@ -18,7 +20,10 @@ #define MATCH 0x20 #define MODIR 0x24 #define FIFO 0x28 -#define WATER 0x2C +#define WATER 0x2c + +#define US1_TDRE (1 << 23) +#define US1_RDRF (1 << 21) #define CTRL_TE (1 << 19) #define CTRL_RE (1 << 18) @@ -45,4 +50,17 @@ #define LPUART_BAUD_BOTHEDGE_MASK (0x20000U) #define LPUART_BAUD_M10_MASK (0x20000000U) +#ifndef __ASSEMBLY__ + +#include <types.h> + +typedef struct { + console_t console; + uintptr_t base; +} console_lpuart_t; + +int console_lpuart_register(uintptr_t baseaddr, uint32_t clock, uint32_t baud, + console_lpuart_t *console); +#endif /*__ASSEMBLY__*/ + #endif /* __IMX_LPUART_H__*/ diff --git a/plat/imx/common/lpuart_console.S b/plat/imx/common/lpuart_console.S index e53ef2a6..9263182b 100644 --- a/plat/imx/common/lpuart_console.S +++ b/plat/imx/common/lpuart_console.S @@ -1,72 +1,71 @@ /* - * Copyright 2017 NXP + * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ +#include <arch.h> #include <asm_macros.S> +#include <console_macros.S> +#include <assert_macros.S> +#include "lpuart.h" -#define UARTBAUD 0x10 -#define UARTSTAT 0x14 -#define UARTCTRL 0x18 -#define UARTDATA 0x1C -#define UARTMATCH 0x20 -#define UARTMODIR 0x24 -#define UARTFIFO 0x28 -#define UARTWATER 0x2c + .globl console_lpuart_register + .globl console_lpuart_init + .globl console_lpuart_putc + .globl console_lpuart_getc -#define US1_TDRE (1 << 23) -#define US1_RDRF (1 << 21) +func console_lpuart_register + mov x7, x30 + mov x6, x3 + cbz x6, register_fail + str x0, [x6, #CONSOLE_T_DRVDATA] - .globl console_core_init - .globl console_core_putc - .globl console_core_getc - .globl console_core_flush + bl console_lpuart_init + cbz x0, register_fail -/* console_core_init */ -func console_core_init - mov w0, wzr + mov x0, x6 + mov x30, x7 + finish_console_register lpuart + +register_fail: + ret x7 +endfunc console_lpuart_register + +func console_lpuart_init + mov w0, #1 ret -endfunc console_core_init +endfunc console_lpuart_init -/* console_core_putc */ -func console_core_putc - /* Check the input parameter */ +func console_lpuart_putc + ldr x1, [x1, #CONSOLE_T_DRVDATA] cbz x1, putc_error - /* Insert implementation here */ /* Prepare '\r' to '\n' */ cmp w0, #0xA b.ne 2f 1: /* Check if the transmit FIFO is full */ - ldr w2, [x1, #UARTSTAT] + ldr w2, [x1, #STAT] tbz w2, #23, 1b mov w2, #0xD - str w2, [x1, #UARTDATA] + str w2, [x1, #DATA] 2: /* Check if the transmit FIFO is full */ - ldr w2, [x1, #UARTSTAT] + ldr w2, [x1, #STAT] tbz w2, #23, 2b - str w0, [x1, #UARTDATA] + str w0, [x1, #DATA] ret putc_error: mov w0, #-1 ret -endfunc console_core_putc +endfunc console_lpuart_putc -/* console_core_getc */ -func console_core_getc +func console_lpuart_getc + ldr x0, [x0, #CONSOLE_T_DRVDATA] cbz x0, getc_error - /* Insert implementation here */ /* Check if the receive FIFO state */ ret getc_error: mov w0, #-1 ret -endfunc console_core_getc - -/* console_core_flush */ -func console_core_flush - mov w0, wzr - ret -endfunc console_core_flush +endfunc console_lpuart_getc diff --git a/plat/imx/imx8qm/imx8qm_bl31_setup.c b/plat/imx/imx8qm/imx8qm_bl31_setup.c index 142dabc2..59389d40 100644 --- a/plat/imx/imx8qm/imx8qm_bl31_setup.c +++ b/plat/imx/imx8qm/imx8qm_bl31_setup.c @@ -282,6 +282,10 @@ void mx8_partition_resources(void) void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, u_register_t arg2, u_register_t arg3) { +#if DEBUG_CONSOLE + static console_lpuart_t console; +#endif + /* open the IPC channel */ if (sc_ipc_open(&ipc_handle, SC_IPC_CH) != SC_ERR_NONE) { /* No console available now */ @@ -316,8 +320,8 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, #endif #if DEBUG_CONSOLE - console_init(IMX_BOOT_UART_BASE, IMX_BOOT_UART_CLK_IN_HZ, - IMX_CONSOLE_BAUDRATE); + console_lpuart_register(IMX_BOOT_UART_BASE, IMX_BOOT_UART_CLK_IN_HZ, + IMX_CONSOLE_BAUDRATE, &console); #endif /* Turn on MU1 for non-secure OS/Hypervisor */ diff --git a/plat/imx/imx8qxp/imx8qxp_bl31_setup.c b/plat/imx/imx8qxp/imx8qxp_bl31_setup.c index b75deb95..7219e7df 100644 --- a/plat/imx/imx8qxp/imx8qxp_bl31_setup.c +++ b/plat/imx/imx8qxp/imx8qxp_bl31_setup.c @@ -261,6 +261,10 @@ void imx8_partition_resources(void) void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, u_register_t arg2, u_register_t arg3) { +#if DEBUG_CONSOLE + static console_lpuart_t console; +#endif + /* open the IPC channel */ if (sc_ipc_open(&ipc_handle, SC_IPC_CH) != SC_ERR_NONE) { /* No console available now */ @@ -291,8 +295,8 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, #endif #if DEBUG_CONSOLE - console_init(IMX_BOOT_UART_BASE, IMX_BOOT_UART_CLK_IN_HZ, - IMX_CONSOLE_BAUDRATE); + console_lpuart_register(IMX_BOOT_UART_BASE, IMX_BOOT_UART_CLK_IN_HZ, + IMX_CONSOLE_BAUDRATE, &console); #endif /* Turn on MU1 for non-secure OS/Hypervisor |