1*88a0523eSAntonio Nino Diaz /* 2*88a0523eSAntonio Nino Diaz * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. 3*88a0523eSAntonio Nino Diaz * 4*88a0523eSAntonio Nino Diaz * SPDX-License-Identifier: BSD-3-Clause 5*88a0523eSAntonio Nino Diaz */ 6*88a0523eSAntonio Nino Diaz #include <assert.h> 7*88a0523eSAntonio Nino Diaz #include <console.h> 8*88a0523eSAntonio Nino Diaz #include <debug.h> 9*88a0523eSAntonio Nino Diaz #include <pl011.h> 10*88a0523eSAntonio Nino Diaz #include <plat_arm.h> 11*88a0523eSAntonio Nino Diaz #include <platform_def.h> 12*88a0523eSAntonio Nino Diaz 13*88a0523eSAntonio Nino Diaz /******************************************************************************* 14*88a0523eSAntonio Nino Diaz * Functions that set up the console 15*88a0523eSAntonio Nino Diaz ******************************************************************************/ 16*88a0523eSAntonio Nino Diaz #if MULTI_CONSOLE_API 17*88a0523eSAntonio Nino Diaz static console_pl011_t arm_boot_console; 18*88a0523eSAntonio Nino Diaz static console_pl011_t arm_runtime_console; 19*88a0523eSAntonio Nino Diaz #endif 20*88a0523eSAntonio Nino Diaz 21*88a0523eSAntonio Nino Diaz /* Initialize the console to provide early debug support */ 22*88a0523eSAntonio Nino Diaz void arm_console_boot_init(void) 23*88a0523eSAntonio Nino Diaz { 24*88a0523eSAntonio Nino Diaz #if MULTI_CONSOLE_API 25*88a0523eSAntonio Nino Diaz int rc = console_pl011_register(PLAT_ARM_BOOT_UART_BASE, 26*88a0523eSAntonio Nino Diaz PLAT_ARM_BOOT_UART_CLK_IN_HZ, 27*88a0523eSAntonio Nino Diaz ARM_CONSOLE_BAUDRATE, 28*88a0523eSAntonio Nino Diaz &arm_boot_console); 29*88a0523eSAntonio Nino Diaz if (rc == 0) { 30*88a0523eSAntonio Nino Diaz /* 31*88a0523eSAntonio Nino Diaz * The crash console doesn't use the multi console API, it uses 32*88a0523eSAntonio Nino Diaz * the core console functions directly. It is safe to call panic 33*88a0523eSAntonio Nino Diaz * and let it print debug information. 34*88a0523eSAntonio Nino Diaz */ 35*88a0523eSAntonio Nino Diaz panic(); 36*88a0523eSAntonio Nino Diaz } 37*88a0523eSAntonio Nino Diaz 38*88a0523eSAntonio Nino Diaz console_set_scope(&arm_boot_console.console, CONSOLE_FLAG_BOOT); 39*88a0523eSAntonio Nino Diaz #else 40*88a0523eSAntonio Nino Diaz (void)console_init(PLAT_ARM_BOOT_UART_BASE, 41*88a0523eSAntonio Nino Diaz PLAT_ARM_BOOT_UART_CLK_IN_HZ, 42*88a0523eSAntonio Nino Diaz ARM_CONSOLE_BAUDRATE); 43*88a0523eSAntonio Nino Diaz #endif /* MULTI_CONSOLE_API */ 44*88a0523eSAntonio Nino Diaz } 45*88a0523eSAntonio Nino Diaz 46*88a0523eSAntonio Nino Diaz void arm_console_boot_end(void) 47*88a0523eSAntonio Nino Diaz { 48*88a0523eSAntonio Nino Diaz (void)console_flush(); 49*88a0523eSAntonio Nino Diaz 50*88a0523eSAntonio Nino Diaz #if MULTI_CONSOLE_API 51*88a0523eSAntonio Nino Diaz (void)console_unregister(&arm_boot_console.console); 52*88a0523eSAntonio Nino Diaz #else 53*88a0523eSAntonio Nino Diaz console_uninit(); 54*88a0523eSAntonio Nino Diaz #endif /* MULTI_CONSOLE_API */ 55*88a0523eSAntonio Nino Diaz } 56*88a0523eSAntonio Nino Diaz 57*88a0523eSAntonio Nino Diaz /* Initialize the runtime console */ 58*88a0523eSAntonio Nino Diaz void arm_console_runtime_init(void) 59*88a0523eSAntonio Nino Diaz { 60*88a0523eSAntonio Nino Diaz #if MULTI_CONSOLE_API 61*88a0523eSAntonio Nino Diaz int rc = console_pl011_register(PLAT_ARM_BL31_RUN_UART_BASE, 62*88a0523eSAntonio Nino Diaz PLAT_ARM_BL31_RUN_UART_CLK_IN_HZ, 63*88a0523eSAntonio Nino Diaz ARM_CONSOLE_BAUDRATE, 64*88a0523eSAntonio Nino Diaz &arm_runtime_console); 65*88a0523eSAntonio Nino Diaz if (rc == 0) 66*88a0523eSAntonio Nino Diaz panic(); 67*88a0523eSAntonio Nino Diaz 68*88a0523eSAntonio Nino Diaz console_set_scope(&arm_runtime_console.console, CONSOLE_FLAG_RUNTIME); 69*88a0523eSAntonio Nino Diaz #else 70*88a0523eSAntonio Nino Diaz (void)console_init(PLAT_ARM_BL31_RUN_UART_BASE, 71*88a0523eSAntonio Nino Diaz PLAT_ARM_BL31_RUN_UART_CLK_IN_HZ, 72*88a0523eSAntonio Nino Diaz ARM_CONSOLE_BAUDRATE); 73*88a0523eSAntonio Nino Diaz #endif /* MULTI_CONSOLE_API */ 74*88a0523eSAntonio Nino Diaz } 75*88a0523eSAntonio Nino Diaz 76*88a0523eSAntonio Nino Diaz void arm_console_runtime_end(void) 77*88a0523eSAntonio Nino Diaz { 78*88a0523eSAntonio Nino Diaz (void)console_flush(); 79*88a0523eSAntonio Nino Diaz 80*88a0523eSAntonio Nino Diaz #if MULTI_CONSOLE_API 81*88a0523eSAntonio Nino Diaz (void)console_unregister(&arm_runtime_console.console); 82*88a0523eSAntonio Nino Diaz #else 83*88a0523eSAntonio Nino Diaz console_uninit(); 84*88a0523eSAntonio Nino Diaz #endif /* MULTI_CONSOLE_API */ 85*88a0523eSAntonio Nino Diaz } 86