xref: /rk3399_ARM-atf/plat/arm/common/arm_console.c (revision 88a0523e914cb28fded2ce398a184e0c0e8843c8)
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