188a0523eSAntonio Nino Diaz /* 288a0523eSAntonio Nino Diaz * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. 388a0523eSAntonio Nino Diaz * 488a0523eSAntonio Nino Diaz * SPDX-License-Identifier: BSD-3-Clause 588a0523eSAntonio Nino Diaz */ 6*09d40e0eSAntonio Nino Diaz 788a0523eSAntonio Nino Diaz #include <assert.h> 8*09d40e0eSAntonio Nino Diaz 988a0523eSAntonio Nino Diaz #include <platform_def.h> 1088a0523eSAntonio Nino Diaz 11*09d40e0eSAntonio Nino Diaz #include <common/debug.h> 12*09d40e0eSAntonio Nino Diaz #include <drivers/arm/pl011.h> 13*09d40e0eSAntonio Nino Diaz #include <drivers/console.h> 14*09d40e0eSAntonio Nino Diaz 15*09d40e0eSAntonio Nino Diaz #include <plat_arm.h> 16*09d40e0eSAntonio Nino Diaz 1788a0523eSAntonio Nino Diaz /******************************************************************************* 1888a0523eSAntonio Nino Diaz * Functions that set up the console 1988a0523eSAntonio Nino Diaz ******************************************************************************/ 2088a0523eSAntonio Nino Diaz #if MULTI_CONSOLE_API 2188a0523eSAntonio Nino Diaz static console_pl011_t arm_boot_console; 2288a0523eSAntonio Nino Diaz static console_pl011_t arm_runtime_console; 2388a0523eSAntonio Nino Diaz #endif 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 { 2888a0523eSAntonio Nino Diaz #if MULTI_CONSOLE_API 2988a0523eSAntonio Nino Diaz int rc = console_pl011_register(PLAT_ARM_BOOT_UART_BASE, 3088a0523eSAntonio Nino Diaz PLAT_ARM_BOOT_UART_CLK_IN_HZ, 3188a0523eSAntonio Nino Diaz ARM_CONSOLE_BAUDRATE, 3288a0523eSAntonio Nino Diaz &arm_boot_console); 3388a0523eSAntonio Nino Diaz if (rc == 0) { 3488a0523eSAntonio Nino Diaz /* 3588a0523eSAntonio Nino Diaz * The crash console doesn't use the multi console API, it uses 3688a0523eSAntonio Nino Diaz * the core console functions directly. It is safe to call panic 3788a0523eSAntonio Nino Diaz * and let it print debug information. 3888a0523eSAntonio Nino Diaz */ 3988a0523eSAntonio Nino Diaz panic(); 4088a0523eSAntonio Nino Diaz } 4188a0523eSAntonio Nino Diaz 4288a0523eSAntonio Nino Diaz console_set_scope(&arm_boot_console.console, CONSOLE_FLAG_BOOT); 4388a0523eSAntonio Nino Diaz #else 4488a0523eSAntonio Nino Diaz (void)console_init(PLAT_ARM_BOOT_UART_BASE, 4588a0523eSAntonio Nino Diaz PLAT_ARM_BOOT_UART_CLK_IN_HZ, 4688a0523eSAntonio Nino Diaz ARM_CONSOLE_BAUDRATE); 4788a0523eSAntonio Nino Diaz #endif /* MULTI_CONSOLE_API */ 4888a0523eSAntonio Nino Diaz } 4988a0523eSAntonio Nino Diaz 5088a0523eSAntonio Nino Diaz void arm_console_boot_end(void) 5188a0523eSAntonio Nino Diaz { 5288a0523eSAntonio Nino Diaz (void)console_flush(); 5388a0523eSAntonio Nino Diaz 5488a0523eSAntonio Nino Diaz #if MULTI_CONSOLE_API 5588a0523eSAntonio Nino Diaz (void)console_unregister(&arm_boot_console.console); 5688a0523eSAntonio Nino Diaz #else 5788a0523eSAntonio Nino Diaz console_uninit(); 5888a0523eSAntonio Nino Diaz #endif /* MULTI_CONSOLE_API */ 5988a0523eSAntonio Nino Diaz } 6088a0523eSAntonio Nino Diaz 6188a0523eSAntonio Nino Diaz /* Initialize the runtime console */ 6288a0523eSAntonio Nino Diaz void arm_console_runtime_init(void) 6388a0523eSAntonio Nino Diaz { 6488a0523eSAntonio Nino Diaz #if MULTI_CONSOLE_API 6588a0523eSAntonio Nino Diaz int rc = console_pl011_register(PLAT_ARM_BL31_RUN_UART_BASE, 6688a0523eSAntonio Nino Diaz PLAT_ARM_BL31_RUN_UART_CLK_IN_HZ, 6788a0523eSAntonio Nino Diaz ARM_CONSOLE_BAUDRATE, 6888a0523eSAntonio Nino Diaz &arm_runtime_console); 6988a0523eSAntonio Nino Diaz if (rc == 0) 7088a0523eSAntonio Nino Diaz panic(); 7188a0523eSAntonio Nino Diaz 7288a0523eSAntonio Nino Diaz console_set_scope(&arm_runtime_console.console, CONSOLE_FLAG_RUNTIME); 7388a0523eSAntonio Nino Diaz #else 7488a0523eSAntonio Nino Diaz (void)console_init(PLAT_ARM_BL31_RUN_UART_BASE, 7588a0523eSAntonio Nino Diaz PLAT_ARM_BL31_RUN_UART_CLK_IN_HZ, 7688a0523eSAntonio Nino Diaz ARM_CONSOLE_BAUDRATE); 7788a0523eSAntonio Nino Diaz #endif /* MULTI_CONSOLE_API */ 7888a0523eSAntonio Nino Diaz } 7988a0523eSAntonio Nino Diaz 8088a0523eSAntonio Nino Diaz void arm_console_runtime_end(void) 8188a0523eSAntonio Nino Diaz { 8288a0523eSAntonio Nino Diaz (void)console_flush(); 8388a0523eSAntonio Nino Diaz 8488a0523eSAntonio Nino Diaz #if MULTI_CONSOLE_API 8588a0523eSAntonio Nino Diaz (void)console_unregister(&arm_runtime_console.console); 8688a0523eSAntonio Nino Diaz #else 8788a0523eSAntonio Nino Diaz console_uninit(); 8888a0523eSAntonio Nino Diaz #endif /* MULTI_CONSOLE_API */ 8988a0523eSAntonio Nino Diaz } 90