[PATCH V7 06/10] ARM: imx: add msl support for imx7d

Shawn Guo shawn.guo at linaro.org
Thu May 7 07:14:44 PDT 2015


On Wed, Apr 29, 2015 at 10:20:06PM +0800, Frank.Li at freescale.com wrote:
> From: Anson Huang <b20788 at freescale.com>
> 
> Add i.MX7D MSL support.
> 
> Signed-off-by: Anson Huang <b20788 at freescale.com>
> Signed-off-by: Frank Li <Frank.Li at freescale.com>
> ---
>  arch/arm/mach-imx/Kconfig      | 11 ++++++++++
>  arch/arm/mach-imx/Makefile     |  1 +
>  arch/arm/mach-imx/anatop.c     |  5 ++++-
>  arch/arm/mach-imx/cpu.c        |  3 +++
>  arch/arm/mach-imx/hardware.h   |  7 ++++++-
>  arch/arm/mach-imx/mach-imx7d.c | 46 ++++++++++++++++++++++++++++++++++++++++++
>  arch/arm/mach-imx/mx7.h        | 38 ++++++++++++++++++++++++++++++++++
>  arch/arm/mach-imx/mxc.h        |  8 +++++++-
>  8 files changed, 116 insertions(+), 3 deletions(-)
>  create mode 100644 arch/arm/mach-imx/mach-imx7d.c
>  create mode 100644 arch/arm/mach-imx/mx7.h
> 
> diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
> index 3a3d3e9..162f2c3 100644
> --- a/arch/arm/mach-imx/Kconfig
> +++ b/arch/arm/mach-imx/Kconfig
> @@ -582,6 +582,17 @@ config SOC_IMX6SX
>  	help
>  	  This enables support for Freescale i.MX6 SoloX processor.
>  
> +config SOC_IMX7

I do not see the point of having this option at least for now.

> +	bool
> +	select ARM_GIC
> +
> +config SOC_IMX7D
> +	bool "i.MX7 Dual support"
> +	select SOC_IMX7
> +	select PINCTRL_IMX7D
> +	help
> +		This enables support for Freescale i.MX7 Dual processor.
> +
>  config SOC_VF610
>  	bool "Vybrid Family VF610 support"
>  	select IRQ_DOMAIN_HIERARCHY
> diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
> index 0622ced..40df12a 100644
> --- a/arch/arm/mach-imx/Makefile
> +++ b/arch/arm/mach-imx/Makefile
> @@ -85,6 +85,7 @@ endif
>  obj-$(CONFIG_SOC_IMX6Q) += mach-imx6q.o
>  obj-$(CONFIG_SOC_IMX6SL) += mach-imx6sl.o
>  obj-$(CONFIG_SOC_IMX6SX) += mach-imx6sx.o
> +obj-$(CONFIG_SOC_IMX7D) += mach-imx7d.o
>  
>  ifeq ($(CONFIG_SUSPEND),y)
>  AFLAGS_suspend-imx6.o :=-Wa,-march=armv7-a
> diff --git a/arch/arm/mach-imx/anatop.c b/arch/arm/mach-imx/anatop.c
> index 7f262fe..231bb25 100644
> --- a/arch/arm/mach-imx/anatop.c
> +++ b/arch/arm/mach-imx/anatop.c
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (C) 2013 Freescale Semiconductor, Inc.
> + * Copyright (C) 2013-2015 Freescale Semiconductor, Inc.
>   *
>   * The code contained herein is licensed under the GNU General Public
>   * License. You may obtain a copy of the GNU General Public License
> @@ -28,6 +28,7 @@
>  #define ANADIG_USB2_CHRG_DETECT	0x210
>  #define ANADIG_DIGPROG		0x260
>  #define ANADIG_DIGPROG_IMX6SL	0x280
> +#define ANADIG_DIGPROG_IMX7D	0x800
>  
>  #define BM_ANADIG_REG_2P5_ENABLE_WEAK_LINREG	0x40000
>  #define BM_ANADIG_REG_2P5_ENABLE_PULLDOWN	0x8
> @@ -121,6 +122,8 @@ void __init imx_init_revision_from_anatop(void)
>  	WARN_ON(!anatop_base);
>  	if (of_device_is_compatible(np, "fsl,imx6sl-anatop"))
>  		offset = ANADIG_DIGPROG_IMX6SL;
> +	if (of_device_is_compatible(np, "fsl,imx7d-anatop"))
> +		offset = ANADIG_DIGPROG_IMX7D;
>  	digprog = readl_relaxed(anatop_base + offset);
>  	iounmap(anatop_base);
>  
> diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c
> index df42c14..a7fa92a 100644
> --- a/arch/arm/mach-imx/cpu.c
> +++ b/arch/arm/mach-imx/cpu.c
> @@ -130,6 +130,9 @@ struct device * __init imx_soc_device_init(void)
>  	case MXC_CPU_IMX6Q:
>  		soc_id = "i.MX6Q";
>  		break;
> +	case MXC_CPU_IMX7D:
> +		soc_id = "i.MX7D";
> +		break;
>  	default:
>  		soc_id = "Unknown";
>  	}
> diff --git a/arch/arm/mach-imx/hardware.h b/arch/arm/mach-imx/hardware.h
> index d737f95..907ec2c 100644
> --- a/arch/arm/mach-imx/hardware.h
> +++ b/arch/arm/mach-imx/hardware.h
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright 2004-2007, 2014 Freescale Semiconductor, Inc. All Rights Reserved.
> + * Copyright 2004-2007, 2014-2015 Freescale Semiconductor, Inc.
>   * Copyright 2008 Juergen Beisert, kernel at pengutronix.de
>   *
>   * This program is free software; you can redistribute it and/or
> @@ -94,6 +94,10 @@
>   *	CCM	0x020c4000+0x004000	->	0xf42c4000+0x004000
>   *	ANATOP	0x020c8000+0x004000	->	0xf42c8000+0x004000
>   *	UART4	0x021f0000+0x004000	->	0xf42f0000+0x004000
> + * mx7d:
> + *	CCM	0x30380000+0x010000	->	0xf5380000+0x010000
> + *	ANATOP	0x30360000+0x010000	->	0xf5360000+0x010000
> + *	UART1	0x30860000+0x010000	->	0xf5860000+0x010000

