mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-08-14 08:27:00 +02:00
The UART code for the A3K platform assumes that UART parent clock rate is always 25 MHz. This is incorrect, because the xtal clock can also run at 40 MHz (this is board specific). The frequency of the xtal clock is determined by a value on a strapping pin during SOC reset. The code to determine this frequency is already in A3K's comphy driver. Move the get_ref_clk() function from the comphy driver to a separate file and use it for UART parent clock rate determination. Signed-off-by: Pali Rohár <pali@kernel.org> Change-Id: I8bb18a2d020ef18fe65aa06ffa4ab205c71be92e
78 lines
1.9 KiB
C
78 lines
1.9 KiB
C
/*
|
|
* Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
#include <assert.h>
|
|
|
|
#include <platform_def.h>
|
|
|
|
#include <common/debug.h>
|
|
#include <drivers/console.h>
|
|
|
|
#include <plat_marvell.h>
|
|
|
|
#ifdef PLAT_a3700
|
|
#include <drivers/marvell/uart/a3700_console.h>
|
|
#define PLAT_MARVELL_UART_CLK_IN_HZ (get_ref_clk() * 1000000)
|
|
#define console_marvell_register console_a3700_register
|
|
#else
|
|
#include <drivers/ti/uart/uart_16550.h>
|
|
#define console_marvell_register console_16550_register
|
|
#endif
|
|
|
|
static console_t marvell_boot_console;
|
|
static console_t marvell_runtime_console;
|
|
|
|
/*******************************************************************************
|
|
* Functions that set up the console
|
|
******************************************************************************/
|
|
|
|
/* Initialize the console to provide early debug support */
|
|
void marvell_console_boot_init(void)
|
|
{
|
|
int rc =
|
|
console_marvell_register(PLAT_MARVELL_UART_BASE,
|
|
PLAT_MARVELL_UART_CLK_IN_HZ,
|
|
MARVELL_CONSOLE_BAUDRATE,
|
|
&marvell_boot_console);
|
|
if (rc == 0) {
|
|
/*
|
|
* The crash console doesn't use the multi console API, it uses
|
|
* the core console functions directly. It is safe to call panic
|
|
* and let it print debug information.
|
|
*/
|
|
panic();
|
|
}
|
|
|
|
console_set_scope(&marvell_boot_console, CONSOLE_FLAG_BOOT);
|
|
}
|
|
|
|
void marvell_console_boot_end(void)
|
|
{
|
|
console_flush();
|
|
|
|
(void)console_unregister(&marvell_boot_console);
|
|
}
|
|
|
|
/* Initialize the runtime console */
|
|
void marvell_console_runtime_init(void)
|
|
{
|
|
int rc =
|
|
console_marvell_register(PLAT_MARVELL_UART_BASE,
|
|
PLAT_MARVELL_UART_CLK_IN_HZ,
|
|
MARVELL_CONSOLE_BAUDRATE,
|
|
&marvell_runtime_console);
|
|
if (rc == 0)
|
|
panic();
|
|
|
|
console_set_scope(&marvell_runtime_console, CONSOLE_FLAG_RUNTIME);
|
|
}
|
|
|
|
void marvell_console_runtime_end(void)
|
|
{
|
|
console_flush();
|
|
|
|
(void)console_unregister(&marvell_runtime_console);
|
|
}
|