xref: /rk3399_ARM-atf/plat/arm/common/arm_console.c (revision f695e1e01a995e66f9f5be5430fef3b7920082f2)
188a0523eSAntonio Nino Diaz /*
2c9ac30a5SAmbroise Vincent  * Copyright (c) 2018-2019, 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 
1688a0523eSAntonio Nino Diaz /*******************************************************************************
1788a0523eSAntonio Nino Diaz  * Functions that set up the console
1888a0523eSAntonio Nino Diaz  ******************************************************************************/
19*f695e1e0SAndre Przywara static console_t arm_boot_console;
20*f695e1e0SAndre Przywara static console_t arm_runtime_console;
2188a0523eSAntonio Nino Diaz 
2288a0523eSAntonio Nino Diaz /* Initialize the console to provide early debug support */
234d010d0dSDaniel Boulby void __init arm_console_boot_init(void)
2488a0523eSAntonio Nino Diaz {
2588a0523eSAntonio Nino Diaz 	int rc = console_pl011_register(PLAT_ARM_BOOT_UART_BASE,
2688a0523eSAntonio Nino Diaz 					PLAT_ARM_BOOT_UART_CLK_IN_HZ,
2788a0523eSAntonio Nino Diaz 					ARM_CONSOLE_BAUDRATE,
2888a0523eSAntonio Nino Diaz 					&arm_boot_console);
2988a0523eSAntonio Nino Diaz 	if (rc == 0) {
3088a0523eSAntonio Nino Diaz 		/*
3188a0523eSAntonio Nino Diaz 		 * The crash console doesn't use the multi console API, it uses
3288a0523eSAntonio Nino Diaz 		 * the core console functions directly. It is safe to call panic
3388a0523eSAntonio Nino Diaz 		 * and let it print debug information.
3488a0523eSAntonio Nino Diaz 		 */
3588a0523eSAntonio Nino Diaz 		panic();
3688a0523eSAntonio Nino Diaz 	}
3788a0523eSAntonio Nino Diaz 
38*f695e1e0SAndre Przywara 	console_set_scope(&arm_boot_console, CONSOLE_FLAG_BOOT);
3988a0523eSAntonio Nino Diaz }
4088a0523eSAntonio Nino Diaz 
4188a0523eSAntonio Nino Diaz void arm_console_boot_end(void)
4288a0523eSAntonio Nino Diaz {
4388a0523eSAntonio Nino Diaz 	(void)console_flush();
44*f695e1e0SAndre Przywara 	(void)console_unregister(&arm_boot_console);
4588a0523eSAntonio Nino Diaz }
4688a0523eSAntonio Nino Diaz 
4788a0523eSAntonio Nino Diaz /* Initialize the runtime console */
4888a0523eSAntonio Nino Diaz void arm_console_runtime_init(void)
4988a0523eSAntonio Nino Diaz {
500d28096cSUsama Arif 	int rc = console_pl011_register(PLAT_ARM_RUN_UART_BASE,
510d28096cSUsama Arif 					PLAT_ARM_RUN_UART_CLK_IN_HZ,
5288a0523eSAntonio Nino Diaz 					ARM_CONSOLE_BAUDRATE,
5388a0523eSAntonio Nino Diaz 					&arm_runtime_console);
5488a0523eSAntonio Nino Diaz 	if (rc == 0)
5588a0523eSAntonio Nino Diaz 		panic();
5688a0523eSAntonio Nino Diaz 
57*f695e1e0SAndre Przywara 	console_set_scope(&arm_runtime_console, CONSOLE_FLAG_RUNTIME);
5888a0523eSAntonio Nino Diaz }
5988a0523eSAntonio Nino Diaz 
6088a0523eSAntonio Nino Diaz void arm_console_runtime_end(void)
6188a0523eSAntonio Nino Diaz {
6288a0523eSAntonio Nino Diaz 	(void)console_flush();
6388a0523eSAntonio Nino Diaz }
64