[PATCH 01/10] arm: mach-stm32: stm32h7: add initial lowlevel early function

Patrice CHOTARD patrice.chotard at foss.st.com
Tue May 27 14:59:57 CEST 2025



On 5/8/25 23:23, Johannes Krottmayer wrote:
> Add new assembly function 'arch_very_early_init'
> 
> This functions setups the power supply for STM32H7 SoC's to
> direct SMPS mode, which is required for some boards like
> the STM32H747I-DISCO in the default configuration.
> 
> If this isn't done in an early stage it cause a deadlock and
> also the SoC is running in a limited mode according to the
> TRM from the SoC.
> 
> Signed-off-by: Johannes Krottmayer <johannes at krotti42.com>
> Cc: Patrick Delaunay <patrick.delaunay at foss.st.com>
> Cc: Patrice Chotard <patrice.chotard at foss.st.com>
> ---
>  arch/arm/mach-stm32/stm32h7/lowlevel.S | 45 ++++++++++++++++++++++++++
>  1 file changed, 45 insertions(+)
>  create mode 100644 arch/arm/mach-stm32/stm32h7/lowlevel.S
> 
> diff --git a/arch/arm/mach-stm32/stm32h7/lowlevel.S b/arch/arm/mach-stm32/stm32h7/lowlevel.S
> new file mode 100644
> index 00000000000..97f4e383e3b
> --- /dev/null
> +++ b/arch/arm/mach-stm32/stm32h7/lowlevel.S
> @@ -0,0 +1,45 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (C) 2025, Johannes Krottmayer <johannes at krotti42.com>
> + */
> +
> +#include <linux/linkage.h>
> +
> +/*
> + * STM32H7 PWR registers
> + */
> +#define PWR_CR3			0x5802480C
> +#define PWR_CR3_LDOEN		1
> +
> +#define PWR_CSR1			0x58024804
> +#define PWR_CSR1_ACTVOSRDY	13
> +
> +ENTRY(arch_very_early_init)
> +	/*
> +	 * Setup power supply for STM32H7 to direct SMPS mode.
> +	 * This is the default configuration from some boards
> +	 * like the SMT32H747i-DISCO.
> +	 *
> +	 * If these steps will not be done, this cause a deadlock.
> +	 */
> +	ldr r6, =PWR_CR3
> +	/* Disable LDO */
> +	movs r0, #1
> +	lsl r1, r0, #PWR_CR3_LDOEN
> +	mvn r2, r1
> +	ldr r3, [r6]
> +	and r3, r2
> +	str r3, [r6]
> +	lsl r1, r0, #PWR_CSR1_ACTVOSRDY
> +
> +	/* Loop until ACTVOSRDY is valid */
> +1:
> +	ldr r6, =PWR_CSR1
> +	ldr r3, [r6]
> +	and r3, r1
> +	cmp r3, r1
> +	bne 1b
> +
> +	/* Jump back to C runtime setup */
> +	bx lr
> +ENDPROC(arch_very_early_init)

Hi Johannes

Reviewed-by: Patrice Chotard <patrice.chotard at foss.st.com>

Thanks
Patrice


More information about the U-Boot mailing list