127b9d5eaSAnson Huang/* 2*f1ac7964SAnson Huang * Copyright (c) 2015-2019, 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> 9cc5859caSSoby Mathew#define USE_FINISH_CONSOLE_REG_2 1027b9d5eaSAnson Huang#include <console_macros.S> 1127b9d5eaSAnson Huang#include <assert_macros.S> 1227b9d5eaSAnson Huang#include "imx8_lpuart.h" 1327b9d5eaSAnson Huang 1427b9d5eaSAnson Huang .globl console_lpuart_register 1527b9d5eaSAnson Huang .globl console_lpuart_init 1627b9d5eaSAnson Huang .globl console_lpuart_putc 1727b9d5eaSAnson Huang .globl console_lpuart_getc 18*f1ac7964SAnson Huang .globl console_lpuart_flush 1927b9d5eaSAnson Huang 2027b9d5eaSAnson Huangfunc console_lpuart_register 2127b9d5eaSAnson Huang mov x7, x30 2227b9d5eaSAnson Huang mov x6, x3 2327b9d5eaSAnson Huang cbz x6, register_fail 2427b9d5eaSAnson Huang str x0, [x6, #CONSOLE_T_DRVDATA] 2527b9d5eaSAnson Huang 2627b9d5eaSAnson Huang bl console_lpuart_init 2727b9d5eaSAnson Huang cbz x0, register_fail 2827b9d5eaSAnson Huang 2927b9d5eaSAnson Huang mov x0, x6 3027b9d5eaSAnson Huang mov x30, x7 31*f1ac7964SAnson Huang finish_console_register lpuart putc=1, getc=1, flush=1 3227b9d5eaSAnson Huang 3327b9d5eaSAnson Huangregister_fail: 3427b9d5eaSAnson Huang ret x7 3527b9d5eaSAnson Huangendfunc console_lpuart_register 3627b9d5eaSAnson Huang 3727b9d5eaSAnson Huangfunc console_lpuart_init 3827b9d5eaSAnson Huang mov w0, #1 3927b9d5eaSAnson Huang ret 4027b9d5eaSAnson Huangendfunc console_lpuart_init 4127b9d5eaSAnson Huang 4227b9d5eaSAnson Huangfunc console_lpuart_putc 4327b9d5eaSAnson Huang ldr x1, [x1, #CONSOLE_T_DRVDATA] 4427b9d5eaSAnson Huang cbz x1, putc_error 4527b9d5eaSAnson Huang /* Prepare '\r' to '\n' */ 4627b9d5eaSAnson Huang cmp w0, #0xA 4727b9d5eaSAnson Huang b.ne 2f 4827b9d5eaSAnson Huang1: 4927b9d5eaSAnson Huang /* Check if the transmit FIFO is full */ 5027b9d5eaSAnson Huang ldr w2, [x1, #STAT] 5127b9d5eaSAnson Huang tbz w2, #23, 1b 5227b9d5eaSAnson Huang mov w2, #0xD 5327b9d5eaSAnson Huang str w2, [x1, #DATA] 5427b9d5eaSAnson Huang2: 5527b9d5eaSAnson Huang /* Check if the transmit FIFO is full */ 5627b9d5eaSAnson Huang ldr w2, [x1, #STAT] 5727b9d5eaSAnson Huang tbz w2, #23, 2b 5827b9d5eaSAnson Huang str w0, [x1, #DATA] 5927b9d5eaSAnson Huang ret 6027b9d5eaSAnson Huangputc_error: 6127b9d5eaSAnson Huang mov w0, #-1 6227b9d5eaSAnson Huang ret 6327b9d5eaSAnson Huangendfunc console_lpuart_putc 6427b9d5eaSAnson Huang 6527b9d5eaSAnson Huangfunc console_lpuart_getc 6627b9d5eaSAnson Huang ldr x0, [x0, #CONSOLE_T_DRVDATA] 6727b9d5eaSAnson Huang cbz x0, getc_error 6827b9d5eaSAnson Huang /* Check if the receive FIFO state */ 6927b9d5eaSAnson Huang ret 7027b9d5eaSAnson Huanggetc_error: 7127b9d5eaSAnson Huang mov w0, #-1 7227b9d5eaSAnson Huang ret 7327b9d5eaSAnson Huangendfunc console_lpuart_getc 74*f1ac7964SAnson Huang 75*f1ac7964SAnson Huangfunc console_lpuart_flush 76*f1ac7964SAnson Huang mov x0, #0 77*f1ac7964SAnson Huang ret 78*f1ac7964SAnson Huangendfunc console_lpuart_flush 79