diff mbox series

[v2,20/21] imx: Add basic support for the NXP IMXRT10xx SoC family

Message ID 20200110145148.82233-5-giulio.benetti@benettiengineering.com
State Accepted
Commit 77eb9a90ddbfd942352d735f4ab8785e4035309b
Delegated to: Stefano Babic
Headers show
Series Add i.MXRT family support | expand

Commit Message

Giulio Benetti Jan. 10, 2020, 2:51 p.m. UTC
Add i.IMXRT family basic support.

Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
---
V1->V2:
* introduced CONFIG_IMXRT
---
 arch/arm/Kconfig                            | 10 ++++++
 arch/arm/Makefile                           |  4 +--
 arch/arm/include/asm/arch-imxrt/clock.h     | 10 ++++++
 arch/arm/include/asm/arch-imxrt/gpio.h      | 19 +++++++++++
 arch/arm/include/asm/arch-imxrt/imx-regs.h  | 20 ++++++++++++
 arch/arm/include/asm/arch-imxrt/imxrt.h     | 11 +++++++
 arch/arm/include/asm/arch-imxrt/sys_proto.h | 11 +++++++
 arch/arm/mach-imx/Makefile                  |  3 +-
 arch/arm/mach-imx/imxrt/Kconfig             | 13 ++++++++
 arch/arm/mach-imx/imxrt/Makefile            |  7 +++++
 arch/arm/mach-imx/imxrt/soc.c               | 35 +++++++++++++++++++++
 11 files changed, 140 insertions(+), 3 deletions(-)
 create mode 100644 arch/arm/include/asm/arch-imxrt/clock.h
 create mode 100644 arch/arm/include/asm/arch-imxrt/gpio.h
 create mode 100644 arch/arm/include/asm/arch-imxrt/imx-regs.h
 create mode 100644 arch/arm/include/asm/arch-imxrt/imxrt.h
 create mode 100644 arch/arm/include/asm/arch-imxrt/sys_proto.h
 create mode 100644 arch/arm/mach-imx/imxrt/Kconfig
 create mode 100644 arch/arm/mach-imx/imxrt/Makefile
 create mode 100644 arch/arm/mach-imx/imxrt/soc.c

Comments

Stefano Babic Jan. 15, 2020, 12:46 p.m. UTC | #1
> Add i.IMXRT family basic support.
> Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
Applied to u-boot-imx, master, thanks !

Best regards,
Stefano Babic
Lukasz Majewski Jan. 28, 2020, 8:52 a.m. UTC | #2
Hi Giulio,

