xref: /rk3399_ARM-atf/plat/imx/common/lpuart_console.S (revision 3312fe8387b9379f6aefe8e075baa28802108244)
127b9d5eaSAnson Huang/*
2831b0e98SJimmy Brisson * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
327b9d5eaSAnson Huang *
427b9d5eaSAnson Huang * SPDX-License-Identifier: BSD-3-Clause
527b9d5eaSAnson Huang */
627b9d5eaSAnson Huang
727b9d5eaSAnson Huang#include <arch.h>
827b9d5eaSAnson Huang#include <asm_macros.S>
927b9d5eaSAnson Huang#include <console_macros.S>
1027b9d5eaSAnson Huang#include <assert_macros.S>
1127b9d5eaSAnson Huang#include "imx8_lpuart.h"
1227b9d5eaSAnson Huang
1327b9d5eaSAnson Huang	.globl	console_lpuart_register
1427b9d5eaSAnson Huang	.globl	console_lpuart_init
1527b9d5eaSAnson Huang	.globl	console_lpuart_putc
1627b9d5eaSAnson Huang	.globl	console_lpuart_getc
17f1ac7964SAnson Huang	.globl	console_lpuart_flush
1827b9d5eaSAnson Huang
1927b9d5eaSAnson Huangfunc console_lpuart_register
2027b9d5eaSAnson Huang	mov	x7, x30
2127b9d5eaSAnson Huang	mov	x6, x3
2227b9d5eaSAnson Huang	cbz	x6, register_fail
236627de53SAndre Przywara	str	x0, [x6, #CONSOLE_T_BASE]
2427b9d5eaSAnson Huang
2527b9d5eaSAnson Huang	bl	console_lpuart_init
2627b9d5eaSAnson Huang	cbz	x0, register_fail
2727b9d5eaSAnson Huang
2827b9d5eaSAnson Huang	mov	x0, x6
2927b9d5eaSAnson Huang	mov	x30, x7
30*85bebe18SSandrine Bailleux	finish_console_register lpuart putc=1, getc=ENABLE_CONSOLE_GETC, flush=1
3127b9d5eaSAnson Huang
3227b9d5eaSAnson Huangregister_fail:
3327b9d5eaSAnson Huang	ret	x7
3427b9d5eaSAnson Huangendfunc console_lpuart_register
3527b9d5eaSAnson Huang
3627b9d5eaSAnson Huangfunc console_lpuart_init
3727b9d5eaSAnson Huang	mov	w0, #1
3827b9d5eaSAnson Huang	ret
3927b9d5eaSAnson Huangendfunc console_lpuart_init
4027b9d5eaSAnson Huang
4127b9d5eaSAnson Huangfunc console_lpuart_putc
426627de53SAndre Przywara	ldr	x1, [x1, #CONSOLE_T_BASE]
4327b9d5eaSAnson Huang	cbz	x1, putc_error
4427b9d5eaSAnson Huang	/* Prepare '\r' to '\n' */
4527b9d5eaSAnson Huang	cmp	w0, #0xA
4627b9d5eaSAnson Huang	b.ne	2f
4727b9d5eaSAnson Huang1:
4827b9d5eaSAnson Huang	/* Check if the transmit FIFO is full */
4927b9d5eaSAnson Huang	ldr	w2, [x1, #STAT]
5027b9d5eaSAnson Huang	tbz	w2, #23, 1b
5127b9d5eaSAnson Huang	mov	w2, #0xD
5227b9d5eaSAnson Huang	str	w2, [x1, #DATA]
5327b9d5eaSAnson Huang2:
5427b9d5eaSAnson Huang	/* Check if the transmit FIFO is full */
5527b9d5eaSAnson Huang	ldr	w2, [x1, #STAT]
5627b9d5eaSAnson Huang	tbz	w2, #23, 2b
5727b9d5eaSAnson Huang	str	w0, [x1, #DATA]
5827b9d5eaSAnson Huang	ret
5927b9d5eaSAnson Huangputc_error:
6027b9d5eaSAnson Huang	mov	w0, #-1
6127b9d5eaSAnson Huang	ret
6227b9d5eaSAnson Huangendfunc console_lpuart_putc
6327b9d5eaSAnson Huang
6427b9d5eaSAnson Huangfunc console_lpuart_getc
656627de53SAndre Przywara	ldr	x0, [x0, #CONSOLE_T_BASE]
6627b9d5eaSAnson Huang	cbz	x0, getc_error
6727b9d5eaSAnson Huang	/* Check if the receive FIFO state */
6827b9d5eaSAnson Huang	ret
6927b9d5eaSAnson Huanggetc_error:
7027b9d5eaSAnson Huang	mov	w0, #-1
7127b9d5eaSAnson Huang	ret
7227b9d5eaSAnson Huangendfunc console_lpuart_getc
73f1ac7964SAnson Huang
74f1ac7964SAnson Huangfunc console_lpuart_flush
75f1ac7964SAnson Huang	ret
76f1ac7964SAnson Huangendfunc console_lpuart_flush
77