xref: /rk3399_ARM-atf/plat/common/aarch32/crash_console_helpers.S (revision 09d40e0e08283a249e7dce0e106c07c5141f9b7e)
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>
13*09d40e0eSAntonio Nino Diaz#include <drivers/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
196c9ada31SAntonio Nino Diaz#if MULTI_CONSOLE_API
206c9ada31SAntonio Nino Diaz
216c9ada31SAntonio Nino Diaz	/* -----------------------------------------------------
226c9ada31SAntonio Nino Diaz	 * int plat_crash_console_init(void)
236c9ada31SAntonio Nino Diaz	 * Use normal console by default. Switch it to crash
246c9ada31SAntonio Nino Diaz	 * mode so serial consoles become active again.
256c9ada31SAntonio Nino Diaz	 * NOTE: This default implementation will only work for
266c9ada31SAntonio Nino Diaz	 * crashes that occur after a normal console (marked
276c9ada31SAntonio Nino Diaz	 * valid for the crash state) has been registered with
286c9ada31SAntonio Nino Diaz	 * the console framework. To debug crashes that occur
296c9ada31SAntonio Nino Diaz	 * earlier, the platform has to override these functions
306c9ada31SAntonio Nino Diaz	 * with an implementation that initializes a console
316c9ada31SAntonio Nino Diaz	 * driver with hardcoded parameters. See
326c9ada31SAntonio Nino Diaz	 * docs/porting-guide.rst for more information.
336c9ada31SAntonio Nino Diaz	 * -----------------------------------------------------
346c9ada31SAntonio Nino Diaz	 */
356c9ada31SAntonio Nino Diazfunc plat_crash_console_init
366c9ada31SAntonio Nino Diaz#if defined(IMAGE_BL1)
376c9ada31SAntonio Nino Diaz	/*
386c9ada31SAntonio Nino Diaz	 * BL1 code can possibly crash so early that the data segment is not yet
396c9ada31SAntonio Nino Diaz	 * accessible. Don't risk undefined behavior by trying to run the normal
406c9ada31SAntonio Nino Diaz	 * console framework. Platforms that want to debug BL1 will need to
416c9ada31SAntonio Nino Diaz	 * override this with custom functions that can run from registers only.
426c9ada31SAntonio Nino Diaz	 */
436c9ada31SAntonio Nino Diaz	mov	r0, #0
446c9ada31SAntonio Nino Diaz	bx	lr
456c9ada31SAntonio Nino Diaz#else	/* IMAGE_BL1 */
466c9ada31SAntonio Nino Diaz	mov	r3, lr
476c9ada31SAntonio Nino Diaz	mov	r0, #CONSOLE_FLAG_CRASH
486c9ada31SAntonio Nino Diaz	bl	console_switch_state
496c9ada31SAntonio Nino Diaz	mov	r0, #1
506c9ada31SAntonio Nino Diaz	bx	r3
516c9ada31SAntonio Nino Diaz#endif
526c9ada31SAntonio Nino Diazendfunc plat_crash_console_init
536c9ada31SAntonio Nino Diaz
546c9ada31SAntonio Nino Diaz	/* -----------------------------------------------------
556c9ada31SAntonio Nino Diaz	 * void plat_crash_console_putc(int character)
566c9ada31SAntonio Nino Diaz	 * Output through the normal console by default.
576c9ada31SAntonio Nino Diaz	 * -----------------------------------------------------
586c9ada31SAntonio Nino Diaz	 */
596c9ada31SAntonio Nino Diazfunc plat_crash_console_putc
606c9ada31SAntonio Nino Diaz	b	console_putc
616c9ada31SAntonio Nino Diazendfunc plat_crash_console_putc
626c9ada31SAntonio Nino Diaz
636c9ada31SAntonio Nino Diaz	/* -----------------------------------------------------
646c9ada31SAntonio Nino Diaz	 * void plat_crash_console_flush(void)
656c9ada31SAntonio Nino Diaz	 * Flush normal console by default.
666c9ada31SAntonio Nino Diaz	 * -----------------------------------------------------
676c9ada31SAntonio Nino Diaz	 */
686c9ada31SAntonio Nino Diazfunc plat_crash_console_flush
696c9ada31SAntonio Nino Diaz	b	console_flush
706c9ada31SAntonio Nino Diazendfunc plat_crash_console_flush
716c9ada31SAntonio Nino Diaz
726c9ada31SAntonio Nino Diaz#else	/* MULTI_CONSOLE_API */
736c9ada31SAntonio Nino Diaz
746c9ada31SAntonio Nino Diaz	/* -----------------------------------------------------
756c9ada31SAntonio Nino Diaz	 * In the old API these are all no-op stubs that need to
766c9ada31SAntonio Nino Diaz	 * be overridden by the platform to be useful.
776c9ada31SAntonio Nino Diaz	 * -----------------------------------------------------
786c9ada31SAntonio Nino Diaz	 */
796c9ada31SAntonio Nino Diazfunc plat_crash_console_init
806c9ada31SAntonio Nino Diaz	mov	r0, #0
816c9ada31SAntonio Nino Diaz	bx	lr
826c9ada31SAntonio Nino Diazendfunc plat_crash_console_init
836c9ada31SAntonio Nino Diaz
846c9ada31SAntonio Nino Diazfunc plat_crash_console_putc
856c9ada31SAntonio Nino Diaz	bx	lr
866c9ada31SAntonio Nino Diazendfunc plat_crash_console_putc
876c9ada31SAntonio Nino Diaz
886c9ada31SAntonio Nino Diazfunc plat_crash_console_flush
896c9ada31SAntonio Nino Diaz	bx	lr
906c9ada31SAntonio Nino Diazendfunc plat_crash_console_flush
916c9ada31SAntonio Nino Diaz
926c9ada31SAntonio Nino Diaz#endif
93