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