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