1*54fd6939SJiyong Park/* 2*54fd6939SJiyong Park * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved. 3*54fd6939SJiyong Park * 4*54fd6939SJiyong Park * SPDX-License-Identifier: BSD-3-Clause 5*54fd6939SJiyong Park */ 6*54fd6939SJiyong Park 7*54fd6939SJiyong Park#include <arch.h> 8*54fd6939SJiyong Park#include <asm_macros.S> 9*54fd6939SJiyong Park#include <console_macros.S> 10*54fd6939SJiyong Park#include <assert_macros.S> 11*54fd6939SJiyong Park#include "imx8_lpuart.h" 12*54fd6939SJiyong Park 13*54fd6939SJiyong Park .globl console_lpuart_register 14*54fd6939SJiyong Park .globl console_lpuart_init 15*54fd6939SJiyong Park .globl console_lpuart_putc 16*54fd6939SJiyong Park .globl console_lpuart_getc 17*54fd6939SJiyong Park .globl console_lpuart_flush 18*54fd6939SJiyong Park 19*54fd6939SJiyong Parkfunc console_lpuart_register 20*54fd6939SJiyong Park mov x7, x30 21*54fd6939SJiyong Park mov x6, x3 22*54fd6939SJiyong Park cbz x6, register_fail 23*54fd6939SJiyong Park str x0, [x6, #CONSOLE_T_BASE] 24*54fd6939SJiyong Park 25*54fd6939SJiyong Park bl console_lpuart_init 26*54fd6939SJiyong Park cbz x0, register_fail 27*54fd6939SJiyong Park 28*54fd6939SJiyong Park mov x0, x6 29*54fd6939SJiyong Park mov x30, x7 30*54fd6939SJiyong Park finish_console_register lpuart putc=1, getc=1, flush=1 31*54fd6939SJiyong Park 32*54fd6939SJiyong Parkregister_fail: 33*54fd6939SJiyong Park ret x7 34*54fd6939SJiyong Parkendfunc console_lpuart_register 35*54fd6939SJiyong Park 36*54fd6939SJiyong Parkfunc console_lpuart_init 37*54fd6939SJiyong Park mov w0, #1 38*54fd6939SJiyong Park ret 39*54fd6939SJiyong Parkendfunc console_lpuart_init 40*54fd6939SJiyong Park 41*54fd6939SJiyong Parkfunc console_lpuart_putc 42*54fd6939SJiyong Park ldr x1, [x1, #CONSOLE_T_BASE] 43*54fd6939SJiyong Park cbz x1, putc_error 44*54fd6939SJiyong Park /* Prepare '\r' to '\n' */ 45*54fd6939SJiyong Park cmp w0, #0xA 46*54fd6939SJiyong Park b.ne 2f 47*54fd6939SJiyong Park1: 48*54fd6939SJiyong Park /* Check if the transmit FIFO is full */ 49*54fd6939SJiyong Park ldr w2, [x1, #STAT] 50*54fd6939SJiyong Park tbz w2, #23, 1b 51*54fd6939SJiyong Park mov w2, #0xD 52*54fd6939SJiyong Park str w2, [x1, #DATA] 53*54fd6939SJiyong Park2: 54*54fd6939SJiyong Park /* Check if the transmit FIFO is full */ 55*54fd6939SJiyong Park ldr w2, [x1, #STAT] 56*54fd6939SJiyong Park tbz w2, #23, 2b 57*54fd6939SJiyong Park str w0, [x1, #DATA] 58*54fd6939SJiyong Park ret 59*54fd6939SJiyong Parkputc_error: 60*54fd6939SJiyong Park mov w0, #-1 61*54fd6939SJiyong Park ret 62*54fd6939SJiyong Parkendfunc console_lpuart_putc 63*54fd6939SJiyong Park 64*54fd6939SJiyong Parkfunc console_lpuart_getc 65*54fd6939SJiyong Park ldr x0, [x0, #CONSOLE_T_BASE] 66*54fd6939SJiyong Park cbz x0, getc_error 67*54fd6939SJiyong Park /* Check if the receive FIFO state */ 68*54fd6939SJiyong Park ret 69*54fd6939SJiyong Parkgetc_error: 70*54fd6939SJiyong Park mov w0, #-1 71*54fd6939SJiyong Park ret 72*54fd6939SJiyong Parkendfunc console_lpuart_getc 73*54fd6939SJiyong Park 74*54fd6939SJiyong Parkfunc console_lpuart_flush 75*54fd6939SJiyong Park ret 76*54fd6939SJiyong Parkendfunc console_lpuart_flush 77