blob: 668fd624964ab0e1bccd0091b97f1bf026909bda [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>
Soby Mathew58873ae2018-10-10 16:03:09 +01009#define USE_FINISH_CONSOLE_REG_2
Anson Huang5aba17f2018-06-05 16:11:24 +080010#include <console_macros.S>
11#include <assert_macros.S>
12#include "imx8_lpuart.h"
13
14 .globl console_lpuart_register
15 .globl console_lpuart_init
16 .globl console_lpuart_putc
17 .globl console_lpuart_getc
18
19func console_lpuart_register
20 mov x7, x30
21 mov x6, x3
22 cbz x6, register_fail
23 str x0, [x6, #CONSOLE_T_DRVDATA]
24
25 bl console_lpuart_init
26 cbz x0, register_fail
27
28 mov x0, x6
29 mov x30, x7
Soby Mathew58873ae2018-10-10 16:03:09 +010030 finish_console_register lpuart putc=1, getc=1
Anson Huang5aba17f2018-06-05 16:11:24 +080031
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_DRVDATA]
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_DRVDATA]
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