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 /* ----------------------------------------------------- 206c9ada31SAntonio Nino Diaz * int plat_crash_console_init(void) 216c9ada31SAntonio Nino Diaz * Use normal console by default. Switch it to crash 226c9ada31SAntonio Nino Diaz * mode so serial consoles become active again. 236c9ada31SAntonio Nino Diaz * NOTE: This default implementation will only work for 246c9ada31SAntonio Nino Diaz * crashes that occur after a normal console (marked 256c9ada31SAntonio Nino Diaz * valid for the crash state) has been registered with 266c9ada31SAntonio Nino Diaz * the console framework. To debug crashes that occur 276c9ada31SAntonio Nino Diaz * earlier, the platform has to override these functions 286c9ada31SAntonio Nino Diaz * with an implementation that initializes a console 296c9ada31SAntonio Nino Diaz * driver with hardcoded parameters. See 306c9ada31SAntonio Nino Diaz * docs/porting-guide.rst for more information. 316c9ada31SAntonio Nino Diaz * ----------------------------------------------------- 326c9ada31SAntonio Nino Diaz */ 336c9ada31SAntonio Nino Diazfunc plat_crash_console_init 346c9ada31SAntonio Nino Diaz#if defined(IMAGE_BL1) 356c9ada31SAntonio Nino Diaz /* 366c9ada31SAntonio Nino Diaz * BL1 code can possibly crash so early that the data segment is not yet 376c9ada31SAntonio Nino Diaz * accessible. Don't risk undefined behavior by trying to run the normal 386c9ada31SAntonio Nino Diaz * console framework. Platforms that want to debug BL1 will need to 396c9ada31SAntonio Nino Diaz * override this with custom functions that can run from registers only. 406c9ada31SAntonio Nino Diaz */ 416c9ada31SAntonio Nino Diaz mov r0, #0 426c9ada31SAntonio Nino Diaz bx lr 436c9ada31SAntonio Nino Diaz#else /* IMAGE_BL1 */ 446c9ada31SAntonio Nino Diaz mov r3, lr 456c9ada31SAntonio Nino Diaz mov r0, #CONSOLE_FLAG_CRASH 466c9ada31SAntonio Nino Diaz bl console_switch_state 476c9ada31SAntonio Nino Diaz mov r0, #1 486c9ada31SAntonio Nino Diaz bx r3 496c9ada31SAntonio Nino Diaz#endif 506c9ada31SAntonio Nino Diazendfunc plat_crash_console_init 516c9ada31SAntonio Nino Diaz 526c9ada31SAntonio Nino Diaz /* ----------------------------------------------------- 536c9ada31SAntonio Nino Diaz * void plat_crash_console_putc(int character) 546c9ada31SAntonio Nino Diaz * Output through the normal console by default. 556c9ada31SAntonio Nino Diaz * ----------------------------------------------------- 566c9ada31SAntonio Nino Diaz */ 576c9ada31SAntonio Nino Diazfunc plat_crash_console_putc 586c9ada31SAntonio Nino Diaz b console_putc 596c9ada31SAntonio Nino Diazendfunc plat_crash_console_putc 606c9ada31SAntonio Nino Diaz 616c9ada31SAntonio Nino Diaz /* ----------------------------------------------------- 626c9ada31SAntonio Nino Diaz * void plat_crash_console_flush(void) 636c9ada31SAntonio Nino Diaz * Flush normal console by default. 646c9ada31SAntonio Nino Diaz * ----------------------------------------------------- 656c9ada31SAntonio Nino Diaz */ 666c9ada31SAntonio Nino Diazfunc plat_crash_console_flush 676c9ada31SAntonio Nino Diaz b console_flush 686c9ada31SAntonio Nino Diazendfunc plat_crash_console_flush 69