diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 33c8411e3eba7ce4a6120c8776d9032adccb2e5d..876a620cf197b343ad2fdc27a9864a0bc6ee71ab 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -702,8 +702,8 @@ config ARCH_UNIPHIER
 	  Support for UniPhier SoC family developed by Socionext Inc.
 	  (formerly, System LSI Business Division of Panasonic Corporation)
 
-config TARGET_STM32F429_DISCOVERY
-	bool "Support STM32F429 Discovery"
+config STM32
+	bool "Support STM32"
 	select CPU_V7M
 	select DM
 	select DM_SERIAL
@@ -762,6 +762,8 @@ source "arch/arm/mach-s5pc1xx/Kconfig"
 
 source "arch/arm/mach-socfpga/Kconfig"
 
+source "arch/arm/mach-stm32/Kconfig"
+
 source "arch/arm/mach-tegra/Kconfig"
 
 source "arch/arm/mach-uniphier/Kconfig"
@@ -836,7 +838,6 @@ source "board/spear/spear310/Kconfig"
 source "board/spear/spear320/Kconfig"
 source "board/spear/spear600/Kconfig"
 source "board/spear/x600/Kconfig"
-source "board/st/stm32f429-discovery/Kconfig"
 source "board/st/stv0991/Kconfig"
 source "board/sunxi/Kconfig"
 source "board/syteco/zmx25/Kconfig"
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 3d156732139e5de1f847a12a0dc6b49f5825d2c1..cd7d8803f3bdcb7800f6291533c67d0e9461fd8e 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -56,6 +56,7 @@ machine-$(CONFIG_ORION5X)		+= orion5x
 machine-$(CONFIG_ARCH_S5PC1XX)		+= s5pc1xx
 machine-$(CONFIG_ARCH_SOCFPGA)		+= socfpga
 machine-$(CONFIG_ARCH_ROCKCHIP)		+= rockchip
+machine-$(CONFIG_STM32)			+= stm32
 machine-$(CONFIG_TEGRA)			+= tegra
 machine-$(CONFIG_ARCH_UNIPHIER)		+= uniphier
 machine-$(CONFIG_ARCH_ZYNQ)		+= zynq
diff --git a/arch/arm/cpu/armv7m/Makefile b/arch/arm/cpu/armv7m/Makefile
index 93a19566f511111a99e275e649c56dc819a14222..aff60e8102ea4b0751eb78fe37194767349eb9e5 100644
--- a/arch/arm/cpu/armv7m/Makefile
+++ b/arch/arm/cpu/armv7m/Makefile
@@ -7,6 +7,3 @@
 
 extra-y := start.o
 obj-y += cpu.o
