xref: /rk3399_ARM-atf/plat/arm/common/arm_console.c (revision 831b0e9824e6c7cb07308830c12977acb79156c7)
188a0523eSAntonio Nino Diaz /*
2*831b0e98SJimmy Brisson  * Copyright (c) 2018-2020, 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 {
2888a0523eSAntonio Nino Diaz 	int rc = console_pl011_register(PLAT_ARM_BOOT_UART_BASE,
2988a0523eSAntonio Nino Diaz 					PLAT_ARM_BOOT_UART_CLK_IN_HZ,
3088a0523eSAntonio Nino Diaz 					ARM_CONSOLE_BAUDRATE,
3188a0523eSAntonio Nino Diaz 					&arm_boot_console);
3288a0523eSAntonio Nino Diaz 	if (rc == 0) {
3388a0523eSAntonio Nino Diaz 		/*
3488a0523eSAntonio Nino Diaz 		 * The crash console doesn't use the multi console API, it uses
3588a0523eSAntonio Nino Diaz 		 * the core console functions directly. It is safe to call panic
3688a0523eSAntonio Nino Diaz 		 * and let it print debug information.
3788a0523eSAntonio Nino Diaz 		 */
3888a0523eSAntonio Nino Diaz 		panic();
3988a0523eSAntonio Nino Diaz 	}
4088a0523eSAntonio Nino Diaz 
41f695e1e0SAndre Przywara 	console_set_scope(&arm_boot_console, CONSOLE_FLAG_BOOT);
4288a0523eSAntonio Nino Diaz }
4388a0523eSAntonio Nino Diaz 
4488a0523eSAntonio Nino Diaz void arm_console_boot_end(void)
4588a0523eSAntonio Nino Diaz {
46*831b0e98SJimmy Brisson 	console_flush();
47f695e1e0SAndre Przywara 	(void)console_unregister(&arm_boot_console);
4888a0523eSAntonio Nino Diaz }
4988a0523eSAntonio Nino Diaz 
5088a0523eSAntonio Nino Diaz /* Initialize the runtime console */
5188a0523eSAntonio Nino Diaz void arm_console_runtime_init(void)
5288a0523eSAntonio Nino Diaz {
530d28096cSUsama Arif 	int rc = console_pl011_register(PLAT_ARM_RUN_UART_BASE,
540d28096cSUsama Arif 					PLAT_ARM_RUN_UART_CLK_IN_HZ,
5588a0523eSAntonio Nino Diaz 					ARM_CONSOLE_BAUDRATE,
5688a0523eSAntonio Nino Diaz 					&arm_runtime_console);
5788a0523eSAntonio Nino Diaz 	if (rc == 0)
5888a0523eSAntonio Nino Diaz 		panic();
5988a0523eSAntonio Nino Diaz 
60f695e1e0SAndre Przywara 	console_set_scope(&arm_runtime_console, CONSOLE_FLAG_RUNTIME);
6188a0523eSAntonio Nino Diaz }
6288a0523eSAntonio Nino Diaz 
6388a0523eSAntonio Nino Diaz void arm_console_runtime_end(void)
6488a0523eSAntonio Nino Diaz {
65*831b0e98SJimmy Brisson 	console_flush();
6688a0523eSAntonio Nino Diaz }
67