xref: /rk3399_ARM-atf/drivers/renesas/common/console/rcar_console.S (revision 865e34741b02b3a9ddf9f652f2649407f33debb0)
1*865e3474SBiju Das/*
2*865e3474SBiju Das * Copyright (c) 2018-2019, Renesas Electronics Corporation. All rights reserved.
3*865e3474SBiju Das *
4*865e3474SBiju Das * SPDX-License-Identifier: BSD-3-Clause
5*865e3474SBiju Das */
6*865e3474SBiju Das
7*865e3474SBiju Das#include <arch.h>
8*865e3474SBiju Das#include <asm_macros.S>
9*865e3474SBiju Das#include <console_macros.S>
10*865e3474SBiju Das#include <drivers/renesas/rcar/console/console.h>
11*865e3474SBiju Das
12*865e3474SBiju Das	.globl	console_rcar_register
13*865e3474SBiju Das	.globl	console_rcar_init
14*865e3474SBiju Das	.globl	console_rcar_putc
15*865e3474SBiju Das	.globl	console_rcar_flush
16*865e3474SBiju Das
17*865e3474SBiju Das	.extern	rcar_log_init
18*865e3474SBiju Das	.extern	rcar_set_log_data
19*865e3474SBiju Das
20*865e3474SBiju Das	/* -----------------------------------------------
21*865e3474SBiju Das	 * int console_rcar_register(
22*865e3474SBiju Das	 *      uintptr_t base, uint32_t clk, uint32_t baud,
23*865e3474SBiju Das	 *      console_t *console)
24*865e3474SBiju Das	 * Function to initialize and register a new rcar
25*865e3474SBiju Das	 * console. Storage passed in for the console struct
26*865e3474SBiju Das	 * *must* be persistent (i.e. not from the stack).
27*865e3474SBiju Das	 * In: x0 - UART register base address
28*865e3474SBiju Das	 *     w1 - UART clock in Hz
29*865e3474SBiju Das	 *     w2 - Baud rate
30*865e3474SBiju Das	 *     x3 - pointer to empty console_t struct
31*865e3474SBiju Das	 * Out: return 1 on success, 0 on error
32*865e3474SBiju Das	 * Clobber list : x0, x1, x2, x6, x7, x14
33*865e3474SBiju Das	 * -----------------------------------------------
34*865e3474SBiju Das	 */
35*865e3474SBiju Dasfunc console_rcar_register
36*865e3474SBiju Das	mov	x7, x30
37*865e3474SBiju Das	mov	x6, x3
38*865e3474SBiju Das	cbz	x6, register_fail
39*865e3474SBiju Das	str	x0, [x6, #CONSOLE_T_BASE]
40*865e3474SBiju Das
41*865e3474SBiju Das	bl	rcar_log_init
42*865e3474SBiju Das	cbz	x0, register_fail
43*865e3474SBiju Das
44*865e3474SBiju Das	mov	x0, x6
45*865e3474SBiju Das	mov	x30, x7
46*865e3474SBiju Das	finish_console_register rcar, putc=1, getc=0, flush=1
47*865e3474SBiju Das
48*865e3474SBiju Dasregister_fail:
49*865e3474SBiju Das	ret	x7
50*865e3474SBiju Dasendfunc console_rcar_register
51*865e3474SBiju Das
52*865e3474SBiju Das	/* ---------------------------------------------
53*865e3474SBiju Das	 * int console_rcar_init(unsigned long base_addr,
54*865e3474SBiju Das	 * unsigned int uart_clk, unsigned int baud_rate)
55*865e3474SBiju Das	 * Function to initialize the console without a
56*865e3474SBiju Das	 * C Runtime to print debug information. This
57*865e3474SBiju Das	 * function will be accessed by crash reporting.
58*865e3474SBiju Das	 * In: x0 - console base address
59*865e3474SBiju Das	 *     w1 - Uart clock in Hz
60*865e3474SBiju Das	 *     w2 - Baud rate
61*865e3474SBiju Das	 * Out: return 1 on success
62*865e3474SBiju Das	 * Clobber list : x1, x2
63*865e3474SBiju Das	 * ---------------------------------------------
64*865e3474SBiju Das	 */
65*865e3474SBiju Dasfunc console_rcar_init
66*865e3474SBiju Das	mov	w0, #0
67*865e3474SBiju Das	ret
68*865e3474SBiju Dasendfunc console_rcar_init
69*865e3474SBiju Das
70*865e3474SBiju Das	/* --------------------------------------------------------
71*865e3474SBiju Das	 * int console_rcar_putc(int c, console_t *console)
72*865e3474SBiju Das	 * Function to output a character over the console. It
73*865e3474SBiju Das	 * returns the character printed on success or -1 on error.
74*865e3474SBiju Das	 * In : w0 - character to be printed
75*865e3474SBiju Das	 *      x1 - pointer to console_t structure
76*865e3474SBiju Das	 * Out : return -1 on error else return character.
77*865e3474SBiju Das	 * Clobber list : x2
78*865e3474SBiju Das	 * --------------------------------------------------------
79*865e3474SBiju Das	 */
80*865e3474SBiju Dasfunc console_rcar_putc
81*865e3474SBiju Das	b	rcar_set_log_data
82*865e3474SBiju Dasendfunc console_rcar_putc
83*865e3474SBiju Das
84*865e3474SBiju Das	/* ---------------------------------------------
85*865e3474SBiju Das	 * void console_rcar_flush(void)
86*865e3474SBiju Das	 * Function to force a write of all buffered
87*865e3474SBiju Das	 * data that hasn't been output. It returns void
88*865e3474SBiju Das	 * Clobber list : x0, x1
89*865e3474SBiju Das	 * ---------------------------------------------
90*865e3474SBiju Das	 */
91*865e3474SBiju Dasfunc console_rcar_flush
92*865e3474SBiju Das	ret
93*865e3474SBiju Dasendfunc console_rcar_flush
94