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

Lukasz Majewski lukma at denx.de
Tue Jan 28 09:52:30 CET 2020


Hi Giulio,

> Add i.IMXRT family basic support.
> 
> Signed-off-by: Giulio Benetti <giulio.benetti at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 484 bytes
Desc: OpenPGP digital signature
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200128/99a58735/attachment.sig>


More information about the U-Boot mailing list