112d13430SMadhukar Pappireddy /*
2*f185a542SBoyan Karatotev * Copyright (c) 2020-2025, Arm Limited and Contributors. All rights reserved.
312d13430SMadhukar Pappireddy *
412d13430SMadhukar Pappireddy * SPDX-License-Identifier: BSD-3-Clause
512d13430SMadhukar Pappireddy */
612d13430SMadhukar Pappireddy
712d13430SMadhukar Pappireddy #include <assert.h>
812d13430SMadhukar Pappireddy
912d13430SMadhukar Pappireddy #include <platform_def.h>
1012d13430SMadhukar Pappireddy
1112d13430SMadhukar Pappireddy #include <common/debug.h>
1212d13430SMadhukar Pappireddy #include <drivers/arm/pl011.h>
1312d13430SMadhukar Pappireddy #include <drivers/console.h>
1412d13430SMadhukar Pappireddy #include <fconf_hw_config_getter.h>
1512d13430SMadhukar Pappireddy #include <plat/arm/common/plat_arm.h>
1612d13430SMadhukar Pappireddy
1712d13430SMadhukar Pappireddy static console_t fvp_runtime_console;
1812d13430SMadhukar Pappireddy
1912d13430SMadhukar Pappireddy /* Initialize the runtime console */
arm_console_runtime_init(void)2012d13430SMadhukar Pappireddy void arm_console_runtime_init(void)
2112d13430SMadhukar Pappireddy {
2212d13430SMadhukar Pappireddy uintptr_t uart_base;
2312d13430SMadhukar Pappireddy uint32_t uart_clk;
2412d13430SMadhukar Pappireddy
25*f185a542SBoyan Karatotev /* If the console was initialized already, don't initialize again */
26*f185a542SBoyan Karatotev if (fvp_runtime_console.base != 0UL) {
27*f185a542SBoyan Karatotev return;
28*f185a542SBoyan Karatotev }
29*f185a542SBoyan Karatotev
3012d13430SMadhukar Pappireddy /*
3112d13430SMadhukar Pappireddy * fconf APIs are not supported for RESET_TO_SP_MIN, RESET_TO_BL31 and
3242d4d3baSArvind Ram Prakash * RESET_TO_BL2 systems.
3312d13430SMadhukar Pappireddy */
3442d4d3baSArvind Ram Prakash #if RESET_TO_SP_MIN || RESET_TO_BL31 || RESET_TO_BL2
3512d13430SMadhukar Pappireddy uart_base = PLAT_ARM_RUN_UART_BASE;
3612d13430SMadhukar Pappireddy uart_clk = PLAT_ARM_RUN_UART_CLK_IN_HZ;
3712d13430SMadhukar Pappireddy #else
3812d13430SMadhukar Pappireddy uart_base = FCONF_GET_PROPERTY(hw_config, uart_serial_config,
3912d13430SMadhukar Pappireddy uart_base);
4012d13430SMadhukar Pappireddy uart_clk = FCONF_GET_PROPERTY(hw_config, uart_serial_config,
4112d13430SMadhukar Pappireddy uart_clk);
4212d13430SMadhukar Pappireddy #endif
4312d13430SMadhukar Pappireddy
4412d13430SMadhukar Pappireddy int rc = console_pl011_register(uart_base, uart_clk,
4512d13430SMadhukar Pappireddy ARM_CONSOLE_BAUDRATE,
4612d13430SMadhukar Pappireddy &fvp_runtime_console);
4712d13430SMadhukar Pappireddy
4812d13430SMadhukar Pappireddy if (rc == 0) {
4912d13430SMadhukar Pappireddy panic();
5012d13430SMadhukar Pappireddy }
5112d13430SMadhukar Pappireddy
5212d13430SMadhukar Pappireddy console_set_scope(&fvp_runtime_console, CONSOLE_FLAG_RUNTIME);
5312d13430SMadhukar Pappireddy }
54