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

Vikas Manocha vikas.manocha at st.com
Thu Nov 16 17:55:15 UTC 2017


looks good,

On 11/15/2017 11:59 PM, patrice.chotard at st.com wrote:
> From: Patrice Chotard <patrice.chotard at st.com>
> 
> 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 at st.com>

Reviewed-by: Vikas Manocha <vikas.manocha at st.com>

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 <asm/io.h>
>  #include <asm/armv7m_mpu.h>
>  
> -u32 get_cpu_rev(void)
> -{
> -	return 0;
> -}
> -
>  int arch_cpu_init(void)
>  {
>  	int i;
> @@ -30,11 +25,11 @@ int arch_cpu_init(void)
>  		{ 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 },
> +		/* armv7m code area */
> +		{ 0x00000000, REGION_1, XN_DIS, PRIV_RW_USR_RW,
> +		STRONG_ORDER, REGION_512MB },
>  
> -		/* Device area in all H7 : Not executable */
> +		/* Device area : Not executable */
>  		{ 0x40000000, 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
>  		 */
> -		{ 0xE0000000, REGION_4, XN_EN, PRIV_RW_USR_RW,
> +		{ 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();
> @@ -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..0000000
> --- a/arch/arm/mach-stm32/stm32f4/soc.c
> +++ /dev/null
> @@ -1,41 +0,0 @@
> -/*
> - * (C) Copyright 2015
> - * Kamil Lulko, <kamil.lulko at 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)
> -{
> -}
> 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/arch/arm/mach-stm32/stm32f7/soc.c
> deleted file mode 100644
> index a960cc1..0000000
> --- a/arch/arm/mach-stm32/stm32f7/soc.c
> +++ /dev/null
> @@ -1,49 +0,0 @@
> -/*
> - * (C) Copyright 2015
> - * Kamil Lulko, <kamil.lulko at 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
> index cba2e3b..0000000
> --- a/arch/arm/mach-stm32/stm32h7/Makefile
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -#
> -# Copyright (C) 2017, STMicroelectronics - All Rights Reserved
> -# Author(s): Patrice CHOTARD, <patrice.chotard at st.com> for STMicroelectronics.
> -#
> -# SPDX-License-Identifier:	GPL-2.0+
> -#
> -
> -obj-y += soc.o
> diff --git a/board/st/stm32f429-discovery/stm32f429-discovery.c b/board/st/stm32f429-discovery/stm32f429-discovery.c
> index d6763c3..9ca887c 100644
> --- a/board/st/stm32f429-discovery/stm32f429-discovery.c
> +++ b/board/st/stm32f429-discovery/stm32f429-discovery.c
> @@ -293,6 +293,8 @@ int board_early_init_f(void)
>  {
>  	int res;
>  
> +	configure_clocks();
> +
>  	res = uart_setup_gpio();
>  	if (res)
>  		return res;
> 


More information about the U-Boot mailing list