mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-15 17:14:21 +00:00
feat(st): protect UART during platform init
Protect the UART instance used for serial boot with UART used for console. Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com> Change-Id: Ieee1557b34e7baa81594c3fbf0513191737027bf
This commit is contained in:
parent
aafff04354
commit
acf28c267b
4 changed files with 24 additions and 2 deletions
|
@ -48,7 +48,7 @@ uint32_t stm32_iwdg_get_otp_config(uint32_t iwdg_inst);
|
|||
uint32_t stm32_iwdg_shadow_update(uint32_t iwdg_inst, uint32_t flags);
|
||||
#endif
|
||||
|
||||
#if STM32MP_UART_PROGRAMMER
|
||||
#if STM32MP_UART_PROGRAMMER || !defined(IMAGE_BL2)
|
||||
/* Get the UART address from its instance number */
|
||||
uintptr_t get_uart_address(uint32_t instance_nb);
|
||||
#endif
|
||||
|
|
|
@ -161,6 +161,8 @@ int stm32mp_uart_console_setup(void)
|
|||
unsigned int console_flags;
|
||||
uint32_t clk_rate;
|
||||
int result;
|
||||
uint32_t boot_itf __unused;
|
||||
uint32_t boot_instance __unused;
|
||||
|
||||
result = dt_get_stdout_uart_info(&dt_uart_info);
|
||||
|
||||
|
@ -171,6 +173,15 @@ int stm32mp_uart_console_setup(void)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
#if STM32MP_UART_PROGRAMMER || !defined(IMAGE_BL2)
|
||||
stm32_get_boot_interface(&boot_itf, &boot_instance);
|
||||
|
||||
if ((boot_itf == BOOT_API_CTX_BOOT_INTERFACE_SEL_SERIAL_UART) &&
|
||||
(get_uart_address(boot_instance) == dt_uart_info.base)) {
|
||||
return -EACCES;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(IMAGE_BL2)
|
||||
if (dt_set_stdout_pinctrl() != 0) {
|
||||
return -ENODEV;
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <drivers/mmc.h>
|
||||
#include <drivers/st/bsec.h>
|
||||
#include <drivers/st/stm32_iwdg.h>
|
||||
#include <drivers/st/stm32_uart.h>
|
||||
#include <drivers/st/stm32mp_pmic.h>
|
||||
#include <drivers/st/stm32mp1_clk.h>
|
||||
#include <drivers/st/stm32mp1_pwr.h>
|
||||
|
@ -229,6 +230,16 @@ void bl2_el3_plat_arch_setup(void)
|
|||
|
||||
generic_delay_timer_init();
|
||||
|
||||
#if STM32MP_UART_PROGRAMMER
|
||||
/* Disable programmer UART before changing clock tree */
|
||||
if (boot_context->boot_interface_selected ==
|
||||
BOOT_API_CTX_BOOT_INTERFACE_SEL_SERIAL_UART) {
|
||||
uintptr_t uart_prog_addr =
|
||||
get_uart_address(boot_context->boot_interface_instance);
|
||||
|
||||
stm32_uart_stop(uart_prog_addr);
|
||||
}
|
||||
#endif
|
||||
if (stm32mp1_clk_probe() < 0) {
|
||||
panic();
|
||||
}
|
||||
|
|
|
@ -167,7 +167,7 @@ int stm32_get_gpio_bank_pinctrl_node(void *fdt, unsigned int bank)
|
|||
}
|
||||
}
|
||||
|
||||
#if STM32MP_UART_PROGRAMMER
|
||||
#if STM32MP_UART_PROGRAMMER || !defined(IMAGE_BL2)
|
||||
/*
|
||||
* UART Management
|
||||
*/
|
||||
|
|
Loading…
Add table
Reference in a new issue