[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