"readme.rst" did not exist on "fce5f7501afad3fb1aa0cbff3c3d666e2c0f36f9"
Commit 27b9d5ea authored by Anson Huang's avatar Anson Huang
Browse files

Support for NXP's imx SoC debug uart


Add NXP's imx SoC debug uart driver.
Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
parent ff2743e5
Showing with 137 additions and 0 deletions
+137 -0
/*
* Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __IMX_LPUART_H__
#define __IMX_LPUART_H__
#include <console.h>
#define VERID 0x0
#define PARAM 0x4
#define GLOBAL 0x8
#define PINCFG 0xC
#define BAUD 0x10
#define STAT 0x14
#define CTRL 0x18
#define DATA 0x1C
#define MATCH 0x20
#define MODIR 0x24
#define FIFO 0x28
#define WATER 0x2c
#define US1_TDRE (1 << 23)
#define US1_RDRF (1 << 21)
#define CTRL_TE (1 << 19)
#define CTRL_RE (1 << 18)
#define FIFO_TXFE 0x80
#define FIFO_RXFE 0x40
#define WATER_TXWATER_OFF 1
#define WATER_RXWATER_OFF 16
#define LPUART_CTRL_PT_MASK 0x1
#define LPUART_CTRL_PE_MASK 0x2
#define LPUART_CTRL_M_MASK 0x10
#define LPUART_BAUD_OSR_MASK (0x1F000000U)
#define LPUART_BAUD_OSR_SHIFT (24U)
#define LPUART_BAUD_OSR(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_OSR_SHIFT)) & LPUART_BAUD_OSR_MASK)
#define LPUART_BAUD_SBR_MASK (0x1FFFU)
#define LPUART_BAUD_SBR_SHIFT (0U)
#define LPUART_BAUD_SBR(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_SBR_SHIFT)) & LPUART_BAUD_SBR_MASK)
#define LPUART_BAUD_SBNS_MASK (0x2000U)
#define LPUART_BAUD_BOTHEDGE_MASK (0x20000U)
#define LPUART_BAUD_M10_MASK (0x20000000U)
#ifndef __ASSEMBLY__
#include <types.h>
typedef struct {
console_t console;
uintptr_t base;
} console_lpuart_t;
int console_lpuart_register(uintptr_t baseaddr, uint32_t clock, uint32_t baud,
console_lpuart_t *console);
#endif /*__ASSEMBLY__*/
#endif /* __IMX_LPUART_H__*/
/*
* Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch.h>
#include <asm_macros.S>
#include <console_macros.S>
#include <assert_macros.S>
#include "imx8_lpuart.h"
.globl console_lpuart_register
.globl console_lpuart_init
.globl console_lpuart_putc
.globl console_lpuart_getc
func console_lpuart_register
mov x7, x30
mov x6, x3
cbz x6, register_fail
str x0, [x6, #CONSOLE_T_DRVDATA]
bl console_lpuart_init
cbz x0, register_fail
mov x0, x6
mov x30, x7
finish_console_register lpuart
register_fail:
ret x7
endfunc console_lpuart_register
func console_lpuart_init
mov w0, #1
ret
endfunc console_lpuart_init
func console_lpuart_putc
ldr x1, [x1, #CONSOLE_T_DRVDATA]
cbz x1, putc_error
/* Prepare '\r' to '\n' */
cmp w0, #0xA
b.ne 2f
1:
/* Check if the transmit FIFO is full */
ldr w2, [x1, #STAT]
tbz w2, #23, 1b
mov w2, #0xD
str w2, [x1, #DATA]
2:
/* Check if the transmit FIFO is full */
ldr w2, [x1, #STAT]
tbz w2, #23, 2b
str w0, [x1, #DATA]
ret
putc_error:
mov w0, #-1
ret
endfunc console_lpuart_putc
func console_lpuart_getc
ldr x0, [x0, #CONSOLE_T_DRVDATA]
cbz x0, getc_error
/* Check if the receive FIFO state */
ret
getc_error:
mov w0, #-1
ret
endfunc console_lpuart_getc
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment