188a0523eSAntonio Nino Diaz /* 2*0c55c103SJuan Pablo Conde * Copyright (c) 2018-2022, ARM Limited and Contributors. All rights reserved. 388a0523eSAntonio Nino Diaz * 488a0523eSAntonio Nino Diaz * SPDX-License-Identifier: BSD-3-Clause 588a0523eSAntonio Nino Diaz */ 609d40e0eSAntonio Nino Diaz 788a0523eSAntonio Nino Diaz #include <assert.h> 809d40e0eSAntonio Nino Diaz 988a0523eSAntonio Nino Diaz #include <platform_def.h> 1088a0523eSAntonio Nino Diaz 1109d40e0eSAntonio Nino Diaz #include <common/debug.h> 1209d40e0eSAntonio Nino Diaz #include <drivers/arm/pl011.h> 1309d40e0eSAntonio Nino Diaz #include <drivers/console.h> 14bd9344f6SAntonio Nino Diaz #include <plat/arm/common/plat_arm.h> 1509d40e0eSAntonio Nino Diaz 1612d13430SMadhukar Pappireddy #pragma weak arm_console_runtime_init 1712d13430SMadhukar Pappireddy #pragma weak arm_console_runtime_end 1812d13430SMadhukar Pappireddy 1988a0523eSAntonio Nino Diaz /******************************************************************************* 2088a0523eSAntonio Nino Diaz * Functions that set up the console 2188a0523eSAntonio Nino Diaz ******************************************************************************/ 22f695e1e0SAndre Przywara static console_t arm_boot_console; 23f695e1e0SAndre Przywara static console_t arm_runtime_console; 2488a0523eSAntonio Nino Diaz 2588a0523eSAntonio Nino Diaz /* Initialize the console to provide early debug support */ 264d010d0dSDaniel Boulby void __init arm_console_boot_init(void) 2788a0523eSAntonio Nino Diaz { 28*0c55c103SJuan Pablo Conde /* If the console was initialized already, don't initialize again */ 29*0c55c103SJuan Pablo Conde if (arm_boot_console.base == PLAT_ARM_BOOT_UART_BASE) { 30*0c55c103SJuan Pablo Conde return; 31*0c55c103SJuan Pablo Conde } 32*0c55c103SJuan Pablo Conde 3388a0523eSAntonio Nino Diaz int rc = console_pl011_register(PLAT_ARM_BOOT_UART_BASE, 3488a0523eSAntonio Nino Diaz PLAT_ARM_BOOT_UART_CLK_IN_HZ, 3588a0523eSAntonio Nino Diaz ARM_CONSOLE_BAUDRATE, 3688a0523eSAntonio Nino Diaz &arm_boot_console); 3788a0523eSAntonio Nino Diaz if (rc == 0) { 3888a0523eSAntonio Nino Diaz /* 3988a0523eSAntonio Nino Diaz * The crash console doesn't use the multi console API, it uses 4088a0523eSAntonio Nino Diaz * the core console functions directly. It is safe to call panic 4188a0523eSAntonio Nino Diaz * and let it print debug information. 4288a0523eSAntonio Nino Diaz */ 4388a0523eSAntonio Nino Diaz panic(); 4488a0523eSAntonio Nino Diaz } 4588a0523eSAntonio Nino Diaz 46f695e1e0SAndre Przywara console_set_scope(&arm_boot_console, CONSOLE_FLAG_BOOT); 4788a0523eSAntonio Nino Diaz } 4888a0523eSAntonio Nino Diaz 4988a0523eSAntonio Nino Diaz void arm_console_boot_end(void) 5088a0523eSAntonio Nino Diaz { 51831b0e98SJimmy Brisson console_flush(); 52f695e1e0SAndre Przywara (void)console_unregister(&arm_boot_console); 5388a0523eSAntonio Nino Diaz } 5488a0523eSAntonio Nino Diaz 5588a0523eSAntonio Nino Diaz /* Initialize the runtime console */ 5688a0523eSAntonio Nino Diaz void arm_console_runtime_init(void) 5788a0523eSAntonio Nino Diaz { 580d28096cSUsama Arif int rc = console_pl011_register(PLAT_ARM_RUN_UART_BASE, 590d28096cSUsama Arif PLAT_ARM_RUN_UART_CLK_IN_HZ, 6088a0523eSAntonio Nino Diaz ARM_CONSOLE_BAUDRATE, 6188a0523eSAntonio Nino Diaz &arm_runtime_console); 6288a0523eSAntonio Nino Diaz if (rc == 0) 6388a0523eSAntonio Nino Diaz panic(); 6488a0523eSAntonio Nino Diaz 65f695e1e0SAndre Przywara console_set_scope(&arm_runtime_console, CONSOLE_FLAG_RUNTIME); 6688a0523eSAntonio Nino Diaz } 6788a0523eSAntonio Nino Diaz 6888a0523eSAntonio Nino Diaz void arm_console_runtime_end(void) 6988a0523eSAntonio Nino Diaz { 70831b0e98SJimmy Brisson console_flush(); 7188a0523eSAntonio Nino Diaz } 72