summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnson Huang <Anson.Huang@nxp.com>2018-07-05 10:28:58 +0800
committerAnson Huang <Anson.Huang@nxp.com>2018-07-05 10:30:55 +0800
commitec182180f98539ea0fdbe427b60c9d0276524aea (patch)
treec74716bdf805cd55db1e3e904ca7a3d50ef8f492
parente88e844028da9805c8de695ef2371090e44ccfe2 (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.h22
-rw-r--r--plat/imx/common/lpuart_console.S75
-rw-r--r--plat/imx/imx8qm/imx8qm_bl31_setup.c8
-rw-r--r--plat/imx/imx8qxp/imx8qxp_bl31_setup.c8
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