> Add i.IMXRT family basic support.
> 
> Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
> ---
> V1->V2:
> * introduced CONFIG_IMXRT
> ---
>  arch/arm/Kconfig                            | 10 ++++++
>  arch/arm/Makefile                           |  4 +--
>  arch/arm/include/asm/arch-imxrt/clock.h     | 10 ++++++
>  arch/arm/include/asm/arch-imxrt/gpio.h      | 19 +++++++++++
>  arch/arm/include/asm/arch-imxrt/imx-regs.h  | 20 ++++++++++++
>  arch/arm/include/asm/arch-imxrt/imxrt.h     | 11 +++++++
>  arch/arm/include/asm/arch-imxrt/sys_proto.h | 11 +++++++
>  arch/arm/mach-imx/Makefile                  |  3 +-
>  arch/arm/mach-imx/imxrt/Kconfig             | 13 ++++++++
>  arch/arm/mach-imx/imxrt/Makefile            |  7 +++++
>  arch/arm/mach-imx/imxrt/soc.c               | 35
> +++++++++++++++++++++ 11 files changed, 140 insertions(+), 3
> deletions(-) create mode 100644
> arch/arm/include/asm/arch-imxrt/clock.h create mode 100644
> arch/arm/include/asm/arch-imxrt/gpio.h create mode 100644
> arch/arm/include/asm/arch-imxrt/imx-regs.h create mode 100644
> arch/arm/include/asm/arch-imxrt/imxrt.h create mode 100644
> arch/arm/include/asm/arch-imxrt/sys_proto.h create mode 100644
> arch/arm/mach-imx/imxrt/Kconfig create mode 100644
> arch/arm/mach-imx/imxrt/Makefile create mode 100644
> arch/arm/mach-imx/imxrt/soc.c
> 
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 76365ef313..4c7d04400a 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -797,6 +797,14 @@ config ARCH_IMX8M
>  	select SUPPORT_SPL
>  	imply CMD_DM
>  
> +config ARCH_IMXRT
> +	bool "NXP i.MXRT platform"
> +	select CPU_V7M
> +	select DM
> +	select DM_SERIAL
> +	select SUPPORT_SPL
> +	imply CMD_DM
> +
>  config ARCH_MX23
>  	bool "NXP i.MX23 family"
>  	select CPU_ARM926EJS
> @@ -1722,6 +1730,8 @@ source "arch/arm/mach-imx/imx8/Kconfig"
>  
>  source "arch/arm/mach-imx/imx8m/Kconfig"
>  
> +source "arch/arm/mach-imx/imxrt/Kconfig"
> +
>  source "arch/arm/mach-imx/mxs/Kconfig"
>  
>  source "arch/arm/mach-omap2/Kconfig"
> diff --git a/arch/arm/Makefile b/arch/arm/Makefile
> index 856f2d8608..1e60a9fdd4 100644
> --- a/arch/arm/Makefile
> +++ b/arch/arm/Makefile
> @@ -104,11 +104,11 @@ libs-y += arch/arm/cpu/
>  libs-y += arch/arm/lib/
>  
>  ifeq ($(CONFIG_SPL_BUILD),y)
> -ifneq (,$(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_MX35)$(filter $(SOC),
> mx25 mx5 mx6 mx7 mx35 imx8m imx8)) +ifneq
> (,$(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_MX35)$(filter $(SOC), mx25 mx5
> mx6 mx7 mx35 imx8m imx8 imxrt)) libs-y += arch/arm/mach-imx/ endif
>  else
> -ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx7 mx7ulp mx31 mx35 mxs
> imx8m imx8 vf610)) +ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx7
> mx7ulp mx31 mx35 mxs imx8m imx8 imxrt vf610)) libs-y +=
> arch/arm/mach-imx/ endif
>  endif
> diff --git a/arch/arm/include/asm/arch-imxrt/clock.h
> b/arch/arm/include/asm/arch-imxrt/clock.h new file mode 100644
> index 0000000000..7409028b9a
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-imxrt/clock.h
> @@ -0,0 +1,10 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (C) 2019
> + * Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com>
> + */
> +
> +#ifndef __ASM_ARCH_CLOCK_H
> +#define __ASM_ARCH_CLOCK_H
> +
> +#endif /* __ASM_ARCH_CLOCK_H */
> diff --git a/arch/arm/include/asm/arch-imxrt/gpio.h
> b/arch/arm/include/asm/arch-imxrt/gpio.h new file mode 100644
> index 0000000000..da31a7438a
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-imxrt/gpio.h
> @@ -0,0 +1,19 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (C) 2019
> + * Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com>
> + */
> +
> +#ifndef __ASM_ARCH_GPIO_H__
> +#define __ASM_ARCH_GPIO_H__
> +
> +#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
> +/* GPIO registers */
> +struct gpio_regs {
> +	u32 gpio_dr;	/* data */
> +	u32 gpio_dir;	/* direction */
> +	u32 gpio_psr;	/* pad satus */
> +};
> +#endif
> +
> +#endif /* __ASM_ARCH_GPIO_H__ */
> diff --git a/arch/arm/include/asm/arch-imxrt/imx-regs.h
> b/arch/arm/include/asm/arch-imxrt/imx-regs.h new file mode 100644
> index 0000000000..4f1d439f6f
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-imxrt/imx-regs.h
> @@ -0,0 +1,20 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright(C) 2019
> + * Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com>
> + */
> +
> +#ifndef __ASM_ARCH_IMX_REGS_H__
> +#define __ASM_ARCH_IMX_REGS_H__
> +
> +#define ARCH_MXC
> +
> +#define GPIO1_BASE_ADDR		0x401B8000
> +#define GPIO2_BASE_ADDR		0x401BC000
> +#define GPIO3_BASE_ADDR		0x401C0000
> +#define GPIO4_BASE_ADDR		0x401C4000
> +#define GPIO5_BASE_ADDR		0x400C0000
> +
> +#define ANATOP_BASE_ADDR	0x400d8000
> +
> +#endif /* __ASM_ARCH_IMX_REGS_H__ */
> diff --git a/arch/arm/include/asm/arch-imxrt/imxrt.h
> b/arch/arm/include/asm/arch-imxrt/imxrt.h new file mode 100644
> index 0000000000..1cb2c57d31
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-imxrt/imxrt.h
> @@ -0,0 +1,11 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (C) 2019
> + * Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com>
> + */
> +
> +#ifndef _ASM_ARCH_IMXRT_H
> +#define _ASM_ARCH_IMXRT_H
> +
> +#endif /* _ASM_ARCH_IMXRT_H */
> +
> diff --git a/arch/arm/include/asm/arch-imxrt/sys_proto.h
> b/arch/arm/include/asm/arch-imxrt/sys_proto.h new file mode 100644
> index 0000000000..eb878e672e
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-imxrt/sys_proto.h
> @@ -0,0 +1,11 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (C) 2017 NXP
> + */
> +
> +#ifndef _ASM_ARCH_SYS_PROTO_H
> +#define _ASM_ARCH_SYS_PROTO_H
> +
> +#include <asm/mach-imx/sys_proto.h>
> +
> +#endif /* _ASM_ARCH_SYS_PROTO_H */
> diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
> index e14713c5c4..a70d51b5cf 100644
> --- a/arch/arm/mach-imx/Makefile
> +++ b/arch/arm/mach-imx/Makefile
> @@ -27,7 +27,7 @@ endif
>  obj-$(CONFIG_GPT_TIMER) += timer.o
>  obj-$(CONFIG_SYS_I2C_MXC) += i2c-mxv7.o
>  endif
> -ifeq ($(SOC),$(filter $(SOC),mx7 mx6 mxs imx8m imx8))
> +ifeq ($(SOC),$(filter $(SOC),mx7 mx6 mxs imx8m imx8 imxrt))
>  obj-y	+= misc.o
>  obj-$(CONFIG_SPL_BUILD)	+= spl.o
>  endif
> @@ -226,5 +226,6 @@ obj-$(CONFIG_MX7) += mx7/
>  obj-$(CONFIG_ARCH_MX7ULP) += mx7ulp/
>  obj-$(CONFIG_IMX8M) += imx8m/
>  obj-$(CONFIG_ARCH_IMX8) += imx8/
> +obj-$(CONFIG_ARCH_IMXRT) += imxrt/
>  
>  obj-$(CONFIG_SPL_BOOTROM_SUPPORT) += spl_imx_romapi.o
> diff --git a/arch/arm/mach-imx/imxrt/Kconfig
> b/arch/arm/mach-imx/imxrt/Kconfig new file mode 100644
> index 0000000000..96ad2e988b
> --- /dev/null
> +++ b/arch/arm/mach-imx/imxrt/Kconfig
> @@ -0,0 +1,13 @@
> +if ARCH_IMXRT
> +
> +config IMXRT
> +	bool
> +
> +config IMXRT1050
> +	bool
> +	select IMXRT
> +
> +config SYS_SOC
> +	default "imxrt"
> +
> +endif
> diff --git a/arch/arm/mach-imx/imxrt/Makefile
> b/arch/arm/mach-imx/imxrt/Makefile new file mode 100644
> index 0000000000..9621a8335a
> --- /dev/null
> +++ b/arch/arm/mach-imx/imxrt/Makefile
> @@ -0,0 +1,7 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +# (C) Copyright 2019
> +# Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com>
> +#
> +
> +obj-y	:= soc.o
> diff --git a/arch/arm/mach-imx/imxrt/soc.c
> b/arch/arm/mach-imx/imxrt/soc.c new file mode 100644
> index 0000000000..e1eea23035
> --- /dev/null
> +++ b/arch/arm/mach-imx/imxrt/soc.c
> @@ -0,0 +1,35 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2019
> + * Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com>
> + */
> +
> +#include <common.h>
> +#include <asm/io.h>
> +#include <asm/armv7_mpu.h>
> +
> +int arch_cpu_init(void)
> +{
> +	int i;
> +
> +	struct mpu_region_config imxrt1050_region_config[] = {
> +		{ 0x00000000, REGION_0, XN_DIS, PRIV_RW_USR_RW,
> +		  STRONG_ORDER, REGION_4GB },
> +		{ PHYS_SDRAM, REGION_1, XN_DIS, PRIV_RW_USR_RW,
> +		  O_I_WB_RD_WR_ALLOC, (ffs(PHYS_SDRAM_SIZE) - 2) },
> +		{ DMAMEM_BASE,
> +		  REGION_2, XN_DIS, PRIV_RW_USR_RW,
> +		  STRONG_ORDER, (ffs(DMAMEM_SZ_ALL) - 2) },
> +	};
> +
> +	/*
> +	 * Configure the memory protection unit (MPU) to allow full
> access to
> +	 * the whole 4GB address space.
> +	 */
> +	disable_mpu();
> +	for (i = 0; i < ARRAY_SIZE(imxrt1050_region_config); i++)
> +		mpu_config(&imxrt1050_region_config[i]);
> +	enable_mpu();
> +
> +	return 0;
> +}

