Re: [U-Boot] [PATCH] mach-stm32: Factorize MPU's region config for STM32 SoCs
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
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