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