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

Johannes Krottmayer johannes at krotti42.com
Thu May 8 23:23:46 CEST 2025


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)
-- 
2.39.5




More information about the U-Boot mailing list