xref: /rk3399_ARM-atf/plat/arm/common/arm_console.c (revision 0c55c10305df6217fd978d58ce203dbad3edd4d5)
188a0523eSAntonio Nino Diaz /*
2*0c55c103SJuan Pablo Conde  * Copyright (c) 2018-2022, 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 
1612d13430SMadhukar Pappireddy #pragma weak arm_console_runtime_init
1712d13430SMadhukar Pappireddy #pragma weak arm_console_runtime_end
1812d13430SMadhukar Pappireddy 
1988a0523eSAntonio Nino Diaz /*******************************************************************************
2088a0523eSAntonio Nino Diaz  * Functions that set up the console
2188a0523eSAntonio Nino Diaz  ******************************************************************************/
22f695e1e0SAndre Przywara static console_t arm_boot_console;
23f695e1e0SAndre Przywara static console_t arm_runtime_console;
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 {
28*0c55c103SJuan Pablo Conde 	/* If the console was initialized already, don't initialize again */
29*0c55c103SJuan Pablo Conde 	if (arm_boot_console.base == PLAT_ARM_BOOT_UART_BASE) {
30*0c55c103SJuan Pablo Conde 		return;
31*0c55c103SJuan Pablo Conde 	}
32*0c55c103SJuan Pablo Conde 
3388a0523eSAntonio Nino Diaz 	int rc = console_pl011_register(PLAT_ARM_BOOT_UART_BASE,
3488a0523eSAntonio Nino Diaz 					PLAT_ARM_BOOT_UART_CLK_IN_HZ,
3588a0523eSAntonio Nino Diaz 					ARM_CONSOLE_BAUDRATE,
3688a0523eSAntonio Nino Diaz 					&arm_boot_console);
3788a0523eSAntonio Nino Diaz 	if (rc == 0) {
3888a0523eSAntonio Nino Diaz 		/*
3988a0523eSAntonio Nino Diaz 		 * The crash console doesn't use the multi console API, it uses
4088a0523eSAntonio Nino Diaz 		 * the core console functions directly. It is safe to call panic
4188a0523eSAntonio Nino Diaz 		 * and let it print debug information.
4288a0523eSAntonio Nino Diaz 		 */
4388a0523eSAntonio Nino Diaz 		panic();
4488a0523eSAntonio Nino Diaz 	}
4588a0523eSAntonio Nino Diaz 
46f695e1e0SAndre Przywara 	console_set_scope(&arm_boot_console, CONSOLE_FLAG_BOOT);
4788a0523eSAntonio Nino Diaz }
4888a0523eSAntonio Nino Diaz 
4988a0523eSAntonio Nino Diaz void arm_console_boot_end(void)
5088a0523eSAntonio Nino Diaz {
51831b0e98SJimmy Brisson 	console_flush();
52f695e1e0SAndre Przywara 	(void)console_unregister(&arm_boot_console);
5388a0523eSAntonio Nino Diaz }
5488a0523eSAntonio Nino Diaz 
5588a0523eSAntonio Nino Diaz /* Initialize the runtime console */
5688a0523eSAntonio Nino Diaz void arm_console_runtime_init(void)
5788a0523eSAntonio Nino Diaz {
580d28096cSUsama Arif 	int rc = console_pl011_register(PLAT_ARM_RUN_UART_BASE,
590d28096cSUsama Arif 					PLAT_ARM_RUN_UART_CLK_IN_HZ,
6088a0523eSAntonio Nino Diaz 					ARM_CONSOLE_BAUDRATE,
6188a0523eSAntonio Nino Diaz 					&arm_runtime_console);
6288a0523eSAntonio Nino Diaz 	if (rc == 0)
6388a0523eSAntonio Nino Diaz 		panic();
6488a0523eSAntonio Nino Diaz 
65f695e1e0SAndre Przywara 	console_set_scope(&arm_runtime_console, CONSOLE_FLAG_RUNTIME);
6688a0523eSAntonio Nino Diaz }
6788a0523eSAntonio Nino Diaz 
6888a0523eSAntonio Nino Diaz void arm_console_runtime_end(void)
6988a0523eSAntonio Nino Diaz {
70831b0e98SJimmy Brisson 	console_flush();
7188a0523eSAntonio Nino Diaz }
72