xref: /rk3399_ARM-atf/plat/common/aarch64/crash_console_helpers.S (revision 6c9ada3150c08da557348a6f88c794caf62740c4)
1*6c9ada31SAntonio Nino Diaz/*
2*6c9ada31SAntonio Nino Diaz * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
3*6c9ada31SAntonio Nino Diaz *
4*6c9ada31SAntonio Nino Diaz * SPDX-License-Identifier: BSD-3-Clause
5*6c9ada31SAntonio Nino Diaz */
6*6c9ada31SAntonio Nino Diaz
7*6c9ada31SAntonio Nino Diaz/*
8*6c9ada31SAntonio Nino Diaz * If a platform wishes to use the functions in this file it has to be added to
9*6c9ada31SAntonio Nino Diaz * the Makefile of the platform. It is not included in the common Makefile.
10*6c9ada31SAntonio Nino Diaz */
11*6c9ada31SAntonio Nino Diaz
12*6c9ada31SAntonio Nino Diaz#include <asm_macros.S>
13*6c9ada31SAntonio Nino Diaz#include <console.h>
14*6c9ada31SAntonio Nino Diaz
15*6c9ada31SAntonio Nino Diaz	.globl	plat_crash_console_init
16*6c9ada31SAntonio Nino Diaz	.globl	plat_crash_console_putc
17*6c9ada31SAntonio Nino Diaz	.globl	plat_crash_console_flush
18*6c9ada31SAntonio Nino Diaz
19*6c9ada31SAntonio Nino Diaz#if MULTI_CONSOLE_API
20*6c9ada31SAntonio Nino Diaz
21*6c9ada31SAntonio Nino Diaz	/* -----------------------------------------------------
22*6c9ada31SAntonio Nino Diaz	 * int plat_crash_console_init(void)
23*6c9ada31SAntonio Nino Diaz	 * Use normal console by default. Switch it to crash
24*6c9ada31SAntonio Nino Diaz	 * mode so serial consoles become active again.
25*6c9ada31SAntonio Nino Diaz	 * NOTE: This default implementation will only work for
26*6c9ada31SAntonio Nino Diaz	 * crashes that occur after a normal console (marked
27*6c9ada31SAntonio Nino Diaz	 * valid for the crash state) has been registered with
28*6c9ada31SAntonio Nino Diaz	 * the console framework. To debug crashes that occur
29*6c9ada31SAntonio Nino Diaz	 * earlier, the platform has to override these functions
30*6c9ada31SAntonio Nino Diaz	 * with an implementation that initializes a console
31*6c9ada31SAntonio Nino Diaz	 * driver with hardcoded parameters. See
32*6c9ada31SAntonio Nino Diaz	 * docs/porting-guide.rst for more information.
33*6c9ada31SAntonio Nino Diaz	 * -----------------------------------------------------
34*6c9ada31SAntonio Nino Diaz	 */
35*6c9ada31SAntonio Nino Diazfunc plat_crash_console_init
36*6c9ada31SAntonio Nino Diaz#if defined(IMAGE_BL1)
37*6c9ada31SAntonio Nino Diaz	/*
38*6c9ada31SAntonio Nino Diaz	 * BL1 code can possibly crash so early that the data segment is not yet
39*6c9ada31SAntonio Nino Diaz	 * accessible. Don't risk undefined behavior by trying to run the normal
40*6c9ada31SAntonio Nino Diaz	 * console framework. Platforms that want to debug BL1 will need to
41*6c9ada31SAntonio Nino Diaz	 * override this with custom functions that can run from registers only.
42*6c9ada31SAntonio Nino Diaz	 */
43*6c9ada31SAntonio Nino Diaz	mov	x0, #0
44*6c9ada31SAntonio Nino Diaz	ret
45*6c9ada31SAntonio Nino Diaz#else	/* IMAGE_BL1 */
46*6c9ada31SAntonio Nino Diaz	mov	x3, x30
47*6c9ada31SAntonio Nino Diaz	mov	x0, #CONSOLE_FLAG_CRASH
48*6c9ada31SAntonio Nino Diaz	bl	console_switch_state
49*6c9ada31SAntonio Nino Diaz	mov	x0, #1
50*6c9ada31SAntonio Nino Diaz	ret	x3
51*6c9ada31SAntonio Nino Diaz#endif
52*6c9ada31SAntonio Nino Diazendfunc plat_crash_console_init
53*6c9ada31SAntonio Nino Diaz
54*6c9ada31SAntonio Nino Diaz	/* -----------------------------------------------------
55*6c9ada31SAntonio Nino Diaz	 * void plat_crash_console_putc(int character)
56*6c9ada31SAntonio Nino Diaz	 * Output through the normal console by default.
57*6c9ada31SAntonio Nino Diaz	 * -----------------------------------------------------
58*6c9ada31SAntonio Nino Diaz	 */
59*6c9ada31SAntonio Nino Diazfunc plat_crash_console_putc
60*6c9ada31SAntonio Nino Diaz	b	console_putc
61*6c9ada31SAntonio Nino Diazendfunc plat_crash_console_putc
62*6c9ada31SAntonio Nino Diaz
63*6c9ada31SAntonio Nino Diaz	/* -----------------------------------------------------
64*6c9ada31SAntonio Nino Diaz	 * void plat_crash_console_flush(void)
65*6c9ada31SAntonio Nino Diaz	 * Flush normal console by default.
66*6c9ada31SAntonio Nino Diaz	 * -----------------------------------------------------
67*6c9ada31SAntonio Nino Diaz	 */
68*6c9ada31SAntonio Nino Diazfunc plat_crash_console_flush
69*6c9ada31SAntonio Nino Diaz	b	console_flush
70*6c9ada31SAntonio Nino Diazendfunc plat_crash_console_flush
71*6c9ada31SAntonio Nino Diaz
72*6c9ada31SAntonio Nino Diaz#else	/* MULTI_CONSOLE_API */
73*6c9ada31SAntonio Nino Diaz
74*6c9ada31SAntonio Nino Diaz	/* -----------------------------------------------------
75*6c9ada31SAntonio Nino Diaz	 * In the old API these are all no-op stubs that need to
76*6c9ada31SAntonio Nino Diaz	 * be overridden by the platform to be useful.
77*6c9ada31SAntonio Nino Diaz	 * -----------------------------------------------------
78*6c9ada31SAntonio Nino Diaz	 */
79*6c9ada31SAntonio Nino Diazfunc plat_crash_console_init
80*6c9ada31SAntonio Nino Diaz	mov	x0, #0
81*6c9ada31SAntonio Nino Diaz	ret
82*6c9ada31SAntonio Nino Diazendfunc plat_crash_console_init
83*6c9ada31SAntonio Nino Diaz
84*6c9ada31SAntonio Nino Diazfunc plat_crash_console_putc
85*6c9ada31SAntonio Nino Diaz	ret
86*6c9ada31SAntonio Nino Diazendfunc plat_crash_console_putc
87*6c9ada31SAntonio Nino Diaz
88*6c9ada31SAntonio Nino Diazfunc plat_crash_console_flush
89*6c9ada31SAntonio Nino Diaz	ret
90*6c9ada31SAntonio Nino Diazendfunc plat_crash_console_flush
91*6c9ada31SAntonio Nino Diaz
92*6c9ada31SAntonio Nino Diaz#endif
93