xref: /rk3399_ARM-atf/plat/arm/common/arm_console.c (revision f185a542db1b58924db40de430d94f80e2a21c1c)
188a0523eSAntonio Nino Diaz /*
2*f185a542SBoyan Karatotev  * Copyright (c) 2018-2025, 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 
1888a0523eSAntonio Nino Diaz /*******************************************************************************
1988a0523eSAntonio Nino Diaz  * Functions that set up the console
2088a0523eSAntonio Nino Diaz  ******************************************************************************/
21f695e1e0SAndre Przywara static console_t arm_boot_console;
22f695e1e0SAndre Przywara static console_t arm_runtime_console;
2388a0523eSAntonio Nino Diaz 
2488a0523eSAntonio Nino Diaz /* Initialize the console to provide early debug support */
254d010d0dSDaniel Boulby void __init arm_console_boot_init(void)
2688a0523eSAntonio Nino Diaz {
270c55c103SJuan Pablo Conde 	/* If the console was initialized already, don't initialize again */
280c55c103SJuan Pablo Conde 	if (arm_boot_console.base == PLAT_ARM_BOOT_UART_BASE) {
290c55c103SJuan Pablo Conde 		return;
300c55c103SJuan Pablo Conde 	}
310c55c103SJuan Pablo Conde 
3288a0523eSAntonio Nino Diaz 	int rc = console_pl011_register(PLAT_ARM_BOOT_UART_BASE,
3388a0523eSAntonio Nino Diaz 					PLAT_ARM_BOOT_UART_CLK_IN_HZ,
3488a0523eSAntonio Nino Diaz 					ARM_CONSOLE_BAUDRATE,
3588a0523eSAntonio Nino Diaz 					&arm_boot_console);
3688a0523eSAntonio Nino Diaz 	if (rc == 0) {
3788a0523eSAntonio Nino Diaz 		/*
3888a0523eSAntonio Nino Diaz 		 * The crash console doesn't use the multi console API, it uses
3988a0523eSAntonio Nino Diaz 		 * the core console functions directly. It is safe to call panic
4088a0523eSAntonio Nino Diaz 		 * and let it print debug information.
4188a0523eSAntonio Nino Diaz 		 */
4288a0523eSAntonio Nino Diaz 		panic();
4388a0523eSAntonio Nino Diaz 	}
4488a0523eSAntonio Nino Diaz 
45f695e1e0SAndre Przywara 	console_set_scope(&arm_boot_console, CONSOLE_FLAG_BOOT);
4688a0523eSAntonio Nino Diaz }
4788a0523eSAntonio Nino Diaz 
4888a0523eSAntonio Nino Diaz void arm_console_boot_end(void)
4988a0523eSAntonio Nino Diaz {
50831b0e98SJimmy Brisson 	console_flush();
51f695e1e0SAndre Przywara 	(void)console_unregister(&arm_boot_console);
5288a0523eSAntonio Nino Diaz }
5388a0523eSAntonio Nino Diaz 
5488a0523eSAntonio Nino Diaz /* Initialize the runtime console */
5588a0523eSAntonio Nino Diaz void arm_console_runtime_init(void)
5688a0523eSAntonio Nino Diaz {
570d28096cSUsama Arif 	int rc = console_pl011_register(PLAT_ARM_RUN_UART_BASE,
580d28096cSUsama Arif 					PLAT_ARM_RUN_UART_CLK_IN_HZ,
5988a0523eSAntonio Nino Diaz 					ARM_CONSOLE_BAUDRATE,
6088a0523eSAntonio Nino Diaz 					&arm_runtime_console);
6188a0523eSAntonio Nino Diaz 	if (rc == 0)
6288a0523eSAntonio Nino Diaz 		panic();
6388a0523eSAntonio Nino Diaz 
64f695e1e0SAndre Przywara 	console_set_scope(&arm_runtime_console, CONSOLE_FLAG_RUNTIME);
6588a0523eSAntonio Nino Diaz }
6688a0523eSAntonio Nino Diaz 
6788a0523eSAntonio Nino Diaz void arm_console_runtime_end(void)
6888a0523eSAntonio Nino Diaz {
69831b0e98SJimmy Brisson 	console_flush();
7088a0523eSAntonio Nino Diaz }
71