1/* 2 * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7#include <arch.h> 8#include <asm_macros.S> 9#include <console_macros.S> 10#include <assert_macros.S> 11#include "imx8_lpuart.h" 12 13 .globl console_lpuart_register 14 .globl console_lpuart_init 15 .globl console_lpuart_putc 16 .globl console_lpuart_getc 17 .globl console_lpuart_flush 18 19func console_lpuart_register 20 mov x7, x30 21 mov x6, x3 22 cbz x6, register_fail 23 str x0, [x6, #CONSOLE_T_BASE] 24 25 bl console_lpuart_init 26 cbz x0, register_fail 27 28 mov x0, x6 29 mov x30, x7 30 finish_console_register lpuart putc=1, getc=1, flush=1 31 32register_fail: 33 ret x7 34endfunc console_lpuart_register 35 36func console_lpuart_init 37 mov w0, #1 38 ret 39endfunc console_lpuart_init 40 41func console_lpuart_putc 42 ldr x1, [x1, #CONSOLE_T_BASE] 43 cbz x1, putc_error 44 /* Prepare '\r' to '\n' */ 45 cmp w0, #0xA 46 b.ne 2f 471: 48 /* Check if the transmit FIFO is full */ 49 ldr w2, [x1, #STAT] 50 tbz w2, #23, 1b 51 mov w2, #0xD 52 str w2, [x1, #DATA] 532: 54 /* Check if the transmit FIFO is full */ 55 ldr w2, [x1, #STAT] 56 tbz w2, #23, 2b 57 str w0, [x1, #DATA] 58 ret 59putc_error: 60 mov w0, #-1 61 ret 62endfunc console_lpuart_putc 63 64func console_lpuart_getc 65 ldr x0, [x0, #CONSOLE_T_BASE] 66 cbz x0, getc_error 67 /* Check if the receive FIFO state */ 68 ret 69getc_error: 70 mov w0, #-1 71 ret 72endfunc console_lpuart_getc 73 74func console_lpuart_flush 75 ret 76endfunc console_lpuart_flush 77