xref: /rk3399_ARM-atf/plat/arm/board/fvp/fvp_console.c (revision 12d1343027694634c4be3dcfb43c2e9c47a58388)
1*12d13430SMadhukar Pappireddy /*
2*12d13430SMadhukar Pappireddy  * Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
3*12d13430SMadhukar Pappireddy  *
4*12d13430SMadhukar Pappireddy  * SPDX-License-Identifier: BSD-3-Clause
5*12d13430SMadhukar Pappireddy  */
6*12d13430SMadhukar Pappireddy 
7*12d13430SMadhukar Pappireddy #include <assert.h>
8*12d13430SMadhukar Pappireddy 
9*12d13430SMadhukar Pappireddy #include <platform_def.h>
10*12d13430SMadhukar Pappireddy 
11*12d13430SMadhukar Pappireddy #include <common/debug.h>
12*12d13430SMadhukar Pappireddy #include <drivers/arm/pl011.h>
13*12d13430SMadhukar Pappireddy #include <drivers/console.h>
14*12d13430SMadhukar Pappireddy #include <fconf_hw_config_getter.h>
15*12d13430SMadhukar Pappireddy #include <plat/arm/common/plat_arm.h>
16*12d13430SMadhukar Pappireddy 
17*12d13430SMadhukar Pappireddy static console_t fvp_runtime_console;
18*12d13430SMadhukar Pappireddy 
19*12d13430SMadhukar Pappireddy /* Initialize the runtime console */
20*12d13430SMadhukar Pappireddy void arm_console_runtime_init(void)
21*12d13430SMadhukar Pappireddy {
22*12d13430SMadhukar Pappireddy 	uintptr_t uart_base;
23*12d13430SMadhukar Pappireddy 	uint32_t uart_clk;
24*12d13430SMadhukar Pappireddy 
25*12d13430SMadhukar Pappireddy 	/*
26*12d13430SMadhukar Pappireddy 	 * fconf APIs are not supported for RESET_TO_SP_MIN, RESET_TO_BL31 and
27*12d13430SMadhukar Pappireddy 	 * BL2_AT_EL3 systems.
28*12d13430SMadhukar Pappireddy 	 */
29*12d13430SMadhukar Pappireddy #if RESET_TO_SP_MIN || RESET_TO_BL31 || BL2_AT_EL3
30*12d13430SMadhukar Pappireddy 	uart_base = PLAT_ARM_RUN_UART_BASE;
31*12d13430SMadhukar Pappireddy 	uart_clk = PLAT_ARM_RUN_UART_CLK_IN_HZ;
32*12d13430SMadhukar Pappireddy #else
33*12d13430SMadhukar Pappireddy 	uart_base = FCONF_GET_PROPERTY(hw_config, uart_serial_config,
34*12d13430SMadhukar Pappireddy 					uart_base);
35*12d13430SMadhukar Pappireddy 	uart_clk = FCONF_GET_PROPERTY(hw_config, uart_serial_config,
36*12d13430SMadhukar Pappireddy 					uart_clk);
37*12d13430SMadhukar Pappireddy #endif
38*12d13430SMadhukar Pappireddy 
39*12d13430SMadhukar Pappireddy 	int rc = console_pl011_register(uart_base, uart_clk,
40*12d13430SMadhukar Pappireddy 					ARM_CONSOLE_BAUDRATE,
41*12d13430SMadhukar Pappireddy 					&fvp_runtime_console);
42*12d13430SMadhukar Pappireddy 
43*12d13430SMadhukar Pappireddy 	if (rc == 0) {
44*12d13430SMadhukar Pappireddy 		panic();
45*12d13430SMadhukar Pappireddy 	}
46*12d13430SMadhukar Pappireddy 
47*12d13430SMadhukar Pappireddy 	console_set_scope(&fvp_runtime_console, CONSOLE_FLAG_RUNTIME);
48*12d13430SMadhukar Pappireddy }
49*12d13430SMadhukar Pappireddy 
50*12d13430SMadhukar Pappireddy void arm_console_runtime_end(void)
51*12d13430SMadhukar Pappireddy {
52*12d13430SMadhukar Pappireddy 	(void)console_flush();
53*12d13430SMadhukar Pappireddy 	(void)console_unregister(&fvp_runtime_console);
54*12d13430SMadhukar Pappireddy }
55