Reviewed-by: Lukasz Majewski <lukma@denx.de>


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
diff mbox series

Patch

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 76365ef313..4c7d04400a 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -797,6 +797,14 @@  config ARCH_IMX8M
 	select SUPPORT_SPL
 	imply CMD_DM
 
+config ARCH_IMXRT
+	bool "NXP i.MXRT platform"
+	select CPU_V7M
+	select DM
+	select DM_SERIAL
+	select SUPPORT_SPL
+	imply CMD_DM
+
 config ARCH_MX23
 	bool "NXP i.MX23 family"
 	select CPU_ARM926EJS
@@ -1722,6 +1730,8 @@  source "arch/arm/mach-imx/imx8/Kconfig"
 
 source "arch/arm/mach-imx/imx8m/Kconfig"
 
+source "arch/arm/mach-imx/imxrt/Kconfig"
+
 source "arch/arm/mach-imx/mxs/Kconfig"
 
 source "arch/arm/mach-omap2/Kconfig"
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 856f2d8608..1e60a9fdd4 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -104,11 +104,11 @@  libs-y += arch/arm/cpu/
 libs-y += arch/arm/lib/
 
 ifeq ($(CONFIG_SPL_BUILD),y)
-ifneq (,$(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_MX35)$(filter $(SOC), mx25 mx5 mx6 mx7 mx35 imx8m imx8))
+ifneq (,$(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_MX35)$(filter $(SOC), mx25 mx5 mx6 mx7 mx35 imx8m imx8 imxrt))
 libs-y += arch/arm/mach-imx/
 endif
 else
-ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx7 mx7ulp mx31 mx35 mxs imx8m imx8 vf610))
+ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx7 mx7ulp mx31 mx35 mxs imx8m imx8 imxrt vf610))
 libs-y += arch/arm/mach-imx/
 endif
 endif
diff --git a/arch/arm/include/asm/arch-imxrt/clock.h b/arch/arm/include/asm/arch-imxrt/clock.h
new file mode 100644
index 0000000000..7409028b9a
--- /dev/null
+++ b/arch/arm/include/asm/arch-imxrt/clock.h
@@ -0,0 +1,10 @@ 
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2019
+ * Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com>
+ */
+
+#ifndef __ASM_ARCH_CLOCK_H
+#define __ASM_ARCH_CLOCK_H
+
+#endif /* __ASM_ARCH_CLOCK_H */
diff --git a/arch/arm/include/asm/arch-imxrt/gpio.h b/arch/arm/include/asm/arch-imxrt/gpio.h
new file mode 100644
index 0000000000..da31a7438a
--- /dev/null
+++ b/arch/arm/include/asm/arch-imxrt/gpio.h
@@ -0,0 +1,19 @@ 
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2019
+ * Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com>
+ */
+
+#ifndef __ASM_ARCH_GPIO_H__
+#define __ASM_ARCH_GPIO_H__
+
+#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
+/* GPIO registers */
+struct gpio_regs {
+	u32 gpio_dr;	/* data */
+	u32 gpio_dir;	/* direction */
+	u32 gpio_psr;	/* pad satus */
+};
+#endif
+
+#endif /* __ASM_ARCH_GPIO_H__ */
diff --git a/arch/arm/include/asm/arch-imxrt/imx-regs.h b/arch/arm/include/asm/arch-imxrt/imx-regs.h
new file mode 100644
index 0000000000..4f1d439f6f
--- /dev/null
+++ b/arch/arm/include/asm/arch-imxrt/imx-regs.h
@@ -0,0 +1,20 @@ 
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright(C) 2019
+ * Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com>
+ */
+
+#ifndef __ASM_ARCH_IMX_REGS_H__
+#define __ASM_ARCH_IMX_REGS_H__
+
+#define ARCH_MXC
+
+#define GPIO1_BASE_ADDR		0x401B8000
+#define GPIO2_BASE_ADDR		0x401BC000
+#define GPIO3_BASE_ADDR		0x401C0000
+#define GPIO4_BASE_ADDR		0x401C4000
+#define GPIO5_BASE_ADDR		0x400C0000
+
+#define ANATOP_BASE_ADDR	0x400d8000
+
+#endif /* __ASM_ARCH_IMX_REGS_H__ */
diff --git a/arch/arm/include/asm/arch-imxrt/imxrt.h b/arch/arm/include/asm/arch-imxrt/imxrt.h
new file mode 100644
index 0000000000..1cb2c57d31
--- /dev/null
+++ b/arch/arm/include/asm/arch-imxrt/imxrt.h
@@ -0,0 +1,11 @@ 
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2019
+ * Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com>
+ */
+
+#ifndef _ASM_ARCH_IMXRT_H
+#define _ASM_ARCH_IMXRT_H
+
+#endif /* _ASM_ARCH_IMXRT_H */
+
diff --git a/arch/arm/include/asm/arch-imxrt/sys_proto.h b/arch/arm/include/asm/arch-imxrt/sys_proto.h
new file mode 100644
index 0000000000..eb878e672e
--- /dev/null
+++ b/arch/arm/include/asm/arch-imxrt/sys_proto.h
@@ -0,0 +1,11 @@ 
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2017 NXP
+ */
+
+#ifndef _ASM_ARCH_SYS_PROTO_H
+#define _ASM_ARCH_SYS_PROTO_H
+
+#include <asm/mach-imx/sys_proto.h>
+
+#endif /* _ASM_ARCH_SYS_PROTO_H */
diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
index e14713c5c4..a70d51b5cf 100644
--- a/arch/arm/mach-imx/Makefile
+++ b/arch/arm/mach-imx/Makefile
@@ -27,7 +27,7 @@  endif
 obj-$(CONFIG_GPT_TIMER) += timer.o
 obj-$(CONFIG_SYS_I2C_MXC) += i2c-mxv7.o
 endif
