diff --git a/arch/arm/mach-stm32/Kconfig b/arch/arm/mach-stm32/Kconfig
index a3390d0bfd4aa915824abd1fd04d785bc1c200c3..101089d67d6dd35bc36fc98efd92ddc3384df477 100644
--- a/arch/arm/mach-stm32/Kconfig
+++ b/arch/arm/mach-stm32/Kconfig
@@ -21,6 +21,7 @@ config STM32F7
 	select SPL_OF_CONTROL
 	select SPL_OF_LIBFDT
 	select SPL_OF_TRANSLATE
+	select SPL_OS_BOOT
 	select SPL_PINCTRL
 	select SPL_RAM
 	select SPL_SERIAL_SUPPORT
diff --git a/board/st/stm32f746-disco/stm32f746-disco.c b/board/st/stm32f746-disco/stm32f746-disco.c
index 87fa5eb48e27e6779eb8b69ea9c23ffc77cbe376..2bb0f02c9683302924da19ddc7270b4635b3966d 100644
--- a/board/st/stm32f746-disco/stm32f746-disco.c
+++ b/board/st/stm32f746-disco/stm32f746-disco.c
@@ -91,6 +91,15 @@ int board_early_init_f(void)
 #endif
 
 #ifdef CONFIG_SPL_BUILD
+#ifdef CONFIG_SPL_OS_BOOT
+int spl_start_uboot(void)
+{
+	debug("SPL: booting kernel\n");
+	/* break into full u-boot on 'c' */
+	return serial_tstc() && serial_getc() == 'c';
+}
+#endif
+
 int spl_dram_init(void)
 {
 	struct udevice *dev;
diff --git a/include/configs/stm32f746-disco.h b/include/configs/stm32f746-disco.h
index 055fdf8ef01d5f009754834b11bc2089f8aa7f32..905202597aa083727b4e4a9d9928095293201a82 100644
--- a/include/configs/stm32f746-disco.h
+++ b/include/configs/stm32f746-disco.h
@@ -86,6 +86,13 @@
 #define CONFIG_SYS_UBOOT_START		0XC00003FD
 #define CONFIG_SYS_UBOOT_BASE		(CONFIG_SYS_FLASH_BASE + \
 					 CONFIG_SYS_SPL_LEN)
+
+#define CONFIG_SYS_OS_BASE		0x08040000
+/* DT blob (fdt) address */
+#define CONFIG_SYS_SPL_ARGS_ADDR        0xC0000100
+#define CONFIG_SYS_FDT_BASE		(CONFIG_SYS_FLASH_BASE + \
+					0x1C0000)
+#define CONFIG_SYS_FDT_SIZE		(20*1024)
 #endif
 /* For SPL ends */