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