-
-obj-$(CONFIG_STM32F1) += stm32f1/
-obj-$(CONFIG_STM32F4) += stm32f4/
diff --git a/arch/arm/mach-stm32/Kconfig b/arch/arm/mach-stm32/Kconfig
new file mode 100644
index 0000000000000000000000000000000000000000..7dbeb040d53d033e0713c6434679f7dd9a1ac0fc
--- /dev/null
+++ b/arch/arm/mach-stm32/Kconfig
@@ -0,0 +1,12 @@
+if STM32
+
+config STM32F4
+	bool "stm32f4 family"
+
+config STM32F1
+	bool "stm32f1 family"
+
+source "arch/arm/mach-stm32/stm32f4/Kconfig"
+source "arch/arm/mach-stm32/stm32f1/Kconfig"
+
+endif
diff --git a/arch/arm/mach-stm32/Makefile b/arch/arm/mach-stm32/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..ea06034e1031bc66dacb09f2fb32f4f6abb307be
--- /dev/null
+++ b/arch/arm/mach-stm32/Makefile
@@ -0,0 +1,9 @@
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
+
+obj-$(CONFIG_STM32F1) += stm32f1/
+obj-$(CONFIG_STM32F4) += stm32f4/
diff --git a/arch/arm/mach-stm32/stm32f1/Kconfig b/arch/arm/mach-stm32/stm32f1/Kconfig
new file mode 100644
index 0000000000000000000000000000000000000000..f627fd254166ed06c34420e243acdcba312d4dc0
--- /dev/null
+++ b/arch/arm/mach-stm32/stm32f1/Kconfig
@@ -0,0 +1,3 @@
+if STM32F1
+
+endif
diff --git a/arch/arm/cpu/armv7m/stm32f1/Makefile b/arch/arm/mach-stm32/stm32f1/Makefile
similarity index 100%
rename from arch/arm/cpu/armv7m/stm32f1/Makefile
rename to arch/arm/mach-stm32/stm32f1/Makefile
diff --git a/arch/arm/cpu/armv7m/stm32f1/clock.c b/arch/arm/mach-stm32/stm32f1/clock.c
similarity index 100%
rename from arch/arm/cpu/armv7m/stm32f1/clock.c
rename to arch/arm/mach-stm32/stm32f1/clock.c
diff --git a/arch/arm/cpu/armv7m/stm32f1/flash.c b/arch/arm/mach-stm32/stm32f1/flash.c
similarity index 100%
rename from arch/arm/cpu/armv7m/stm32f1/flash.c
rename to arch/arm/mach-stm32/stm32f1/flash.c
diff --git a/arch/arm/cpu/armv7m/stm32f1/soc.c b/arch/arm/mach-stm32/stm32f1/soc.c
similarity index 100%
rename from arch/arm/cpu/armv7m/stm32f1/soc.c
rename to arch/arm/mach-stm32/stm32f1/soc.c
diff --git a/arch/arm/cpu/armv7m/stm32f1/timer.c b/arch/arm/mach-stm32/stm32f1/timer.c
similarity index 100%
rename from arch/arm/cpu/armv7m/stm32f1/timer.c
rename to arch/arm/mach-stm32/stm32f1/timer.c
diff --git a/arch/arm/mach-stm32/stm32f4/Kconfig b/arch/arm/mach-stm32/stm32f4/Kconfig
new file mode 100644
index 0000000000000000000000000000000000000000..a63619e07fd97d0e622ccfa3ca982d8744117b3b
--- /dev/null
+++ b/arch/arm/mach-stm32/stm32f4/Kconfig
@@ -0,0 +1,8 @@
+if STM32F4
+
+config TARGET_STM32F429_DISCOVERY
+	bool "STM32F429 Discovery board"
+
+source "board/st/stm32f429-discovery/Kconfig"
+
+endif
diff --git a/arch/arm/cpu/armv7m/stm32f4/Makefile b/arch/arm/mach-stm32/stm32f4/Makefile
similarity index 100%
rename from arch/arm/cpu/armv7m/stm32f4/Makefile
rename to arch/arm/mach-stm32/stm32f4/Makefile
diff --git a/arch/arm/cpu/armv7m/stm32f4/clock.c b/arch/arm/mach-stm32/stm32f4/clock.c
similarity index 100%
rename from arch/arm/cpu/armv7m/stm32f4/clock.c
rename to arch/arm/mach-stm32/stm32f4/clock.c
diff --git a/arch/arm/cpu/armv7m/stm32f4/flash.c b/arch/arm/mach-stm32/stm32f4/flash.c
similarity index 100%
rename from arch/arm/cpu/armv7m/stm32f4/flash.c
rename to arch/arm/mach-stm32/stm32f4/flash.c
diff --git a/arch/arm/cpu/armv7m/stm32f4/soc.c b/arch/arm/mach-stm32/stm32f4/soc.c
similarity index 100%
rename from arch/arm/cpu/armv7m/stm32f4/soc.c
rename to arch/arm/mach-stm32/stm32f4/soc.c
diff --git a/arch/arm/cpu/armv7m/stm32f4/timer.c b/arch/arm/mach-stm32/stm32f4/timer.c
similarity index 100%
rename from arch/arm/cpu/armv7m/stm32f4/timer.c
rename to arch/arm/mach-stm32/stm32f4/timer.c
diff --git a/configs/stm32f429-discovery_defconfig b/configs/stm32f429-discovery_defconfig
index 7512457d0bf3175856d55e0ae89a68dfb70794be..fb330e25ae366cbbe2fcc20652411715660234fe 100644
--- a/configs/stm32f429-discovery_defconfig
+++ b/configs/stm32f429-discovery_defconfig
@@ -1,4 +1,6 @@
 CONFIG_ARM=y
+CONFIG_STM32=y
+CONFIG_STM32F4=y
 CONFIG_TARGET_STM32F429_DISCOVERY=y
 CONFIG_SYS_PROMPT="U-Boot > "
 # CONFIG_CMD_SETEXPR is not set
diff --git a/include/configs/stm32f429-discovery.h b/include/configs/stm32f429-discovery.h
index 3e808613b0c4f0b09867835992e88bcdd953e9db..85d492ddc5f4965a3355067c06db1773ea502559 100644
--- a/include/configs/stm32f429-discovery.h
+++ b/include/configs/stm32f429-discovery.h
@@ -8,7 +8,6 @@
 #ifndef __CONFIG_H
 #define __CONFIG_H
 
-#define CONFIG_STM32F4
 #define CONFIG_SYS_THUMB_BUILD
 #define CONFIG_STM32F4DISCOVERY