-ifeq ($(SOC),$(filter $(SOC),mx7 mx6 mxs imx8m imx8))
+ifeq ($(SOC),$(filter $(SOC),mx7 mx6 mxs imx8m imx8 imxrt))
 obj-y	+= misc.o
 obj-$(CONFIG_SPL_BUILD)	+= spl.o
 endif
@@ -226,5 +226,6 @@  obj-$(CONFIG_MX7) += mx7/
 obj-$(CONFIG_ARCH_MX7ULP) += mx7ulp/
 obj-$(CONFIG_IMX8M) += imx8m/
 obj-$(CONFIG_ARCH_IMX8) += imx8/
+obj-$(CONFIG_ARCH_IMXRT) += imxrt/
 
 obj-$(CONFIG_SPL_BOOTROM_SUPPORT) += spl_imx_romapi.o
diff --git a/arch/arm/mach-imx/imxrt/Kconfig b/arch/arm/mach-imx/imxrt/Kconfig
new file mode 100644
index 0000000000..96ad2e988b
--- /dev/null
+++ b/arch/arm/mach-imx/imxrt/Kconfig
@@ -0,0 +1,13 @@ 
+if ARCH_IMXRT
+
+config IMXRT
+	bool
+
+config IMXRT1050
+	bool
+	select IMXRT
+
+config SYS_SOC
+	default "imxrt"
+
+endif
diff --git a/arch/arm/mach-imx/imxrt/Makefile b/arch/arm/mach-imx/imxrt/Makefile
new file mode 100644
index 0000000000..9621a8335a
--- /dev/null
+++ b/arch/arm/mach-imx/imxrt/Makefile
@@ -0,0 +1,7 @@ 
+# SPDX-License-Identifier: GPL-2.0+
+#
+# (C) Copyright 2019
+# Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com>
+#
+
+obj-y	:= soc.o
diff --git a/arch/arm/mach-imx/imxrt/soc.c b/arch/arm/mach-imx/imxrt/soc.c
new file mode 100644
index 0000000000..e1eea23035
--- /dev/null
+++ b/arch/arm/mach-imx/imxrt/soc.c
@@ -0,0 +1,35 @@ 
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2019
+ * Author(s): Giulio Benetti <giulio.benetti@benettiengineering.com>
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/armv7_mpu.h>
+
+int arch_cpu_init(void)
+{
+	int i;
+
+	struct mpu_region_config imxrt1050_region_config[] = {
+		{ 0x00000000, REGION_0, XN_DIS, PRIV_RW_USR_RW,
+		  STRONG_ORDER, REGION_4GB },
+		{ PHYS_SDRAM, REGION_1, XN_DIS, PRIV_RW_USR_RW,
+		  O_I_WB_RD_WR_ALLOC, (ffs(PHYS_SDRAM_SIZE) - 2) },
+		{ DMAMEM_BASE,
+		  REGION_2, XN_DIS, PRIV_RW_USR_RW,
+		  STRONG_ORDER, (ffs(DMAMEM_SZ_ALL) - 2) },
+	};
+
+	/*
+	 * Configure the memory protection unit (MPU) to allow full access to
+	 * the whole 4GB address space.
+	 */
+	disable_mpu();
+	for (i = 0; i < ARRAY_SIZE(imxrt1050_region_config); i++)
+		mpu_config(&imxrt1050_region_config[i]);
+	enable_mpu();
+
+	return 0;
+}