arm-trusted-firmware/plat/imx/common/imx_uart_console.S
Bai Ping 8113681992 plat: imx: Add i.MX8MQ basic support
i.MX8MQ is new SOC of NXP's i.MX8M family based on
A53. It can provide industry-leading audio, voice
and video processing for applications that scale
from consumer home audio to industrial building
automation and mobile computers

this patchset add the basic supoort to boot up
the 4 X A53. more feature will be added later.

Signed-off-by: Bai Ping <ping.bai@nxp.com>
2018-12-05 08:58:51 +08:00

84 lines
1.5 KiB
ArmAsm

/*
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch.h>
#include <asm_macros.S>
#define USE_FINISH_CONSOLE_REG_2
#include <console_macros.S>
#include <assert_macros.S>
#include "imx_uart.h"
#define URXD 0x0 /* Receiver Register */
#define UTXD 0x40 /* Transmitter Register */
#define UTS 0xb4 /* UART Test Register (mx31) */
#define URXD_RX_DATA (0xFF)
.globl console_uart_register
.globl console_uart_init
.globl console_uart_putc
.globl console_uart_getc
func console_imx_uart_register
mov x7, x30
mov x6, x3
cbz x6, register_fail
str x0, [x6, #CONSOLE_T_DRVDATA]
bl console_imx_uart_init
cbz x0, register_fail
mov x0, x6
mov x30, x7
finish_console_register imx_uart putc=1, getc=1
register_fail:
ret x7
endfunc console_imx_uart_register
func console_imx_uart_init
mov w0, #1
ret
endfunc console_imx_uart_init
func console_imx_uart_putc
ldr x1, [x1, #CONSOLE_T_DRVDATA]
cbz x1, putc_error
/* Prepare '\r' to '\n' */
cmp w0, #0xA
b.ne 2f
1:
/* Check if the transmit FIFO is full */
ldr w2, [x1, #UTS]
tbz w2, #6, 1b
mov w2, #0xD
str w2, [x1, #UTXD]
2:
/* Check if the transmit FIFO is full */
ldr w2, [x1, #UTS]
tbz w2, #6, 2b
str w0, [x1, #UTXD]
ret
putc_error:
mov w0, #-1
ret
endfunc console_imx_uart_putc
func console_imx_uart_getc
ldr x0, [x0, #CONSOLE_T_DRVDATA]
cbz x0, getc_error
1:
ldr w1, [x0, #UTS]
tbnz w1, #5, 1b
ldr w1, [x0, #URXD]
and w0, w1, #URXD_RX_DATA
ret
getc_error:
mov w0, #-1
ret
endfunc console_imx_uart_getc