diff --git a/docs/plat/stm32mp1.rst b/docs/plat/stm32mp1.rst index af302c628..cefc21f12 100644 --- a/docs/plat/stm32mp1.rst +++ b/docs/plat/stm32mp1.rst @@ -115,6 +115,24 @@ Available storage medias are: - ``STM32MP_SPI_NAND`` - ``STM32MP_SPI_NOR`` +Serial boot devices: + +- ``STM32MP_UART_PROGRAMMER`` +- ``STM32MP_USB_PROGRAMMER`` + + +Other configuration flags: + +- | ``DTB_FILE_NAME``: to precise board device-tree blob to be used. + | Default: stm32mp157c-ev1.dtb +- | ``STM32MP_EARLY_CONSOLE``: to enable early traces before clock driver is setup. + | Default: 0 (disabled) +- | ``STM32MP_UART_BAUDRATE``: to select UART baud rate. + | Default: 115200 +- | ``STM32_TF_VERSION``: to manage BL2 monotonic counter. + | Default: 0 + + Boot with FIP ~~~~~~~~~~~~~ You need to build BL2, BL32 (SP_min or OP-TEE) and BL33 (U-Boot) before building FIP binary. diff --git a/drivers/st/uart/aarch32/stm32_console.S b/drivers/st/uart/aarch32/stm32_console.S index 2b8879a11..e467f0987 100644 --- a/drivers/st/uart/aarch32/stm32_console.S +++ b/drivers/st/uart/aarch32/stm32_console.S @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2021, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2018-2022, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -67,9 +67,24 @@ func console_stm32_core_init bic r3, r3, #USART_CR2_STOP str r3, [r0, #USART_CR2] /* Divisor = (Uart clock + (baudrate / 2)) / baudrate */ - lsl r3, r2, #1 + lsr r3, r2, #1 add r3, r1, r3 udiv r3, r3, r2 + cmp r3, #16 + bhi 2f + /* Oversampling 8 */ + /* Divisor = (2 * Uart clock + (baudrate / 2)) / baudrate */ + lsr r3, r2, #1 + add r3, r3, r1, lsl #1 + udiv r3, r3, r2 + and r1, r3, #USART_BRR_DIV_FRACTION + lsr r1, r1, #1 + bic r3, r3, #USART_BRR_DIV_FRACTION + orr r3, r3, r1 + ldr r1, [r0, #USART_CR1] + orr r1, r1, #USART_CR1_OVER8 + str r1, [r0, #USART_CR1] +2: str r3, [r0, #USART_BRR] /* Enable UART */ ldr r3, [r0, #USART_CR1] diff --git a/plat/st/common/stm32mp_common.c b/plat/st/common/stm32mp_common.c index f99cad506..d922d3c84 100644 --- a/plat/st/common/stm32mp_common.c +++ b/plat/st/common/stm32mp_common.c @@ -210,7 +210,7 @@ static void set_console(uintptr_t base, uint32_t clk_rate) unsigned int console_flags; if (console_stm32_register(base, clk_rate, - STM32MP_UART_BAUDRATE, &console) == 0) { + (uint32_t)STM32MP_UART_BAUDRATE, &console) == 0) { panic(); } diff --git a/plat/st/stm32mp1/platform.mk b/plat/st/stm32mp1/platform.mk index ca2bad89c..0f579a40a 100644 --- a/plat/st/stm32mp1/platform.mk +++ b/plat/st/stm32mp1/platform.mk @@ -10,6 +10,7 @@ BL2_AT_EL3 := 1 USE_COHERENT_MEM := 0 STM32MP_EARLY_CONSOLE ?= 0 +STM32MP_UART_BAUDRATE ?= 115200 # Allow TF-A to concatenate BL2 & BL32 binaries in a single file, # share DTB file between BL2 and BL32 @@ -172,6 +173,7 @@ $(eval $(call assert_numerics,\ PLAT_PARTITION_MAX_ENTRIES \ STM32_TF_A_COPIES \ STM32_TF_VERSION \ + STM32MP_UART_BAUDRATE \ ))) $(eval $(call add_defines,\ @@ -189,6 +191,7 @@ $(eval $(call add_defines,\ STM32MP_SDMMC \ STM32MP_SPI_NAND \ STM32MP_SPI_NOR \ + STM32MP_UART_BAUDRATE \ STM32MP_UART_PROGRAMMER \ STM32MP_USB_PROGRAMMER \ STM32MP_USE_STM32IMAGE \ diff --git a/plat/st/stm32mp1/stm32mp1_def.h b/plat/st/stm32mp1/stm32mp1_def.h index aabe81f1b..801b9474a 100644 --- a/plat/st/stm32mp1/stm32mp1_def.h +++ b/plat/st/stm32mp1/stm32mp1_def.h @@ -202,7 +202,6 @@ enum ddr_type { #define USART6_BASE U(0x44003000) #define UART7_BASE U(0x40018000) #define UART8_BASE U(0x40019000) -#define STM32MP_UART_BAUDRATE U(115200) /* For UART crash console */ #define STM32MP_DEBUG_USART_BASE UART4_BASE