]> git.sur5r.net Git - u-boot/commitdiff
mach-stm32: Factorize MPU's region config for STM32 SoCs
authorPatrice Chotard <patrice.chotard@st.com>
Thu, 16 Nov 2017 07:59:21 +0000 (08:59 +0100)
committerTom Rini <trini@konsulko.com>
Thu, 30 Nov 2017 03:30:50 +0000 (22:30 -0500)
MPU's region setup can be factorized between STM32F4/F7/H7 SoCs family
and used a common MPU's region config.

Only one exception for STM32H7 which doesn't have device area
located at 0xA000 0000.

For STM32F4, configure_clocks() need to be moved from arch_cpu_init()
to board_early_init_f().

Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Reviewed-by: Vikas Manocha <vikas.manocha@st.com>
arch/arm/mach-stm32/Makefile
arch/arm/mach-stm32/soc.c [new file with mode: 0644]
arch/arm/mach-stm32/stm32f4/Makefile
arch/arm/mach-stm32/stm32f4/soc.c [deleted file]
arch/arm/mach-stm32/stm32f7/Makefile
arch/arm/mach-stm32/stm32f7/soc.c [deleted file]
arch/arm/mach-stm32/stm32h7/Makefile [deleted file]
arch/arm/mach-stm32/stm32h7/soc.c [deleted file]
board/st/stm32f429-discovery/stm32f429-discovery.c

index 0f5ac37168a57b628d6449a24a744400061a650b..c2806af69b04ea0db300c54ac0e84010da6541df 100644 (file)
@@ -4,7 +4,6 @@
 #
 # SPDX-License-Identifier:     GPL-2.0+
 #
-
+obj-y += soc.o
 obj-$(CONFIG_STM32F4) += stm32f4/
 obj-$(CONFIG_STM32F7) += stm32f7/
