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