feat(plat/st): add a function to configure console
To ease console configuration, a dedicated function is created: stm32mp_uart_console_setup(). The code will also be common for the different BLs. Change-Id: Idf3cad756f125ca2313cf30b1311637a9df8f27f Signed-off-by: Yann Gautier <yann.gautier@st.com>
This commit is contained in:
parent
a6bfa75cf2
commit
53612f7293
|
@ -53,6 +53,9 @@ uint32_t stm32_iwdg_shadow_update(uint32_t iwdg_inst, uint32_t flags);
|
|||
uintptr_t get_uart_address(uint32_t instance_nb);
|
||||
#endif
|
||||
|
||||
/* Setup the UART console */
|
||||
int stm32mp_uart_console_setup(void);
|
||||
|
||||
/*
|
||||
* Platform util functions for the GPIO driver
|
||||
* @bank: Target GPIO bank ID as per DT bindings
|
||||
|
|
|
@ -7,17 +7,23 @@
|
|||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <arch_helpers.h>
|
||||
#include <common/debug.h>
|
||||
#include <drivers/delay_timer.h>
|
||||
#include <drivers/st/stm32_console.h>
|
||||
#include <drivers/st/stm32mp_clkfunc.h>
|
||||
#include <drivers/st/stm32mp_reset.h>
|
||||
#include <lib/smccc.h>
|
||||
#include <lib/xlat_tables/xlat_tables_v2.h>
|
||||
#include <plat/common/platform.h>
|
||||
#include <services/arm_arch_svc.h>
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#define HEADER_VERSION_MAJOR_MASK GENMASK(23, 16)
|
||||
#define RESET_TIMEOUT_US_1MS 1000U
|
||||
|
||||
static console_t console;
|
||||
|
||||
uintptr_t plat_get_ns_image_entrypoint(void)
|
||||
{
|
||||
|
@ -128,6 +134,63 @@ int stm32mp_unmap_ddr(void)
|
|||
STM32MP_DDR_MAX_SIZE);
|
||||
}
|
||||
|
||||
static void reset_uart(uint32_t reset)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = stm32mp_reset_assert(reset, RESET_TIMEOUT_US_1MS);
|
||||
if (ret != 0) {
|
||||
panic();
|
||||
}
|
||||
|
||||
udelay(2);
|
||||
|
||||
ret = stm32mp_reset_deassert(reset, RESET_TIMEOUT_US_1MS);
|
||||
if (ret != 0) {
|
||||
panic();
|
||||
}
|
||||
|
||||
mdelay(1);
|
||||
}
|
||||
|
||||
int stm32mp_uart_console_setup(void)
|
||||
{
|
||||
struct dt_node_info dt_uart_info;
|
||||
unsigned int console_flags;
|
||||
uint32_t clk_rate;
|
||||
int result;
|
||||
|
||||
result = dt_get_stdout_uart_info(&dt_uart_info);
|
||||
|
||||
if ((result <= 0) ||
|
||||
(dt_uart_info.status == DT_DISABLED) ||
|
||||
(dt_uart_info.clock < 0) ||
|
||||
(dt_uart_info.reset < 0)) {
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (dt_set_stdout_pinctrl() != 0) {
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
stm32mp_clk_enable((unsigned long)dt_uart_info.clock);
|
||||
|
||||
reset_uart((uint32_t)dt_uart_info.reset);
|
||||
|
||||
clk_rate = stm32mp_clk_get_rate((unsigned long)dt_uart_info.clock);
|
||||
|
||||
if (console_stm32_register(dt_uart_info.base, clk_rate,
|
||||
STM32MP_UART_BAUDRATE, &console) == 0) {
|
||||
panic();
|
||||
}
|
||||
|
||||
console_flags = CONSOLE_FLAG_BOOT | CONSOLE_FLAG_CRASH |
|
||||
CONSOLE_FLAG_TRANSLATE_CRLF;
|
||||
console_set_scope(&console, console_flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* plat_is_smccc_feature_available() - This function checks whether SMCCC
|
||||
* feature is availabile for platform.
|
||||
|
|
Loading…
Reference in New Issue