-obj-$(CONFIG_STM32H7) += stm32h7/
diff --git a/arch/arm/mach-stm32/soc.c b/arch/arm/mach-stm32/soc.c
new file mode 100644 (file)
index 0000000..df20d54
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
+ * Author(s): Patrice Chotard, <patrice.chotard@st.com> for STMicroelectronics.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/armv7m_mpu.h>
+
+int arch_cpu_init(void)
+{
+       int i;
+
+       struct mpu_region_config stm32_region_config[] = {
+               /*
+                * Make all 4GB cacheable & executable. We are overriding it
+                * with next region for any requirement. e.g. below region1,
+                * 2 etc.
+                * In other words, the area not coming in following
+                * regions configuration is the one configured here in region_0
+                * (cacheable & executable).
+                */
+               { 0x00000000, REGION_0, XN_DIS, PRIV_RW_USR_RW,
+               O_I_WB_RD_WR_ALLOC, REGION_4GB },
+
+               /* armv7m code area */
+               { 0x00000000, REGION_1, XN_DIS, PRIV_RW_USR_RW,
+               STRONG_ORDER, REGION_512MB },
+
+               /* Device area : Not executable */
+               { 0x40000000, REGION_2, XN_EN, PRIV_RW_USR_RW,
+               DEVICE_NON_SHARED, REGION_512MB },
+
+               /*
+                * Armv7m fixed configuration: strongly ordered & not
+                * executable, not cacheable
+                */
+               { 0xE0000000, REGION_3, XN_EN, PRIV_RW_USR_RW,
+               STRONG_ORDER, REGION_512MB },
+
+#if !defined(CONFIG_STM32H7)
+               /* Device area : Not executable */
+               { 0xA0000000, REGION_4, XN_EN, PRIV_RW_USR_RW,
+               DEVICE_NON_SHARED, REGION_512MB },
+#endif
+       };
+
+       disable_mpu();
+       for (i = 0; i < ARRAY_SIZE(stm32_region_config); i++)
+               mpu_config(&stm32_region_config[i]);
+       enable_mpu();
+
+       return 0;
+}
index 020e78370c84715d643a0e5dce31ce29c3505347..63db8200300255bc8ce73ff1b5931036778a6bb7 100644 (file)
@@ -8,4 +8,4 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-obj-y += soc.o clock.o timer.o
+obj-y += clock.o timer.o
diff --git a/arch/arm/mach-stm32/stm32f4/soc.c b/arch/arm/mach-stm32/stm32f4/soc.c
deleted file mode 100644 (file)
index 9eb655a..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * (C) Copyright 2015
- * Kamil Lulko, <kamil.lulko@gmail.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <common.h>
-#include <asm/io.h>
-#include <asm/armv7m_mpu.h>
-#include <asm/arch/stm32.h>
-
-u32 get_cpu_rev(void)
-{
-       return 0;
-}
-
-int arch_cpu_init(void)
-{
-       struct mpu_region_config stm32_region_config[] = {
-               { 0x00000000, REGION_0, XN_DIS, PRIV_RW_USR_RW,
-               STRONG_ORDER, REGION_4GB },
-       };
-       int i;
-
-       configure_clocks();
-       /*
-        * Configure the memory protection unit (MPU) to allow full access to
-        * the whole 4GB address space.
-        */
-       disable_mpu();
-       for (i = 0; i < ARRAY_SIZE(stm32_region_config); i++)
-               mpu_config(&stm32_region_config[i]);
-       enable_mpu();
-
-       return 0;
-}
-
-void s_init(void)
-{
-}
index 6696b267fe434f834e1644af46ecbd583f79b4e7..8132c1323403bfd6df532a1ca948b37bc60b5792 100644 (file)
@@ -5,4 +5,4 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-obj-y += timer.o soc.o
+obj-y += timer.o
diff --git a/arch/arm/mach-stm32/stm32f7/soc.c b/arch/arm/mach-stm32/stm32f7/soc.c
deleted file mode 100644 (file)
index a960cc1..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * (C) Copyright 2015
- * Kamil Lulko, <kamil.lulko@gmail.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <common.h>
-#include <asm/io.h>
-#include <asm/armv7m_mpu.h>
-#include <asm/arch/stm32.h>
-
-u32 get_cpu_rev(void)
-{
-       return 0;
-}
-
-int arch_cpu_init(void)
-{
-       int i;
-
-       struct mpu_region_config stm32_region_config[] = {
-               { 0x00000000, REGION_0, XN_DIS, PRIV_RW_USR_RW,
-               O_I_WB_RD_WR_ALLOC, REGION_4GB },
-
-               { 0x00000000, REGION_1, XN_DIS, PRIV_RW_USR_RW,
-               STRONG_ORDER, REGION_512MB },
-
-               { 0x40000000, REGION_2, XN_EN, PRIV_RW_USR_RW,
-               DEVICE_NON_SHARED, REGION_512MB },
-
-               { 0xA0000000, REGION_3, XN_EN, PRIV_RW_USR_RW,
-               DEVICE_NON_SHARED, REGION_512MB },
-
-               { 0xE0000000, REGION_4, XN_EN, PRIV_RW_USR_RW,
-               STRONG_ORDER, REGION_512MB },
-       };
-
-       disable_mpu();
-       for (i = 0; i < ARRAY_SIZE(stm32_region_config); i++)
-               mpu_config(&stm32_region_config[i]);
-       enable_mpu();
-
-       return 0;
-}
-
-void s_init(void)
-{
-}
diff --git a/arch/arm/mach-stm32/stm32h7/Makefile b/arch/arm/mach-stm32/stm32h7/Makefile
deleted file mode 100644 (file)
index cba2e3b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#
-# Copyright (C) 2017, STMicroelectronics - All Rights Reserved
-# Author(s): Patrice CHOTARD, <patrice.chotard@st.com> for STMicroelectronics.
-#
-# SPDX-License-Identifier:     GPL-2.0+
-#
-
-obj-y += soc.o
diff --git a/arch/arm/mach-stm32/stm32h7/soc.c b/arch/arm/mach-stm32/stm32h7/soc.c
deleted file mode 100644 (file)
index 692dbcc..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
- * Author(s): Patrice Chotard, <patrice.chotard@st.com> for STMicroelectronics.
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <common.h>
-#include <asm/io.h>
-#include <asm/armv7m_mpu.h>
-
-u32 get_cpu_rev(void)
-{
-       return 0;
-}
-
-int arch_cpu_init(void)
-{
-       int i;
-
-       struct mpu_region_config stm32_region_config[] = {
-               /*
-                * Make all 4GB cacheable & executable. We are overriding it
-                * with next region for any requirement. e.g. below region1,
-                * 2 etc.
-                * In other words, the area not coming in following
-                * regions configuration is the one configured here in region_0
-                * (cacheable & executable).
-                */
-               { 0x00000000, REGION_0, XN_DIS, PRIV_RW_USR_RW,
-               O_I_WB_RD_WR_ALLOC, REGION_4GB },
-
-               /* Code area, executable & strongly ordered */
-               { 0xD0000000, REGION_1, XN_EN, PRIV_RW_USR_RW,
-               STRONG_ORDER, REGION_8MB },
-
-               /* Device area in all H7 : Not executable */
-               { 0x40000000, REGION_2, XN_EN, PRIV_RW_USR_RW,
-               DEVICE_NON_SHARED, REGION_512MB },
-
-               /*
-                * Armv7m fixed configuration: strongly ordered & not
-                * executable, not cacheable
-                */
-               { 0xE0000000, REGION_4, XN_EN, PRIV_RW_USR_RW,
-               STRONG_ORDER, REGION_512MB },
-       };
-
-       disable_mpu();
-       for (i = 0; i < ARRAY_SIZE(stm32_region_config); i++)
-               mpu_config(&stm32_region_config[i]);
-       enable_mpu();
-
-       return 0;
-}
-
-void s_init(void)
-{
-}
index 6f19a0563d0e09e7c69a25c9bd45ab8ddae5fef4..1c34a8efe14e314b68cfbe9953b2409c7b34baad 100644 (file)
@@ -294,6 +294,8 @@ int board_early_init_f(void)
 {
        int res;
 
+       configure_clocks();
+
        res = uart_setup_gpio();
        if (res)
                return res;