1 /*
2  * Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <assert.h>
8 
9 #include <platform_def.h>
10 
11 #include <common/debug.h>
12 #include <drivers/arm/pl011.h>
13 #include <drivers/console.h>
14 #include <plat/arm/common/plat_arm.h>
15 
16 #pragma weak arm_console_runtime_init
17 #pragma weak arm_console_runtime_end
18 
19 /*******************************************************************************
20  * Functions that set up the console
21  ******************************************************************************/
22 static console_t arm_boot_console;
23 static console_t arm_runtime_console;
24 
25 /* Initialize the console to provide early debug support */
arm_console_boot_init(void)26 void __init arm_console_boot_init(void)
27 {
28 	int rc = console_pl011_register(PLAT_ARM_BOOT_UART_BASE,
29 					PLAT_ARM_BOOT_UART_CLK_IN_HZ,
30 					ARM_CONSOLE_BAUDRATE,
31 					&arm_boot_console);
32 	if (rc == 0) {
33 		/*
34 		 * The crash console doesn't use the multi console API, it uses
35 		 * the core console functions directly. It is safe to call panic
36 		 * and let it print debug information.
37 		 */
38 		panic();
39 	}
40 
41 	console_set_scope(&arm_boot_console, CONSOLE_FLAG_BOOT);
42 }
43 
arm_console_boot_end(void)44 void arm_console_boot_end(void)
45 {
46 	console_flush();
47 	(void)console_unregister(&arm_boot_console);
48 }
49 
50 /* Initialize the runtime console */
arm_console_runtime_init(void)51 void arm_console_runtime_init(void)
52 {
53 	int rc = console_pl011_register(PLAT_ARM_RUN_UART_BASE,
54 					PLAT_ARM_RUN_UART_CLK_IN_HZ,
55 					ARM_CONSOLE_BAUDRATE,
56 					&arm_runtime_console);
57 	if (rc == 0)
58 		panic();
59 
60 	console_set_scope(&arm_runtime_console, CONSOLE_FLAG_RUNTIME);
61 }
62 
arm_console_runtime_end(void)63 void arm_console_runtime_end(void)
64 {
65 	console_flush();
66 }
67