How are these static mapping used?

>   */
>  #define IMX_IO_P2V(x)	(						\
>  			(((x) & 0x80000000) >> 7) |			\
> @@ -113,6 +117,7 @@
>  #include "mx21.h"
>  #include "mx27.h"
>  #include "mx1.h"
> +#include "mx7.h"
>  
>  #define imx_map_entry(soc, name, _type)	{				\
>  	.virtual = soc ## _IO_P2V(soc ## _ ## name ## _BASE_ADDR),	\
> diff --git a/arch/arm/mach-imx/mach-imx7d.c b/arch/arm/mach-imx/mach-imx7d.c
> new file mode 100644
> index 0000000..cca6ee6
> --- /dev/null
> +++ b/arch/arm/mach-imx/mach-imx7d.c
> @@ -0,0 +1,46 @@
> +/*
> + * Copyright (C) 2015 Freescale Semiconductor, Inc.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include <linux/irqchip.h>
> +#include <linux/of_platform.h>
> +#include <asm/mach/arch.h>
> +#include <asm/mach/map.h>
> +#include <linux/phy.h>

You do not need this header, right?

> +
> +#include "common.h"
> +
> +static void __init imx7d_init_machine(void)
> +{
> +	struct device *parent;
> +
> +	parent = imx_soc_device_init();
> +	if (parent == NULL)
> +		pr_warn("failed to initialize soc device\n");
> +
> +	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
> +	imx_anatop_init();
> +}
> +
> +static void __init imx7d_init_irq(void)
> +{
> +	imx_init_revision_from_anatop();
> +	imx_src_init();
> +	irqchip_init();
> +}
> +
> +static const char *imx7d_dt_compat[] __initconst = {
> +	"fsl,imx7d",
> +	NULL,
> +};
> +
> +DT_MACHINE_START(IMX7D, "Freescale i.MX7 Dual (Device Tree)")
> +	.init_irq	= imx7d_init_irq,
> +	.init_machine	= imx7d_init_machine,
> +	.dt_compat	= imx7d_dt_compat,
> +	.restart	= mxc_restart,

See commit 08ae9646468c (ARM: imx: clean up machine
mxc_arch_reset_init_dt reset init).

> +MACHINE_END
> diff --git a/arch/arm/mach-imx/mx7.h b/arch/arm/mach-imx/mx7.h
> new file mode 100644
> index 0000000..4aa673f
> --- /dev/null
> +++ b/arch/arm/mach-imx/mx7.h
> @@ -0,0 +1,38 @@
> +/*
> + * Copyright (C) 2015 Freescale Semiconductor, Inc. All Rights Reserved.
> + */
> +
> +/*
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#ifndef __ASM_ARCH_MX7_IOMAP_H__
> +#define __ASM_ARCH_MX7_IOMAP_H__
> +
> +#define MX7D_IO_P2V(x)                  IMX_IO_P2V(x)
> +#define MX7D_IO_ADDRESS(x)              IOMEM(MX7D_IO_P2V(x))
> +
> +#define MX7D_CCM_BASE_ADDR              0x30380000
> +#define MX7D_CCM_SIZE                   0x10000
> +#define MX7D_IOMUXC_BASE_ADDR           0x30330000
> +#define MX7D_IOMUXC_SIZE                0x10000
> +#define MX7D_ANATOP_BASE_ADDR           0x30360000
> +#define MX7D_ANATOP_SIZE                0x10000
> +#define MX7D_GPC_BASE_ADDR              0x303a0000
> +#define MX7D_GPC_SIZE                   0x10000
> +#define MX7D_SRC_BASE_ADDR              0x30390000
> +#define MX7D_SRC_SIZE                   0x10000
> +#define MX7D_DDRC_BASE_ADDR             0x307a0000
> +#define MX7D_DDRC_SIZE                  0x10000
> +#define MX7D_AIPS1_BASE_ADDR            0x30000000
> +#define MX7D_AIPS1_SIZE                 0x400000
> +#define MX7D_AIPS2_BASE_ADDR            0x30400000
> +#define MX7D_AIPS2_SIZE                 0x400000
> +#define MX7D_AIPS3_BASE_ADDR            0x30900000
> +#define MX7D_AIPS3_SIZE                 0x300000
> +
> +#define TT_ATTRIB_NON_CACHEABLE_1M	0x802
> +#define MX7_IRAM_TLB_SIZE		0x4000
> +#endif

Why not name it mx7d.h?  I'm actually wondering how these definitions
are used.  We do not have such header/definitions for imx6, and why do
we need them for imx7d?

Shawn

> diff --git a/arch/arm/mach-imx/mxc.h b/arch/arm/mach-imx/mxc.h
> index 8726051..c4436d4 100644
> --- a/arch/arm/mach-imx/mxc.h
> +++ b/arch/arm/mach-imx/mxc.h
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright 2004-2007, 2010 Freescale Semiconductor, Inc. All Rights Reserved.
> + * Copyright 2004-2007, 2010-2015 Freescale Semiconductor, Inc.
>   * Copyright (C) 2008 Juergen Beisert (kernel at pengutronix.de)
>   *
>   * This program is free software; you can redistribute it and/or
> @@ -38,6 +38,7 @@
>  #define MXC_CPU_IMX6DL		0x61
>  #define MXC_CPU_IMX6SX		0x62
>  #define MXC_CPU_IMX6Q		0x63
> +#define MXC_CPU_IMX7D		0x72
>  
>  #define IMX_DDR_TYPE_LPDDR2		1
>  
> @@ -169,6 +170,11 @@ static inline bool cpu_is_imx6q(void)
>  	return __mxc_cpu_type == MXC_CPU_IMX6Q;
>  }
>  
> +static inline bool cpu_is_imx7d(void)
> +{
> +	return __mxc_cpu_type == MXC_CPU_IMX7D;
> +}
> +
>  struct cpu_op {
>  	u32 cpu_rate;
>  };
> -- 
> 1.9.1
> 



More information about the linux-arm-kernel mailing list