1/* 2 * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7/* 8 * If a platform wishes to use the functions in this file it has to be added to 9 * the Makefile of the platform. It is not included in the common Makefile. 10 */ 11 12#include <asm_macros.S> 13#include <drivers/console.h> 14 15 .globl plat_crash_console_init 16 .globl plat_crash_console_putc 17 .globl plat_crash_console_flush 18 19 /* ----------------------------------------------------- 20 * int plat_crash_console_init(void) 21 * Use normal console by default. Switch it to crash 22 * mode so serial consoles become active again. 23 * NOTE: This default implementation will only work for 24 * crashes that occur after a normal console (marked 25 * valid for the crash state) has been registered with 26 * the console framework. To debug crashes that occur 27 * earlier, the platform has to override these functions 28 * with an implementation that initializes a console 29 * driver with hardcoded parameters. See 30 * docs/porting-guide.rst for more information. 31 * ----------------------------------------------------- 32 */ 33func plat_crash_console_init 34#if defined(IMAGE_BL1) 35 /* 36 * BL1 code can possibly crash so early that the data segment is not yet 37 * accessible. Don't risk undefined behavior by trying to run the normal 38 * console framework. Platforms that want to debug BL1 will need to 39 * override this with custom functions that can run from registers only. 40 */ 41 mov r0, #0 42 bx lr 43#else /* IMAGE_BL1 */ 44 mov r3, lr 45 mov r0, #CONSOLE_FLAG_CRASH 46 bl console_switch_state 47 mov r0, #1 48 bx r3 49#endif 50endfunc plat_crash_console_init 51 52 /* ----------------------------------------------------- 53 * void plat_crash_console_putc(int character) 54 * Output through the normal console by default. 55 * ----------------------------------------------------- 56 */ 57func plat_crash_console_putc 58 b console_putc 59endfunc plat_crash_console_putc 60 61 /* ----------------------------------------------------- 62 * void plat_crash_console_flush(void) 63 * Flush normal console by default. 64 * ----------------------------------------------------- 65 */ 66func plat_crash_console_flush 67 b console_flush 68endfunc plat_crash_console_flush 69