xref: /rk3399_ARM-atf/plat/common/aarch64/crash_console_helpers.S (revision b2f7c9dd8052d5dd093f5875022a368e18a41383)
16c9ada31SAntonio Nino Diaz/*
26c9ada31SAntonio Nino Diaz * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
36c9ada31SAntonio Nino Diaz *
46c9ada31SAntonio Nino Diaz * SPDX-License-Identifier: BSD-3-Clause
56c9ada31SAntonio Nino Diaz */
66c9ada31SAntonio Nino Diaz
76c9ada31SAntonio Nino Diaz/*
86c9ada31SAntonio Nino Diaz * If a platform wishes to use the functions in this file it has to be added to
96c9ada31SAntonio Nino Diaz * the Makefile of the platform. It is not included in the common Makefile.
106c9ada31SAntonio Nino Diaz */
116c9ada31SAntonio Nino Diaz
126c9ada31SAntonio Nino Diaz#include <asm_macros.S>
136c9ada31SAntonio Nino Diaz#include <console.h>
146c9ada31SAntonio Nino Diaz
156c9ada31SAntonio Nino Diaz	.globl	plat_crash_console_init
166c9ada31SAntonio Nino Diaz	.globl	plat_crash_console_putc
176c9ada31SAntonio Nino Diaz	.globl	plat_crash_console_flush
186c9ada31SAntonio Nino Diaz
19*b2f7c9ddSJulius Werner#if !MULTI_CONSOLE_API
20*b2f7c9ddSJulius Werner#error "This crash console implementation only works with the MULTI_CONSOLE_API!"
21*b2f7c9ddSJulius Werner#endif
226c9ada31SAntonio Nino Diaz
236c9ada31SAntonio Nino Diaz	/* -----------------------------------------------------
246c9ada31SAntonio Nino Diaz	 * int plat_crash_console_init(void)
256c9ada31SAntonio Nino Diaz	 * Use normal console by default. Switch it to crash
266c9ada31SAntonio Nino Diaz	 * mode so serial consoles become active again.
276c9ada31SAntonio Nino Diaz	 * NOTE: This default implementation will only work for
286c9ada31SAntonio Nino Diaz	 * crashes that occur after a normal console (marked
296c9ada31SAntonio Nino Diaz	 * valid for the crash state) has been registered with
306c9ada31SAntonio Nino Diaz	 * the console framework. To debug crashes that occur
316c9ada31SAntonio Nino Diaz	 * earlier, the platform has to override these functions
326c9ada31SAntonio Nino Diaz	 * with an implementation that initializes a console
336c9ada31SAntonio Nino Diaz	 * driver with hardcoded parameters. See
346c9ada31SAntonio Nino Diaz	 * docs/porting-guide.rst for more information.
356c9ada31SAntonio Nino Diaz	 * -----------------------------------------------------
366c9ada31SAntonio Nino Diaz	 */
376c9ada31SAntonio Nino Diazfunc plat_crash_console_init
386c9ada31SAntonio Nino Diaz#if defined(IMAGE_BL1)
396c9ada31SAntonio Nino Diaz	/*
406c9ada31SAntonio Nino Diaz	 * BL1 code can possibly crash so early that the data segment is not yet
416c9ada31SAntonio Nino Diaz	 * accessible. Don't risk undefined behavior by trying to run the normal
426c9ada31SAntonio Nino Diaz	 * console framework. Platforms that want to debug BL1 will need to
436c9ada31SAntonio Nino Diaz	 * override this with custom functions that can run from registers only.
446c9ada31SAntonio Nino Diaz	 */
456c9ada31SAntonio Nino Diaz	mov	x0, #0
466c9ada31SAntonio Nino Diaz	ret
476c9ada31SAntonio Nino Diaz#else	/* IMAGE_BL1 */
486c9ada31SAntonio Nino Diaz	mov	x3, x30
496c9ada31SAntonio Nino Diaz	mov	x0, #CONSOLE_FLAG_CRASH
506c9ada31SAntonio Nino Diaz	bl	console_switch_state
516c9ada31SAntonio Nino Diaz	mov	x0, #1
526c9ada31SAntonio Nino Diaz	ret	x3
536c9ada31SAntonio Nino Diaz#endif
546c9ada31SAntonio Nino Diazendfunc plat_crash_console_init
556c9ada31SAntonio Nino Diaz
566c9ada31SAntonio Nino Diaz	/* -----------------------------------------------------
576c9ada31SAntonio Nino Diaz	 * void plat_crash_console_putc(int character)
586c9ada31SAntonio Nino Diaz	 * Output through the normal console by default.
596c9ada31SAntonio Nino Diaz	 * -----------------------------------------------------
606c9ada31SAntonio Nino Diaz	 */
616c9ada31SAntonio Nino Diazfunc plat_crash_console_putc
626c9ada31SAntonio Nino Diaz	b	console_putc
636c9ada31SAntonio Nino Diazendfunc plat_crash_console_putc
646c9ada31SAntonio Nino Diaz
656c9ada31SAntonio Nino Diaz	/* -----------------------------------------------------
666c9ada31SAntonio Nino Diaz	 * void plat_crash_console_flush(void)
676c9ada31SAntonio Nino Diaz	 * Flush normal console by default.
686c9ada31SAntonio Nino Diaz	 * -----------------------------------------------------
696c9ada31SAntonio Nino Diaz	 */
706c9ada31SAntonio Nino Diazfunc plat_crash_console_flush
716c9ada31SAntonio Nino Diaz	b	console_flush
726c9ada31SAntonio Nino Diazendfunc plat_crash_console_flush
73