/* * Copyright 2017 NXP * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include #include "uart.h" .globl console_uart_register .globl console_uart_init .globl console_uart_putc .globl console_uart_getc func console_uart_register mov x7, x30 mov x6, x3 cbz x6, register_fail str x0, [x6, #CONSOLE_T_DRVDATA] bl console_uart_init cbz x0, register_fail mov x0, x6 mov x30, x7 finish_console_register uart register_fail: ret x7 endfunc console_uart_register func console_uart_init mov w0, #1 ret endfunc console_uart_init func console_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_uart_putc func console_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_uart_getc