Re: [U-Boot] [PATCH] mach-stm32: Factorize MPU's region config for STM32 SoCs

2017-11-16 Thread Vikas Manocha
looks good,

On 11/15/2017 11:59 PM, patrice.chot...@st.com wrote:
> From: Patrice Chotard 
> 
> 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 .
> 
> For STM32F4, configure_clocks() need to be moved from arch_cpu_init()
> to board_early_init_f().
> 
> Signed-off-by: Patrice Chotard 

Reviewed-by: Vikas Manocha 

Cheers,
Vikas

> ---
>  arch/arm/mach-stm32/Makefile   |  3 +-
>  arch/arm/mach-stm32/{stm32h7 => }/soc.c| 25 +--
>  arch/arm/mach-stm32/stm32f4/Makefile   |  2 +-
>  arch/arm/mach-stm32/stm32f4/soc.c  | 41 --
>  arch/arm/mach-stm32/stm32f7/Makefile   |  2 +-
>  arch/arm/mach-stm32/stm32f7/soc.c  | 49 
> --
>  arch/arm/mach-stm32/stm32h7/Makefile   |  8 
>  board/st/stm32f429-discovery/stm32f429-discovery.c |  2 +
>  8 files changed, 16 insertions(+), 116 deletions(-)
>  rename arch/arm/mach-stm32/{stm32h7 => }/soc.c (75%)
>  delete mode 100644 arch/arm/mach-stm32/stm32f4/soc.c
>  delete mode 100644 arch/arm/mach-stm32/stm32f7/soc.c
>  delete mode 100644 arch/arm/mach-stm32/stm32h7/Makefile
> 
> diff --git a/arch/arm/mach-stm32/Makefile b/arch/arm/mach-stm32/Makefile
> index 0f5ac37..c2806af 100644
> --- a/arch/arm/mach-stm32/Makefile
> +++ b/arch/arm/mach-stm32/Makefile
> @@ -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/stm32h7/soc.c b/arch/arm/mach-stm32/soc.c
> similarity index 75%
> rename from arch/arm/mach-stm32/stm32h7/soc.c
> rename to arch/arm/mach-stm32/soc.c
> index 692dbcc..df20d54 100644
> --- a/arch/arm/mach-stm32/stm32h7/soc.c
> +++ b/arch/arm/mach-stm32/soc.c
> @@ -9,11 +9,6 @@
>  #include 
>  #include 
>  
> -u32 get_cpu_rev(void)
> -{
> - return 0;
> -}
> -
>  int arch_cpu_init(void)
>  {
>   int i;
> @@ -30,11 +25,11 @@ int arch_cpu_init(void)
>   { 0x, REGION_0, XN_DIS, PRIV_RW_USR_RW,
>   O_I_WB_RD_WR_ALLOC, REGION_4GB },
>  
> - /* Code area, executable & strongly ordered */
> - { 0xD000, REGION_1, XN_EN, PRIV_RW_USR_RW,
> - STRONG_ORDER, REGION_8MB },
> + /* armv7m code area */
> + { 0x, REGION_1, XN_DIS, PRIV_RW_USR_RW,
> + STRONG_ORDER, REGION_512MB },
>  
> - /* Device area in all H7 : Not executable */
> + /* Device area : Not executable */
>   { 0x4000, REGION_2, XN_EN, PRIV_RW_USR_RW,
>   DEVICE_NON_SHARED, REGION_512MB },
>  
> @@ -42,8 +37,14 @@ int arch_cpu_init(void)
>* Armv7m fixed configuration: strongly ordered & not
>* executable, not cacheable
>*/
> - { 0xE000, REGION_4, XN_EN, PRIV_RW_USR_RW,
> + { 0xE000, REGION_3, XN_EN, PRIV_RW_USR_RW,
>   STRONG_ORDER, REGION_512MB },
> +
> +#if !defined(CONFIG_STM32H7)
> + /* Device area : Not executable */
> + { 0xA000, REGION_4, XN_EN, PRIV_RW_USR_RW,
> + DEVICE_NON_SHARED, REGION_512MB },
> +#endif
>   };
>  
>   disable_mpu();
> @@ -53,7 +54,3 @@ int arch_cpu_init(void)
>  
>   return 0;
>  }
> -
> -void s_init(void)
> -{
> -}
> diff --git a/arch/arm/mach-stm32/stm32f4/Makefile 
> b/arch/arm/mach-stm32/stm32f4/Makefile
> index 020e783..63db820 100644
> --- a/arch/arm/mach-stm32/stm32f4/Makefile
> +++ b/arch/arm/mach-stm32/stm32f4/Makefile
> @@ -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
> index 9eb655a..000
> --- a/arch/arm/mach-stm32/stm32f4/soc.c
> +++ /dev/null
> @@ -1,41 +0,0 @@
> -/*
> - * (C) Copyright 2015
> - * Kamil Lulko, 
> - *
> - * SPDX-License-Identifier:  GPL-2.0+
> - */
> -
> -#include 
> -#include 
> -#include 
> -#include 
> -
> -u32 get_cpu_rev(void)
> -{
> - return 0;
> -}
> -
> -int arch_cpu_init(void)
> -{
> - struct mpu_region_config stm32_region_config[] = {
> - { 0x, 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)
> -{
> -}
> diff --git a/arc

[U-Boot] [PATCH] mach-stm32: Factorize MPU's region config for STM32 SoCs

2017-11-16 Thread patrice.chotard
From: Patrice Chotard 

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 .

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

Signed-off-by: Patrice Chotard 
---
 arch/arm/mach-stm32/Makefile   |  3 +-
 arch/arm/mach-stm32/{stm32h7 => }/soc.c| 25 +--
 arch/arm/mach-stm32/stm32f4/Makefile   |  2 +-
 arch/arm/mach-stm32/stm32f4/soc.c  | 41 --
 arch/arm/mach-stm32/stm32f7/Makefile   |  2 +-
 arch/arm/mach-stm32/stm32f7/soc.c  | 49 --
 arch/arm/mach-stm32/stm32h7/Makefile   |  8 
 board/st/stm32f429-discovery/stm32f429-discovery.c |  2 +
 8 files changed, 16 insertions(+), 116 deletions(-)
 rename arch/arm/mach-stm32/{stm32h7 => }/soc.c (75%)
 delete mode 100644 arch/arm/mach-stm32/stm32f4/soc.c
 delete mode 100644 arch/arm/mach-stm32/stm32f7/soc.c
 delete mode 100644 arch/arm/mach-stm32/stm32h7/Makefile

diff --git a/arch/arm/mach-stm32/Makefile b/arch/arm/mach-stm32/Makefile
index 0f5ac37..c2806af 100644
--- a/arch/arm/mach-stm32/Makefile
+++ b/arch/arm/mach-stm32/Makefile
@@ -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/stm32h7/soc.c b/arch/arm/mach-stm32/soc.c
similarity index 75%
rename from arch/arm/mach-stm32/stm32h7/soc.c
rename to arch/arm/mach-stm32/soc.c
index 692dbcc..df20d54 100644
--- a/arch/arm/mach-stm32/stm32h7/soc.c
+++ b/arch/arm/mach-stm32/soc.c
@@ -9,11 +9,6 @@
 #include 
 #include 
 
-u32 get_cpu_rev(void)
-{
-   return 0;
-}
-
 int arch_cpu_init(void)
 {
int i;
@@ -30,11 +25,11 @@ int arch_cpu_init(void)
{ 0x, REGION_0, XN_DIS, PRIV_RW_USR_RW,
O_I_WB_RD_WR_ALLOC, REGION_4GB },
 
-   /* Code area, executable & strongly ordered */
-   { 0xD000, REGION_1, XN_EN, PRIV_RW_USR_RW,
-   STRONG_ORDER, REGION_8MB },
+   /* armv7m code area */
+   { 0x, REGION_1, XN_DIS, PRIV_RW_USR_RW,
+   STRONG_ORDER, REGION_512MB },
 
-   /* Device area in all H7 : Not executable */
+   /* Device area : Not executable */
{ 0x4000, REGION_2, XN_EN, PRIV_RW_USR_RW,
DEVICE_NON_SHARED, REGION_512MB },
 
@@ -42,8 +37,14 @@ int arch_cpu_init(void)
 * Armv7m fixed configuration: strongly ordered & not
 * executable, not cacheable
 */
-   { 0xE000, REGION_4, XN_EN, PRIV_RW_USR_RW,
+   { 0xE000, REGION_3, XN_EN, PRIV_RW_USR_RW,
STRONG_ORDER, REGION_512MB },
+
+#if !defined(CONFIG_STM32H7)
+   /* Device area : Not executable */
+   { 0xA000, REGION_4, XN_EN, PRIV_RW_USR_RW,
+   DEVICE_NON_SHARED, REGION_512MB },
+#endif
};
 
disable_mpu();
@@ -53,7 +54,3 @@ int arch_cpu_init(void)
 
return 0;
 }
-
-void s_init(void)
-{
-}
diff --git a/arch/arm/mach-stm32/stm32f4/Makefile 
b/arch/arm/mach-stm32/stm32f4/Makefile
index 020e783..63db820 100644
--- a/arch/arm/mach-stm32/stm32f4/Makefile
+++ b/arch/arm/mach-stm32/stm32f4/Makefile
@@ -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
index 9eb655a..000
--- a/arch/arm/mach-stm32/stm32f4/soc.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * (C) Copyright 2015
- * Kamil Lulko, 
- *
- * SPDX-License-Identifier:GPL-2.0+
- */
-
-#include 
-#include 
-#include 
-#include 
-
-u32 get_cpu_rev(void)
-{
-   return 0;
-}
-
-int arch_cpu_init(void)
-{
-   struct mpu_region_config stm32_region_config[] = {
-   { 0x, 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)
-{
-}
diff --git a/arch/arm/mach-stm32/stm32f7/Makefile 
b/arch/arm/mach-stm32/stm32f7/Makefile
index 6696b26..8132c13 100644
--- a/arch/arm/mach-stm32/stm32f7/Makefile
+++ b/arch/arm/mach-stm32/stm32f7/Makefile
@@ -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