blob: ad71b89f2ace2daeab572137afdae16382429919 [file] [log] [blame]
Anson Huang5aba17f2018-06-05 16:11:24 +08001/*
2 * Copyright (c) 2015-2018, 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
18func console_lpuart_register
19 mov x7, x30
20 mov x6, x3
21 cbz x6, register_fail
22 str x0, [x6, #CONSOLE_T_DRVDATA]
23
24 bl console_lpuart_init
25 cbz x0, register_fail
26
27 mov x0, x6
28 mov x30, x7
29 finish_console_register lpuart
30
31register_fail:
32 ret x7
33endfunc console_lpuart_register
34
35func console_lpuart_init
36 mov w0, #1
37 ret
38endfunc console_lpuart_init
39
40func console_lpuart_putc
41 ldr x1, [x1, #CONSOLE_T_DRVDATA]
42 cbz x1, putc_error
43 /* Prepare '\r' to '\n' */
44 cmp w0, #0xA
45 b.ne 2f
461:
47 /* Check if the transmit FIFO is full */
48 ldr w2, [x1, #STAT]
49 tbz w2, #23, 1b
50 mov w2, #0xD
51 str w2, [x1, #DATA]
522:
53 /* Check if the transmit FIFO is full */
54 ldr w2, [x1, #STAT]
55 tbz w2, #23, 2b
56 str w0, [x1, #DATA]
57 ret
58putc_error:
59 mov w0, #-1
60 ret
61endfunc console_lpuart_putc
62
63func console_lpuart_getc
64 ldr x0, [x0, #CONSOLE_T_DRVDATA]
65 cbz x0, getc_error
66 /* Check if the receive FIFO state */
67 ret
68getc_error:
69 mov w0, #-1
70 ret
71endfunc console_lpuart_getc