Skip to contentSkip to conversation

imx: Add i.MX6UL and basic board support

PATCH Superseded Peng Fan 3 participants 26 messages Jul 11, 2015 – Jul 12, 2015

Subsystems (3)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore

Peng Fan

author
#0 lore raw

v2 cover imx: Add i.MX6UL and basic board support

Add i.MX 6UltraLite support and include mx6ul_14x14_evk basic board support. i.MX 6UltraLite is a high performance, ultra-efficient processor family featuring an advanced implementation of a single Cortex-A7 core.

This patch set is based on i.MX6QP patch v5 set:
https://patchwork.ozlabs.org/patch/493961/
https://patchwork.ozlabs.org/patch/493962/
https://patchwork.ozlabs.org/patch/493963/
https://patchwork.ozlabs.org/patch/493964/
https://patchwork.ozlabs.org/patch/493965/
https://patchwork.ozlabs.org/patch/493966/

Changes v2:
1. refine commit msg
2. split CONFIG_SYS_CACHELINE_SIZE part into a single patch
3. discard system counter, default use GPT now.
4. SPL support

Peng Fan (15):
imx: mx6ul: Add i.MX6UL CPU type
imx: mx6ul: Add pins IOMUX head file
imx: mx6ul: Update imx registers head file
imx: mx6ul Add CONFIG_SYS_CACHELINE_SIZE for i.MX6UL
imx-common: timer: add i.MX6UL support
imx: mx6ul remove errata for i.MX6UL imx:mx6ul add clock support
imx: mx6ul select SYS_L2CACHE_OFF
imx: mx6ul update soc related settings
imx: mx6 add PAD_CTL_SPEED_LOW for i.MX6SX/UL
mxc: gpio add i.MX6UL support
mx6_common: Fix LOADADDR and SYS_TEXT_BASE for i.MX6UL imx:mx6ul add dram spl configuration and header file
imx: imx6_spl add mx6ul support
imx: mx6ul_14x14_evk add basic board support

 arch/arm/Kconfig                                  |    8 +
 arch/arm/cpu/armv7/mx6/Kconfig                    |    4 +
 arch/arm/cpu/armv7/mx6/clock.c                    |  151 +--
 arch/arm/cpu/armv7/mx6/ddr.c                      |   61 +-
 arch/arm/cpu/armv7/mx6/soc.c                      |    9 +-
 arch/arm/imx-common/cpu.c                         |    2 +
 arch/arm/imx-common/timer.c                       |    8 +-
 arch/arm/include/asm/arch-imx/cpu.h               |    3 +-
 arch/arm/include/asm/arch-mx6/crm_regs.h          |   79 +-
 arch/arm/include/asm/arch-mx6/imx-regs.h          |   63 +-
 arch/arm/include/asm/arch-mx6/mx6-ddr.h           |   45 +
 arch/arm/include/asm/arch-mx6/mx6-pins.h          |    2 +
 arch/arm/include/asm/arch-mx6/mx6ul-ddr.h         |   45 +
 arch/arm/include/asm/arch-mx6/mx6ul_pins.h        | 1065 +++++++++++++++++++++
 arch/arm/include/asm/imx-common/iomux-v3.h        |    4 +
 board/freescale/mx6ul_14x14_evk/Kconfig           |   15 +
 board/freescale/mx6ul_14x14_evk/MAINTAINERS       |    6 +
 board/freescale/mx6ul_14x14_evk/Makefile          |    6 +
 board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c |  636 ++++++++++++
 configs/mx6ul_14x14_evk_defconfig                 |    4 +
 drivers/gpio/mxc_gpio.c                           |    4 +
 include/configs/imx6_spl.h                        |    2 +-
 include/configs/mx6_common.h                      |    6 +-
 include/configs/mx6ul_14x14_evk.h                 |  227 +++++
 24 files changed, 2321 insertions(+), 134 deletions(-)
 create mode 100644 arch/arm/include/asm/arch-mx6/mx6ul-ddr.h
 create mode 100644 arch/arm/include/asm/arch-mx6/mx6ul_pins.h
 create mode 100644 board/freescale/mx6ul_14x14_evk/Kconfig
 create mode 100644 board/freescale/mx6ul_14x14_evk/MAINTAINERS
 create mode 100644 board/freescale/mx6ul_14x14_evk/Makefile
 create mode 100644 board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c
 create mode 100644 configs/mx6ul_14x14_evk_defconfig
 create mode 100644 include/configs/mx6ul_14x14_evk.h
Signature · 1 line
1.8.4
author
#1 lore raw

PATCH v2 1/15 imx: mx6ul: Add i.MX6UL CPU type

Add MXC_CPU_MX6UL for i.MX6UL CPU type which is got at runtime from DIGPROG register. But the value has been occupied by MXC_CPU_MX6D which is not real id from DIGPROG register, so change i.MX6D to value 0x67 which is not used now.

---

Changes v2:
Refine commit msg.

 arch/arm/imx-common/cpu.c           | 2 ++
 arch/arm/include/asm/arch-imx/cpu.h | 3 ++-
 2 files changed, 4 insertions(+), 1 deletion(-)
arch/arm/imx-common/cpu.c +2 -0
index 096d22e..e27546c 100644
@@ -138,6 +138,8 @@ const char *get_imx_type(u32 imxtype)
 		return "6SL";	/* Solo-Lite version of the mx6 */
 	case MXC_CPU_MX6SX:
 		return "6SX";   /* SoloX version of the mx6 */
+	case MXC_CPU_MX6UL:
+		return "6UL";   /* Ultra-Lite version of the mx6 */
 	case MXC_CPU_MX51:
 		return "51";
 	case MXC_CPU_MX53:
arch/arm/include/asm/arch-imx/cpu.h +2 -1
index 99e0e32..c7f9fff 100644
@@ -10,8 +10,9 @@
 #define MXC_CPU_MX6DL		0x61
 #define MXC_CPU_MX6SX		0x62
 #define MXC_CPU_MX6Q		0x63
-#define MXC_CPU_MX6D		0x64
+#define MXC_CPU_MX6UL		0x64
 #define MXC_CPU_MX6SOLO		0x65 /* dummy ID */
+#define MXC_CPU_MX6D		0x67
 #define MXC_CPU_MX6DP		0x68
 #define MXC_CPU_MX6QP		0x69
 
Signature · 1 line
1.8.4
author
#2 lore raw

PATCH v2 2/15 imx: mx6ul: Add pins IOMUX head file

In reply to Peng Fan

Add i.MX6UL pins IOMUX file which defines the IOMUX settings for choose.

---

Changes v2:
none

 arch/arm/include/asm/arch-mx6/mx6-pins.h   |    2 +
 arch/arm/include/asm/arch-mx6/mx6ul_pins.h | 1065 ++++++++++++++++++++++++++++
 2 files changed, 1067 insertions(+)
 create mode 100644 arch/arm/include/asm/arch-mx6/mx6ul_pins.h
arch/arm/include/asm/arch-mx6/mx6-pins.h +2 -0
index 534f780..4b6bb18 100644
@@ -37,6 +37,8 @@ enum {
 #include "mx6sl_pins.h"
 #elif defined(CONFIG_MX6SX)
 #include "mx6sx_pins.h"
+#elif defined(CONFIG_MX6UL)
+#include "mx6ul_pins.h"
 #else
 #error "Please select cpu"
 #endif	/* CONFIG_MX6Q */
arch/arm/include/asm/arch-mx6/mx6ul_pins.h new file +1065 -0

1,065 lines not on this page · raw message

Signature · 1 line
1.8.4
#3 lore raw

PATCH v2 2/15 imx: mx6ul: Add pins IOMUX head file

Quoted 47 lines · Peng Fan

Add i.MX6UL pins IOMUX file which defines the IOMUX settings for choose.

---

Changes v2:
none

 arch/arm/include/asm/arch-mx6/mx6-pins.h   |    2 +
 arch/arm/include/asm/arch-mx6/mx6ul_pins.h | 1065
++++++++++++++++++++++++++++ 2 files changed, 1067 insertions(+)
 create mode 100644 arch/arm/include/asm/arch-mx6/mx6ul_pins.h
(quoted diff) +0 -0

b/arch/arm/include/asm/arch-mx6/mx6-pins.h index 534f780..4b6bb18 100644

arch/arm/include/asm/arch-mx6/mx6-pins.h +2 -0
@@ -37,6 +37,8 @@ enum {
 #include "mx6sl_pins.h"
 #elif defined(CONFIG_MX6SX)
 #include "mx6sx_pins.h"
+#elif defined(CONFIG_MX6UL)
+#include "mx6ul_pins.h"
 #else
 #error "Please select cpu"
 #endif	/* CONFIG_MX6Q */
(quoted diff) +0 -0

b/arch/arm/include/asm/arch-mx6/mx6ul_pins.h new file mode 100644 index 0000000..c92b4f0

arch/arm/include/asm/arch-mx6/mx6ul_pins.h new file +14 -0
@@ -0,0 +1,1065 @@
+/*
+ * Copyright (C) 2015 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef __ASM_ARCH_IMX6UL_PINS_H__
+#define __ASM_ARCH_IMX6UL_PINS_H__
+
+#include <asm/imx-common/iomux-v3.h>
+
+enum {
+
+	MX6_PAD_BOOT_MODE0__GPIO5_IO10	                        =
Quoted 1 line

IOMUX_PAD(0x02A0, 0x0014, 5, 0x0000, 0, 0),

Hi,

why do you use enum here instead of just #defining those constants ?

#4 lore raw

PATCH v2 2/15 imx: mx6ul: Add pins IOMUX head file

Hi Marek,

Quoted 52 lines · Marek Vasut
Quoted 47 lines · Peng Fan

Add i.MX6UL pins IOMUX file which defines the IOMUX settings for choose.

---

Changes v2:
none

 arch/arm/include/asm/arch-mx6/mx6-pins.h   |    2 +
 arch/arm/include/asm/arch-mx6/mx6ul_pins.h | 1065
++++++++++++++++++++++++++++ 2 files changed, 1067 insertions(+)
 create mode 100644 arch/arm/include/asm/arch-mx6/mx6ul_pins.h
(quoted diff) +0 -0

b/arch/arm/include/asm/arch-mx6/mx6-pins.h index 534f780..4b6bb18 100644

arch/arm/include/asm/arch-mx6/mx6-pins.h +2 -0
@@ -37,6 +37,8 @@ enum {
 #include "mx6sl_pins.h"
 #elif defined(CONFIG_MX6SX)
 #include "mx6sx_pins.h"
+#elif defined(CONFIG_MX6UL)
+#include "mx6ul_pins.h"
 #else
 #error "Please select cpu"
 #endif	/* CONFIG_MX6Q */
(quoted diff) +0 -0

b/arch/arm/include/asm/arch-mx6/mx6ul_pins.h new file mode 100644 index 0000000..c92b4f0

arch/arm/include/asm/arch-mx6/mx6ul_pins.h new file +14 -0
@@ -0,0 +1,1065 @@
+/*
+ * Copyright (C) 2015 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef __ASM_ARCH_IMX6UL_PINS_H__
+#define __ASM_ARCH_IMX6UL_PINS_H__
+
+#include <asm/imx-common/iomux-v3.h>
+
+enum {
+
+	MX6_PAD_BOOT_MODE0__GPIO5_IO10	                        =
Quoted 1 line

IOMUX_PAD(0x02A0, 0x0014, 5, 0x0000, 0, 0),

Hi,

Quoted 1 line

why do you use enum here instead of just #defining those constants ?

Just keep same with other mx6[x]_pins.h.

Regards,
Peng

#5 lore raw

PATCH v2 2/15 imx: mx6ul: Add pins IOMUX head file

Quoted 61 lines · Peng Fan

Hi Marek,

Quoted 58 lines · Marek Vasut
Quoted 53 lines · Peng Fan

Add i.MX6UL pins IOMUX file which defines the IOMUX settings for choose.

---

Changes v2:
none

 arch/arm/include/asm/arch-mx6/mx6-pins.h   |    2 +
 arch/arm/include/asm/arch-mx6/mx6ul_pins.h | 1065

++++++++++++++++++++++++++++ 2 files changed, 1067 insertions(+)

 create mode 100644 arch/arm/include/asm/arch-mx6/mx6ul_pins.h
(quoted diff) +0 -0

b/arch/arm/include/asm/arch-mx6/mx6-pins.h index 534f780..4b6bb18 100644

arch/arm/include/asm/arch-mx6/mx6-pins.h +2 -0
@@ -37,6 +37,8 @@ enum {
 
 #include "mx6sl_pins.h"
 #elif defined(CONFIG_MX6SX)
 #include "mx6sx_pins.h"
 
+#elif defined(CONFIG_MX6UL)
+#include "mx6ul_pins.h"
 

#else
#error "Please select cpu"
#endif /* CONFIG_MX6Q */

(quoted diff) +0 -0

b/arch/arm/include/asm/arch-mx6/mx6ul_pins.h new file mode 100644 index 0000000..c92b4f0

arch/arm/include/asm/arch-mx6/mx6ul_pins.h new file +14 -0
@@ -0,0 +1,1065 @@
+/*
+ * Copyright (C) 2015 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef __ASM_ARCH_IMX6UL_PINS_H__
+#define __ASM_ARCH_IMX6UL_PINS_H__
+
+#include <asm/imx-common/iomux-v3.h>
+
+enum {
+
+	MX6_PAD_BOOT_MODE0__GPIO5_IO10	                        =
Quoted 1 line

IOMUX_PAD(0x02A0, 0x0014, 5, 0x0000, 0, 0),

Hi,

Quoted 3 lines
Quoted 1 line

why do you use enum here instead of just #defining those constants ?

Just keep same with other mx6[x]_pins.h.

arch/arm/include/asm/arch-mx6/mx6q_pins.h doesn't contain the enum to my knowledge :)

Best regards,
Marek Vasut

#6 lore raw

PATCH v2 2/15 imx: mx6ul: Add pins IOMUX head file

Hi Marek,

Quoted 62 lines · Marek Vasut
Quoted 61 lines · Peng Fan

Hi Marek,

Quoted 58 lines · Marek Vasut
Quoted 53 lines · Peng Fan

Add i.MX6UL pins IOMUX file which defines the IOMUX settings for choose.

---

Changes v2:
none

 arch/arm/include/asm/arch-mx6/mx6-pins.h   |    2 +
 arch/arm/include/asm/arch-mx6/mx6ul_pins.h | 1065

++++++++++++++++++++++++++++ 2 files changed, 1067 insertions(+)

 create mode 100644 arch/arm/include/asm/arch-mx6/mx6ul_pins.h
(quoted diff) +0 -0

b/arch/arm/include/asm/arch-mx6/mx6-pins.h index 534f780..4b6bb18 100644

arch/arm/include/asm/arch-mx6/mx6-pins.h +2 -0
@@ -37,6 +37,8 @@ enum {
 
 #include "mx6sl_pins.h"
 #elif defined(CONFIG_MX6SX)
 #include "mx6sx_pins.h"
 
+#elif defined(CONFIG_MX6UL)
+#include "mx6ul_pins.h"
 

#else
#error "Please select cpu"
#endif /* CONFIG_MX6Q */

(quoted diff) +0 -0

b/arch/arm/include/asm/arch-mx6/mx6ul_pins.h new file mode 100644 index 0000000..c92b4f0

arch/arm/include/asm/arch-mx6/mx6ul_pins.h new file +14 -0
@@ -0,0 +1,1065 @@
+/*
+ * Copyright (C) 2015 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef __ASM_ARCH_IMX6UL_PINS_H__
+#define __ASM_ARCH_IMX6UL_PINS_H__
+
+#include <asm/imx-common/iomux-v3.h>
+
+enum {
+
+	MX6_PAD_BOOT_MODE0__GPIO5_IO10	                        =
Quoted 1 line

IOMUX_PAD(0x02A0, 0x0014, 5, 0x0000, 0, 0),

Hi,

Quoted 6 lines
Quoted 3 lines
Quoted 1 line

why do you use enum here instead of just #defining those constants ?

Just keep same with other mx6[x]_pins.h.

arch/arm/include/asm/arch-mx6/mx6q_pins.h doesn't contain the enum to my knowledge :)

I am not sure whether it really make a difference or not if changed to define.

In arch/arm/include/asm/arch-mx6/mx6-pins.h
#ifdef CONFIG_MX6QDL
enum {
#define MX6_PAD_DECL(name, pco, mc, mm, sio, si, pc) \
MX6_PAD_DECLARE(MX6Q_PAD_,name, pco, mc, mm, sio, si, pc), #include "mx6q_pins.h"
#undef MX6_PAD_DECL
#define MX6_PAD_DECL(name, pco, mc, mm, sio, si, pc) \
MX6_PAD_DECLARE(MX6DL_PAD_,name, pco, mc, mm, sio, si, pc), #include "mx6dl_pins.h"
};
.....
#elif defined(CONFIG_MX6SL)
#include "mx6sl_pins.h"
#elif defined(CONFIG_MX6SX)
#include "mx6sx_pins.h"
.....

In mx6-pins.h, it is also enum. mx6ul-pins.h use same way with mx6sx/sl-pins.h.

Quoted 3 lines

Best regards,
Marek Vasut

Regards,
Peng

#7 lore raw

PATCH v2 2/15 imx: mx6ul: Add pins IOMUX head file

Quoted 1 line · Peng Fan

Hi Marek,

Hi!

Quoted 92 lines · Marek Vasut
Quoted 63 lines · Peng Fan
Quoted 62 lines

Hi Marek,

Quoted 59 lines · Marek Vasut
Quoted 54 lines · Peng Fan

Add i.MX6UL pins IOMUX file which defines the IOMUX settings for choose.

---

Changes v2:
none

 arch/arm/include/asm/arch-mx6/mx6-pins.h   |    2 +
 arch/arm/include/asm/arch-mx6/mx6ul_pins.h | 1065

++++++++++++++++++++++++++++ 2 files changed, 1067 insertions(+)

 create mode 100644 arch/arm/include/asm/arch-mx6/mx6ul_pins.h
(quoted diff) +0 -0

b/arch/arm/include/asm/arch-mx6/mx6-pins.h index 534f780..4b6bb18 100644 --- a/arch/arm/include/asm/arch-mx6/mx6-pins.h +++ b/arch/arm/include/asm/arch-mx6/mx6-pins.h

arch/arm/include/asm/arch-mx6/mx6-pins.h +2 -0
@@ -37,6 +37,8 @@ enum {
 
 #include "mx6sl_pins.h"
 #elif defined(CONFIG_MX6SX)
 #include "mx6sx_pins.h"
 
+#elif defined(CONFIG_MX6UL)
+#include "mx6ul_pins.h"
 

#else
#error "Please select cpu"
#endif /* CONFIG_MX6Q */

(quoted diff) +0 -0

b/arch/arm/include/asm/arch-mx6/mx6ul_pins.h new file mode 100644 index 0000000..c92b4f0

arch/arm/include/asm/arch-mx6/mx6ul_pins.h new file +14 -0
@@ -0,0 +1,1065 @@
+/*
+ * Copyright (C) 2015 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef __ASM_ARCH_IMX6UL_PINS_H__
+#define __ASM_ARCH_IMX6UL_PINS_H__
+
+#include <asm/imx-common/iomux-v3.h>
+
+enum {
+
+	MX6_PAD_BOOT_MODE0__GPIO5_IO10	                        =
Quoted 1 line

IOMUX_PAD(0x02A0, 0x0014, 5, 0x0000, 0, 0),

Hi,

Quoted 6 lines
Quoted 3 lines
Quoted 1 line

why do you use enum here instead of just #defining those constants ?

Just keep same with other mx6[x]_pins.h.

arch/arm/include/asm/arch-mx6/mx6q_pins.h doesn't contain the enum to my knowledge :)

I am not sure whether it really make a difference or not if changed to define.

In arch/arm/include/asm/arch-mx6/mx6-pins.h
#ifdef CONFIG_MX6QDL
enum {
#define MX6_PAD_DECL(name, pco, mc, mm, sio, si, pc) \
MX6_PAD_DECLARE(MX6Q_PAD_,name, pco, mc, mm, sio, si, pc), #include "mx6q_pins.h"
#undef MX6_PAD_DECL
#define MX6_PAD_DECL(name, pco, mc, mm, sio, si, pc) \
MX6_PAD_DECLARE(MX6DL_PAD_,name, pco, mc, mm, sio, si, pc), #include "mx6dl_pins.h"
};
.....
#elif defined(CONFIG_MX6SL)
#include "mx6sl_pins.h"
#elif defined(CONFIG_MX6SX)
#include "mx6sx_pins.h"
.....

Quoted 2 lines

In mx6-pins.h, it is also enum. mx6ul-pins.h use same way with mx6sx/sl-pins.h.

It'd make sense if the enum was used to specify a type, which could then be used in iomux functions to check the type OR to actually enumerate the members of the enum. Neither is the case here, so I am wondering why it's used :)

Maybe others can chime in.

author
#8 lore raw

PATCH v2 3/15 imx: mx6ul: Update imx registers head file

In reply to Peng Fan

1. Update imx register base address for i.MX6UL.
2. Remove duplicated MXS_APBH/GPMI/BCH_BASE.
3. Remove #ifdef for register addresses that equal to "AIPS2_OFF_BASE_ADDR + 0x34000" for different chips.
4. According fuse map, complete fuse_bank4_regs.
5. Move AIPS3_ARB_BASE_ADDR and AIPS3_ARB_END_ADDR out of #ifdef CONFIG_MX6SX, because we can use runtime check

---

Changes v2:
split CONFIG_SYS_CACHELINE_SIZE part into another patch

 arch/arm/include/asm/arch-mx6/imx-regs.h | 59 ++++++++++++++++++--------------
 1 file changed, 34 insertions(+), 25 deletions(-)
arch/arm/include/asm/arch-mx6/imx-regs.h +34 -25
index 35a324c..8f74f19 100644
@@ -19,7 +19,7 @@
 #define GPU_2D_ARB_END_ADDR             0x02203FFF
 #define OPENVG_ARB_BASE_ADDR            0x02204000
 #define OPENVG_ARB_END_ADDR             0x02207FFF
-#elif CONFIG_MX6SX
+#elif (defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL))
 #define CAAM_ARB_BASE_ADDR              0x00100000
 #define CAAM_ARB_END_ADDR               0x00107FFF
 #define GPU_ARB_BASE_ADDR               0x01800000
@@ -28,10 +28,6 @@
 #define APBH_DMA_ARB_END_ADDR           0x0180BFFF
 #define M4_BOOTROM_BASE_ADDR			0x007F8000
 
-#define MXS_APBH_BASE			APBH_DMA_ARB_BASE_ADDR
-#define MXS_GPMI_BASE			(APBH_DMA_ARB_BASE_ADDR + 0x02000)
-#define MXS_BCH_BASE			(APBH_DMA_ARB_BASE_ADDR + 0x04000)
-
 #else
 #define CAAM_ARB_BASE_ADDR              0x00100000
 #define CAAM_ARB_END_ADDR               0x00103FFF
@@ -52,13 +48,13 @@
 #define MXS_BCH_BASE			(APBH_DMA_ARB_BASE_ADDR + 0x04000)
 
 /* GPV - PL301 configuration ports */
-#if (defined(CONFIG_MX6SL) || defined(CONFIG_MX6SX))
+#if (defined(CONFIG_MX6SL) || defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL))
 #define GPV2_BASE_ADDR                  0x00D00000
 #else
 #define GPV2_BASE_ADDR			0x00200000
 #endif
 
-#ifdef CONFIG_MX6SX
+#if (defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL))
 #define GPV3_BASE_ADDR			0x00E00000
 #define GPV4_BASE_ADDR			0x00F00000
 #define GPV5_BASE_ADDR			0x01000000
@@ -87,15 +83,21 @@
 #define AIPS1_ARB_END_ADDR              0x020FFFFF
 #define AIPS2_ARB_BASE_ADDR             0x02100000
 #define AIPS2_ARB_END_ADDR              0x021FFFFF
-#ifdef CONFIG_MX6SX
+/* AIPS3 only on i.MX6SX */
 #define AIPS3_ARB_BASE_ADDR             0x02200000
 #define AIPS3_ARB_END_ADDR              0x022FFFFF
+#ifdef CONFIG_MX6SX
 #define WEIM_ARB_BASE_ADDR              0x50000000
 #define WEIM_ARB_END_ADDR               0x57FFFFFF
 #define QSPI0_AMBA_BASE                0x60000000
 #define QSPI0_AMBA_END                 0x6FFFFFFF
 #define QSPI1_AMBA_BASE                0x70000000
 #define QSPI1_AMBA_END                 0x7FFFFFFF
+#elif defined(CONFIG_MX6UL)
+#define WEIM_ARB_BASE_ADDR              0x50000000
+#define WEIM_ARB_END_ADDR               0x57FFFFFF
+#define QSPI0_AMBA_BASE                 0x60000000
+#define QSPI0_AMBA_END                  0x6FFFFFFF
 #else
 #define SATA_ARB_BASE_ADDR              0x02200000
 #define SATA_ARB_END_ADDR               0x02203FFF
@@ -111,7 +113,7 @@
 #define WEIM_ARB_END_ADDR               0x0FFFFFFF
 #endif
 
-#if (defined(CONFIG_MX6SL) || defined(CONFIG_MX6SX))
+#if (defined(CONFIG_MX6SL) || defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL))
 #define MMDC0_ARB_BASE_ADDR             0x80000000
 #define MMDC0_ARB_END_ADDR              0xFFFFFFFF
 #define MMDC1_ARB_BASE_ADDR             0xC0000000
@@ -238,13 +240,16 @@
 #define I2C3_BASE_ADDR              (AIPS2_OFF_BASE_ADDR + 0x28000)
 #define ROMCP_BASE_ADDR             (AIPS2_OFF_BASE_ADDR + 0x2C000)
 #define MMDC_P0_BASE_ADDR           (AIPS2_OFF_BASE_ADDR + 0x30000)
-#ifdef CONFIG_MX6SL
+/* i.MX6SL */
 #define RNGB_IPS_BASE_ADDR          (AIPS2_OFF_BASE_ADDR + 0x34000)
-#elif CONFIG_MX6SX
-#define ENET2_BASE_ADDR             (AIPS2_OFF_BASE_ADDR + 0x34000)
+#ifdef CONFIG_MX6UL
+#define ENET2_BASE_ADDR             (AIPS1_OFF_BASE_ADDR + 0x34000)
 #else
-#define MMDC_P1_BASE_ADDR           (AIPS2_OFF_BASE_ADDR + 0x34000)
+/* i.MX6SX */
+#define ENET2_BASE_ADDR             (AIPS2_OFF_BASE_ADDR + 0x34000)
 #endif
+/* i.MX6DQ/SDL */
+#define MMDC_P1_BASE_ADDR           (AIPS2_OFF_BASE_ADDR + 0x34000)
 
 #define WEIM_BASE_ADDR              (AIPS2_OFF_BASE_ADDR + 0x38000)
 #define OCOTP_BASE_ADDR             (AIPS2_OFF_BASE_ADDR + 0x3C000)
@@ -257,18 +262,16 @@
 #define IP2APB_PERFMON3_BASE_ADDR   (AIPS2_OFF_BASE_ADDR + 0x4C000)
 #endif
 #define IP2APB_TZASC1_BASE_ADDR     (AIPS2_OFF_BASE_ADDR + 0x50000)
-#ifdef CONFIG_MX6SX
+#ifdef CONFIG_MX6UL
+#define QSPI0_BASE_ADDR             (AIPS2_OFF_BASE_ADDR + 0x60000)
+#elif defined(CONFIG_MX6SX)
 #define SAI1_BASE_ADDR              (AIPS2_OFF_BASE_ADDR + 0x54000)
-#else
-#define IP2APB_TZASC2_BASE_ADDR     (AIPS2_OFF_BASE_ADDR + 0x54000)
-#endif
 #define AUDMUX_BASE_ADDR            (AIPS2_OFF_BASE_ADDR + 0x58000)
-#define AUDMUX_BASE_ADDR            (AIPS2_OFF_BASE_ADDR + 0x58000)
-#ifdef CONFIG_MX6SX
 #define SAI2_BASE_ADDR              (AIPS2_OFF_BASE_ADDR + 0x5C000)
 #define QSPI0_BASE_ADDR             (AIPS2_OFF_BASE_ADDR + 0x60000)
 #define QSPI1_BASE_ADDR             (AIPS2_OFF_BASE_ADDR + 0x64000)
 #else
+#define IP2APB_TZASC2_BASE_ADDR     (AIPS2_OFF_BASE_ADDR + 0x54000)
 #define MIPI_CSI2_BASE_ADDR         (AIPS2_OFF_BASE_ADDR + 0x5C000)
 #define MIPI_DSI_BASE_ADDR          (AIPS2_OFF_BASE_ADDR + 0x60000)
 #define VDOA_BASE_ADDR              (AIPS2_OFF_BASE_ADDR + 0x64000)
@@ -296,7 +299,6 @@
 #define AIPS3_CONFIG_BASE_ADDR      (AIPS3_ARB_BASE_ADDR + 0x7C000)
 #define ADC1_BASE_ADDR              (AIPS3_ARB_BASE_ADDR + 0x80000)
 #define ADC2_BASE_ADDR              (AIPS3_ARB_BASE_ADDR + 0x84000)
-#define WDOG3_BASE_ADDR             (AIPS3_ARB_BASE_ADDR + 0x88000)
 #define ECSPI5_BASE_ADDR            (AIPS3_ARB_BASE_ADDR + 0x8C000)
 #define HS_BASE_ADDR                (AIPS3_ARB_BASE_ADDR + 0x90000)
 #define MU_MCU_BASE_ADDR            (AIPS3_ARB_BASE_ADDR + 0x94000)
@@ -309,11 +311,16 @@
 #define PWM8_BASE_ADDR              (AIPS3_ARB_BASE_ADDR + 0xB0000)
 #endif
 
+/* only for i.MX6SX/UL */
+#define WDOG3_BASE_ADDR (is_cpu_type(MXC_CPU_MX6UL) ?		\
+			 (AIPS2_OFF_BASE_ADDR + 0x64000) :	\
+			 (AIPS3_ARB_BASE_ADDR + 0x88000))
+
 #define CHIP_REV_1_0                 0x10
 #define CHIP_REV_1_2                 0x12
 #define CHIP_REV_1_5                 0x15
 #define CHIP_REV_2_0                 0x20
-#ifndef CONFIG_MX6SX
+#if !(defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL))
 #define IRAM_SIZE                    0x00040000
 #else
 #define IRAM_SIZE                    0x00020000
@@ -451,7 +458,7 @@ struct src {
 
 
 struct iomuxc {
-#ifdef CONFIG_MX6SX
+#if (defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL))
 	u8 reserved[0x4000];
 #endif
 	u32 gpr[14];
@@ -577,7 +584,7 @@ struct cspi_regs {
 #define MXC_CSPICON_POL		4  /* SCLK polarity */
 #define MXC_CSPICON_SSPOL	12 /* SS polarity */
 #define MXC_CSPICON_CTL		20 /* inactive state of SCLK */
-#if defined(CONFIG_MX6SL) || defined(CONFIG_MX6DL)
+#if defined(CONFIG_MX6SL) || defined(CONFIG_MX6DL) || defined(CONFIG_MX6UL)
 #define MXC_SPI_BASE_ADDRESSES \
 	ECSPI1_BASE_ADDR, \
 	ECSPI2_BASE_ADDR, \
@@ -661,7 +668,7 @@ struct fuse_bank1_regs {
 	u32	rsvd7[3];
 };
 
-#ifdef CONFIG_MX6SX
+#if (defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL))
 struct fuse_bank4_regs {
 	u32 sjc_resp_low;
 	u32 rsvd0[3];
@@ -674,7 +681,9 @@ struct fuse_bank4_regs {
 	u32 mac_addr2;
 	u32 rsvd4[7];
 	u32 gp1;
-	u32 rsvd5[7];
+	u32 rsvd5[3];
+	u32 gp2;
+	u32 rsvd6[3];
 };
 #else
 struct fuse_bank4_regs {
Signature · 1 line
1.8.4
#9 lore raw

PATCH v2 3/15 imx: mx6ul: Update imx registers head file

Quoted 10 lines · Peng Fan

1. Update imx register base address for i.MX6UL.
2. Remove duplicated MXS_APBH/GPMI/BCH_BASE.
3. Remove #ifdef for register addresses that equal to "AIPS2_OFF_BASE_ADDR + 0x34000" for different chips.
4. According fuse map, complete fuse_bank4_regs.
5. Move AIPS3_ARB_BASE_ADDR and AIPS3_ARB_END_ADDR out of #ifdef CONFIG_MX6SX, because we can use runtime check

---

[...]

arch/arm/include/asm/arch-mx6/imx-regs.h line 318

Quoted 9 lines
arch/arm/include/asm/arch-mx6/imx-regs.h +5 -0
@@ -309,11 +311,16 @@
 #define PWM8_BASE_ADDR              (AIPS3_ARB_BASE_ADDR + 0xB0000)
 #endif
 
+/* only for i.MX6SX/UL */
+#define WDOG3_BASE_ADDR (is_cpu_type(MXC_CPU_MX6UL) ?		\
+			 (AIPS2_OFF_BASE_ADDR + 0x64000) :	\
+			 (AIPS3_ARB_BASE_ADDR + 0x88000))
+

This might not work if used in assembler.

Best regards,
Marek Vasut

#10 lore raw

PATCH v2 3/15 imx: mx6ul: Update imx registers head file

Hi Marek,

Quoted 18 lines · Marek Vasut
Quoted 10 lines · Peng Fan

1. Update imx register base address for i.MX6UL.
2. Remove duplicated MXS_APBH/GPMI/BCH_BASE.
3. Remove #ifdef for register addresses that equal to "AIPS2_OFF_BASE_ADDR + 0x34000" for different chips.
4. According fuse map, complete fuse_bank4_regs.
5. Move AIPS3_ARB_BASE_ADDR and AIPS3_ARB_END_ADDR out of #ifdef CONFIG_MX6SX, because we can use runtime check

---

[...]

Quoted 4 lines
arch/arm/include/asm/arch-mx6/imx-regs.h +0 -0
@@ -309,11 +311,16 @@
 #define PWM8_BASE_ADDR              (AIPS3_ARB_BASE_ADDR + 0xB0000)
 #endif
 
Quoted 7 lines

arch/arm/include/asm/arch-mx6/imx-regs.h line 318

Quoted 5 lines
arch/arm/include/asm/arch-mx6/imx-regs.h +5 -0
+/* only for i.MX6SX/UL */
+#define WDOG3_BASE_ADDR (is_cpu_type(MXC_CPU_MX6UL) ?		\
+			 (AIPS2_OFF_BASE_ADDR + 0x64000) :	\
+			 (AIPS3_ARB_BASE_ADDR + 0x88000))
+

This might not work if used in assembler.

I did not see any scenario that it will be used in assembler now. If we truely need it in assembler, then we can not avoid so many "ifdef"s.

Quoted 3 lines

Best regards,
Marek Vasut

Regards,
Peng.

#11 lore raw

PATCH v2 3/15 imx: mx6ul: Update imx registers head file

Quoted 32 lines · Peng Fan

Hi Marek,

Quoted 21 lines · Marek Vasut
Quoted 12 lines · Peng Fan

1. Update imx register base address for i.MX6UL.
2. Remove duplicated MXS_APBH/GPMI/BCH_BASE.
3. Remove #ifdef for register addresses that equal to

   "AIPS2_OFF_BASE_ADDR + 0x34000" for different chips.

4. According fuse map, complete fuse_bank4_regs.
5. Move AIPS3_ARB_BASE_ADDR and AIPS3_ARB_END_ADDR out of #ifdef CONFIG_MX6SX, because we can use runtime check

---

[...]

Quoted 5 lines
arch/arm/include/asm/arch-mx6/imx-regs.h +0 -0
@@ -309,11 +311,16 @@
 
 #define PWM8_BASE_ADDR              (AIPS3_ARB_BASE_ADDR + 0xB0000)
 #endif
 
Quoted 7 lines

arch/arm/include/asm/arch-mx6/imx-regs.h line 318

Quoted 5 lines
arch/arm/include/asm/arch-mx6/imx-regs.h +5 -0
+/* only for i.MX6SX/UL */
+#define WDOG3_BASE_ADDR (is_cpu_type(MXC_CPU_MX6UL) ?		\
+			 (AIPS2_OFF_BASE_ADDR + 0x64000) :	\
+			 (AIPS3_ARB_BASE_ADDR + 0x88000))
+

This might not work if used in assembler.

Quoted 1 line

I did not see any scenario that it will be used in assembler now.

Does that mean we will be fine with adding code which we know might easily break?

Quoted 1 line

If we truely need it in assembler, then we can not avoid so many "ifdef"s.

errr ... ifdef __ASSEMBLY__ would suffice here I guess, but to be really smart about it, I'd say you might want to define something like MX6UL_WDOG3_BASE, MX6S_WDOG3_BASE and then define WDOG3_BASE_ADDR as (is_cpu_type(...) ? MX6UL_WDOG3_BASE : MX6S.... ) . Then you could access the WDOG3 from assembler and from C code with the benefit that from C code, you'd be able to access it in a bit smoother way. I don't know if there's a way to do it easily in asm too, sorry.

Best regards,
Marek Vasut

#12 lore raw

PATCH v2 3/15 imx: mx6ul: Update imx registers head file

Hi Marek,

Quoted 33 lines · Marek Vasut
Quoted 32 lines · Peng Fan

Hi Marek,

Quoted 28 lines · Marek Vasut
Quoted 12 lines · Peng Fan

1. Update imx register base address for i.MX6UL.
2. Remove duplicated MXS_APBH/GPMI/BCH_BASE.
3. Remove #ifdef for register addresses that equal to

   "AIPS2_OFF_BASE_ADDR + 0x34000" for different chips.

4. According fuse map, complete fuse_bank4_regs.
5. Move AIPS3_ARB_BASE_ADDR and AIPS3_ARB_END_ADDR out of #ifdef CONFIG_MX6SX, because we can use runtime check

---

[...]

arch/arm/include/asm/arch-mx6/imx-regs.h line 319

Quoted 10 lines
arch/arm/include/asm/arch-mx6/imx-regs.h +5 -0
@@ -309,11 +311,16 @@
 
 #define PWM8_BASE_ADDR              (AIPS3_ARB_BASE_ADDR + 0xB0000)
 #endif
 
+/* only for i.MX6SX/UL */
+#define WDOG3_BASE_ADDR (is_cpu_type(MXC_CPU_MX6UL) ?		\
+			 (AIPS2_OFF_BASE_ADDR + 0x64000) :	\
+			 (AIPS3_ARB_BASE_ADDR + 0x88000))
+

This might not work if used in assembler.

Quoted 5 lines
Quoted 1 line

I did not see any scenario that it will be used in assembler now.

Does that mean we will be fine with adding code which we know might easily break?

My bad.

Quoted 9 lines
Quoted 1 line

If we truely need it in assembler, then we can not avoid so many "ifdef"s.

errr ... ifdef __ASSEMBLY__ would suffice here I guess, but to be really smart about it, I'd say you might want to define something like MX6UL_WDOG3_BASE, MX6S_WDOG3_BASE and then define WDOG3_BASE_ADDR as (is_cpu_type(...) ? MX6UL_WDOG3_BASE : MX6S.... ) . Then you could access the WDOG3 from assembler and from C code with the benefit that from C code, you'd be able to access it in a bit smoother way. I don't know if there's a way to do it easily in asm too, sorry.

Good suggestion. Later, will try to use this way in v3, after waiting for more comments in the whole patch set.

Quoted 3 lines

Best regards,
Marek Vasut

Thanks,
Peng

#13 lore raw

PATCH v2 3/15 imx: mx6ul: Update imx registers head file

Quoted 1 line · Peng Fan

Hi Marek,

Hi!

Quoted 52 lines · Marek Vasut
Quoted 33 lines · Peng Fan
Quoted 32 lines

Hi Marek,

Quoted 28 lines · Marek Vasut
Quoted 12 lines · Peng Fan

1. Update imx register base address for i.MX6UL.
2. Remove duplicated MXS_APBH/GPMI/BCH_BASE.
3. Remove #ifdef for register addresses that equal to

   "AIPS2_OFF_BASE_ADDR + 0x34000" for different chips.

4. According fuse map, complete fuse_bank4_regs.
5. Move AIPS3_ARB_BASE_ADDR and AIPS3_ARB_END_ADDR out of #ifdef CONFIG_MX6SX, because we can use runtime check

---

[...]

arch/arm/include/asm/arch-mx6/imx-regs.h line 319

Quoted 10 lines
arch/arm/include/asm/arch-mx6/imx-regs.h +5 -0
@@ -309,11 +311,16 @@
 
 #define PWM8_BASE_ADDR              (AIPS3_ARB_BASE_ADDR + 0xB0000)
 #endif
 
+/* only for i.MX6SX/UL */
+#define WDOG3_BASE_ADDR (is_cpu_type(MXC_CPU_MX6UL) ?		\
+			 (AIPS2_OFF_BASE_ADDR + 0x64000) :	\
+			 (AIPS3_ARB_BASE_ADDR + 0x88000))
+

This might not work if used in assembler.

Quoted 4 lines
Quoted 1 line

I did not see any scenario that it will be used in assembler now.

Does that mean we will be fine with adding code which we know might easily break?

My bad.

Quoted 10 lines
Quoted 2 lines

If we truely need it in assembler, then we can not avoid so many "ifdef"s.

errr ... ifdef __ASSEMBLY__ would suffice here I guess, but to be really smart about it, I'd say you might want to define something like MX6UL_WDOG3_BASE, MX6S_WDOG3_BASE and then define WDOG3_BASE_ADDR as (is_cpu_type(...) ? MX6UL_WDOG3_BASE : MX6S.... ) . Then you could access the WDOG3 from assembler and from C code with the benefit that from C code, you'd be able to access it in a bit smoother way. I don't know if there's a way to do it easily in asm too, sorry.

Quoted 2 lines

Good suggestion. Later, will try to use this way in v3, after waiting for more comments in the whole patch set.

Thanks !

Best regards,
Marek Vasut

author
#14 lore raw

PATCH v2 4/15 imx: mx6ul Add CONFIG_SYS_CACHELINE_SIZE for i.MX6UL

In reply to Peng Fan

Since i.MX6UL's cache line size is 64bytes, need to define the macro CONFIG_SYS_CACHELINE_SIZE to 64 for i.MX6UL.

---

Changes v2:
new patch, splitted from patch 03/15.

 arch/arm/include/asm/arch-mx6/imx-regs.h | 4 ++++
 1 file changed, 4 insertions(+)
arch/arm/include/asm/arch-mx6/imx-regs.h +4 -0
index 8f74f19..9f3b3cf 100644
@@ -9,7 +9,11 @@
 
 #define ARCH_MXC
 
+#ifdef CONFIG_MX6UL
+#define CONFIG_SYS_CACHELINE_SIZE	64
+#else
 #define CONFIG_SYS_CACHELINE_SIZE	32
+#endif
 
 #define ROMCP_ARB_BASE_ADDR             0x00000000
 #define ROMCP_ARB_END_ADDR              0x000FFFFF
Signature · 1 line
1.8.4
author
#15 lore raw

PATCH v2 5/15 imx-common: timer: add i.MX6UL support

In reply to Peng Fan

Add i.MX6UL GPT timer support.

---

Changes v2:
system counter patch is removed. Now, defaut use gpt.

 arch/arm/imx-common/timer.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
arch/arm/imx-common/timer.c +5 -3
index c12556a..7262107 100644
@@ -45,7 +45,8 @@ static inline int gpt_has_clk_source_osc(void)
 #if defined(CONFIG_MX6)
 	if (((is_cpu_type(MXC_CPU_MX6Q) || is_cpu_type(MXC_CPU_MX6D)) &&
 	    (soc_rev() > CHIP_REV_1_0)) || is_cpu_type(MXC_CPU_MX6DL) ||
-	     is_cpu_type(MXC_CPU_MX6SOLO) || is_cpu_type(MXC_CPU_MX6SX))
+	     is_cpu_type(MXC_CPU_MX6SOLO) || is_cpu_type(MXC_CPU_MX6SX) ||
+	     is_cpu_type(MXC_CPU_MX6UL))
 		return 1;
 
 	return 0;
@@ -103,10 +104,11 @@ int timer_init(void)
 	if (gpt_has_clk_source_osc()) {
 		i |= GPTCR_CLKSOURCE_OSC | GPTCR_TEN;
 
-		/* For DL/S, SX, set 24Mhz OSC Enable bit and prescaler */
+		/* For DL/S, SX, UL, set 24Mhz OSC Enable bit and prescaler */
 		if (is_cpu_type(MXC_CPU_MX6DL) ||
 		    is_cpu_type(MXC_CPU_MX6SOLO) ||
-		    is_cpu_type(MXC_CPU_MX6SX)) {
+		    is_cpu_type(MXC_CPU_MX6SX) ||
+		    is_cpu_type(MXC_CPU_MX6UL)) {
 			i |= GPTCR_24MEN;
 
 			/* Produce 3Mhz clock */
Signature · 1 line
1.8.4
author
#16 lore raw

PATCH v2 6/15 imx: mx6ul remove errata for i.MX6UL

In reply to Peng Fan

Since i.MX6UL use A7 core, but not A9 core, we do not need the erratas for i.MX6UL.

---

Changes v2:
remove the system counter define, since default use GPT now.

 include/configs/mx6_common.h | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
include/configs/mx6_common.h +3 -1
index 54ab890..ce43bd7 100644
@@ -17,11 +17,11 @@
 #ifndef __MX6_COMMON_H
 #define __MX6_COMMON_H
 
+#ifndef CONFIG_MX6UL
 #define CONFIG_ARM_ERRATA_743622
 #define CONFIG_ARM_ERRATA_751472
 #define CONFIG_ARM_ERRATA_794072
 #define CONFIG_ARM_ERRATA_761320
-#define CONFIG_BOARD_POSTCLK_INIT
 
 #ifndef CONFIG_SYS_L2CACHE_OFF
 #define CONFIG_SYS_L2_PL310
@@ -29,6 +29,8 @@
 #endif
 
 #define CONFIG_MP
+#endif
+#define CONFIG_BOARD_POSTCLK_INIT
 #define CONFIG_MXC_GPT_HCLK
 
 #define CONFIG_SYS_NO_FLASH
Signature · 1 line
1.8.4
author
#17 lore raw

PATCH v2 7/15 imx:mx6ul add clock support

In reply to Peng Fan

1. Add enet, uart, i2c, ipg clock support for i.MX6UL.
2. Correct get_periph_clk, it should account for MXC_CCM_CBCDR_PERIPH_CLK2_PODF_MASK.
3. Refactor get_mmdc_ch0_clk to make all i.MX6 share one function, but not use 'ifdef'.
4. Use CONFIG_FSL_QSPI for enable_qspi_clk, but not #ifdef CONFIG_MX6SX.
5. Use CONFIG_PCIE_IMX for pcie clock settings, use CONFIG_CMD_SATA for sata clock settings. In this way, we not need "#if defined(CONFIG_MX6Q) || defined....", only need one CONFIG_PCIE_IMX in header file.

---

Changes v2:
none

 arch/arm/cpu/armv7/mx6/clock.c           | 151 +++++++++++++++++++------------
 arch/arm/include/asm/arch-mx6/crm_regs.h |  79 ++++++++++------
 2 files changed, 143 insertions(+), 87 deletions(-)
arch/arm/cpu/armv7/mx6/clock.c +92 -59
index 3e94472..9cf4eec 100644
@@ -81,19 +81,32 @@ void enable_usboh3_clk(unsigned char enable)
 #if defined(CONFIG_FEC_MXC) && !defined(CONFIG_MX6SX)
 void enable_enet_clk(unsigned char enable)
 {
-	u32 mask = MXC_CCM_CCGR1_ENET_CLK_ENABLE_MASK;
+	u32 mask, *addr;
+
+	if (is_cpu_type(MXC_CPU_MX6UL)) {
+		mask = MXC_CCM_CCGR3_ENET_MASK;
+		addr = &imx_ccm->CCGR3;
+	} else {
+		mask = MXC_CCM_CCGR1_ENET_MASK;
+		addr = &imx_ccm->CCGR1;
+	}
 
 	if (enable)
-		setbits_le32(&imx_ccm->CCGR1, mask);
+		setbits_le32(addr, mask);
 	else
-		clrbits_le32(&imx_ccm->CCGR1, mask);
+		clrbits_le32(addr, mask);
 }
 #endif
 
 #ifdef CONFIG_MXC_UART
 void enable_uart_clk(unsigned char enable)
 {
-	u32 mask = MXC_CCM_CCGR5_UART_MASK | MXC_CCM_CCGR5_UART_SERIAL_MASK;
+	u32 mask;
+
+	if (is_cpu_type(MXC_CPU_MX6UL))
+		mask = MXC_CCM_CCGR5_UART_MASK;
+	else
+		mask = MXC_CCM_CCGR5_UART_MASK | MXC_CCM_CCGR5_UART_SERIAL_MASK;
 
 	if (enable)
 		setbits_le32(&imx_ccm->CCGR5, mask);
@@ -141,7 +154,7 @@ int enable_i2c_clk(unsigned char enable, unsigned i2c_num)
 			reg &= ~mask;
 		__raw_writel(reg, &imx_ccm->CCGR2);
 	} else {
-		if (is_cpu_type(MXC_CPU_MX6SX)) {
+		if (is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL)) {
 			mask = MXC_CCM_CCGR6_I2C4_MASK;
 			addr = &imx_ccm->CCGR6;
 		} else {
@@ -214,9 +227,11 @@ static u32 mxc_get_pll_pfd(enum pll_clocks pll, int pfd_num)
 
 	switch (pll) {
 	case PLL_BUS:
-		if (pfd_num == 3) {
-			/* No PFD3 on PPL2 */
-			return 0;
+		if (!is_cpu_type(MXC_CPU_MX6UL)) {
+			if (pfd_num == 3) {
+				/* No PFD3 on PPL2 */
+				return 0;
+			}
 		}
 		div = __raw_readl(&imx_ccm->analog_pfd_528);
 		freq = (u64)decode_pll(PLL_BUS, MXC_HCLK);
@@ -248,10 +263,12 @@ static u32 get_mcu_main_clk(void)
 
 u32 get_periph_clk(void)
 {
-	u32 reg, freq = 0;
+	u32 reg, div = 0, freq = 0;
 
 	reg = __raw_readl(&imx_ccm->cbcdr);
 	if (reg & MXC_CCM_CBCDR_PERIPH_CLK_SEL) {
+		div = (reg & MXC_CCM_CBCDR_PERIPH_CLK2_PODF_MASK) >>
+		       MXC_CCM_CBCDR_PERIPH_CLK2_PODF_OFFSET;
 		reg = __raw_readl(&imx_ccm->cbcmr);
 		reg &= MXC_CCM_CBCMR_PERIPH_CLK2_SEL_MASK;
 		reg >>= MXC_CCM_CBCMR_PERIPH_CLK2_SEL_OFFSET;
@@ -291,7 +308,7 @@ u32 get_periph_clk(void)
 		}
 	}
 
-	return freq;
+	return freq / (div + 1);
 }
 
 static u32 get_ipg_clk(void)
@@ -311,7 +328,7 @@ static u32 get_ipg_per_clk(void)
 
 	reg = __raw_readl(&imx_ccm->cscmr1);
 	if (is_cpu_type(MXC_CPU_MX6SL) || is_cpu_type(MXC_CPU_MX6SX) ||
-	    is_mx6dqp()) {
+	    is_mx6dqp() || is_cpu_type(MXC_CPU_MX6UL)) {
 		if (reg & MXC_CCM_CSCMR1_PER_CLK_SEL_MASK)
 			return MXC_HCLK; /* OSC 24Mhz */
 	}
@@ -328,7 +345,7 @@ static u32 get_uart_clk(void)
 	reg = __raw_readl(&imx_ccm->cscdr1);
 
 	if (is_cpu_type(MXC_CPU_MX6SL) || is_cpu_type(MXC_CPU_MX6SX) ||
-	    is_mx6dqp()) {
+	    is_mx6dqp() || is_cpu_type(MXC_CPU_MX6UL)) {
 		if (reg & MXC_CCM_CSCDR1_UART_CLK_SEL)
 			freq = MXC_HCLK;
 	}
@@ -347,7 +364,8 @@ static u32 get_cspi_clk(void)
 	cspi_podf = (reg & MXC_CCM_CSCDR2_ECSPI_CLK_PODF_MASK) >>
 		     MXC_CCM_CSCDR2_ECSPI_CLK_PODF_OFFSET;
 
-	if (is_mx6dqp()) {
+	if (is_mx6dqp() || is_cpu_type(MXC_CPU_MX6SL) ||
+	    is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL)) {
 		if (reg & MXC_CCM_CSCDR2_ECSPI_CLK_SEL_MASK)
 			return MXC_HCLK / (cspi_podf + 1);
 	}
@@ -402,47 +420,60 @@ static u32 get_emi_slow_clk(void)
 	return root_freq / (emi_slow_podf + 1);
 }
 
-#if (defined(CONFIG_MX6SL) || defined(CONFIG_MX6SX))
 static u32 get_mmdc_ch0_clk(void)
 {
 	u32 cbcmr = __raw_readl(&imx_ccm->cbcmr);
 	u32 cbcdr = __raw_readl(&imx_ccm->cbcdr);
-	u32 freq, podf;
 
-	podf = (cbcdr & MXC_CCM_CBCDR_MMDC_CH1_PODF_MASK) \
-			>> MXC_CCM_CBCDR_MMDC_CH1_PODF_OFFSET;
-
-	switch ((cbcmr & MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_MASK) >>
-		MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_OFFSET) {
-	case 0:
-		freq = decode_pll(PLL_BUS, MXC_HCLK);
-		break;
-	case 1:
-		freq = mxc_get_pll_pfd(PLL_BUS, 2);
-		break;
-	case 2:
-		freq = mxc_get_pll_pfd(PLL_BUS, 0);
-		break;
-	case 3:
-		/* static / 2 divider */
-		freq =  mxc_get_pll_pfd(PLL_BUS, 2) / 2;
+	u32 freq, podf, per2_clk2_podf;
+
+	if (is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL) ||
+	    is_cpu_type(MXC_CPU_MX6SL)) {
+		podf = (cbcdr & MXC_CCM_CBCDR_MMDC_CH1_PODF_MASK) >>
+			MXC_CCM_CBCDR_MMDC_CH1_PODF_OFFSET;
+		if (cbcdr & MXC_CCM_CBCDR_PERIPH2_CLK_SEL) {
+			per2_clk2_podf = (cbcdr & MXC_CCM_CBCDR_PERIPH2_CLK2_PODF_MASK) >>
+				MXC_CCM_CBCDR_PERIPH2_CLK2_PODF_OFFSET;
+			if (is_cpu_type(MXC_CPU_MX6SL)) {
+				if (cbcmr & MXC_CCM_CBCMR_PERIPH2_CLK2_SEL)
+					freq = MXC_HCLK;
+				else
+					freq = decode_pll(PLL_USBOTG, MXC_HCLK);
+			} else {
+				if (cbcmr & MXC_CCM_CBCMR_PERIPH2_CLK2_SEL)
+					freq = decode_pll(PLL_BUS, MXC_HCLK);
+				else
+					freq = decode_pll(PLL_USBOTG, MXC_HCLK);
+			}
+		} else {
+			per2_clk2_podf = 0;
+			switch ((cbcmr &
+				MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_MASK) >>
+				MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_OFFSET) {
+			case 0:
+				freq = decode_pll(PLL_BUS, MXC_HCLK);
+				break;
+			case 1:
+				freq = mxc_get_pll_pfd(PLL_BUS, 2);
+				break;
+			case 2:
+				freq = mxc_get_pll_pfd(PLL_BUS, 0);
+				break;
+			case 3:
+				/* static / 2 divider */
+				freq =  mxc_get_pll_pfd(PLL_BUS, 2) / 2;
+				break;
+			}
+		}
+		return freq / (podf + 1) / (per2_clk2_podf + 1);
+	} else {
+		podf = (cbcdr & MXC_CCM_CBCDR_MMDC_CH0_PODF_MASK) >>
+			MXC_CCM_CBCDR_MMDC_CH0_PODF_OFFSET;
+		return get_periph_clk() / (podf + 1);
 	}
-
-	return freq / (podf + 1);
-
 }
-#else
-static u32 get_mmdc_ch0_clk(void)
-{
-	u32 cbcdr = __raw_readl(&imx_ccm->cbcdr);
-	u32 mmdc_ch0_podf = (cbcdr & MXC_CCM_CBCDR_MMDC_CH0_PODF_MASK) >>
-				MXC_CCM_CBCDR_MMDC_CH0_PODF_OFFSET;
 
-	return get_periph_clk() / (mmdc_ch0_podf + 1);
-}
-#endif
-
-#ifdef CONFIG_MX6SX
+#ifdef CONFIG_FSL_QSPI
 /* qspi_num can be from 0 - 1 */
 void enable_qspi_clk(int qspi_num)
 {
@@ -603,6 +634,7 @@ u32 imx_get_fecclk(void)
 	return mxc_get_clock(MXC_IPG_CLK);
 }
 
+#if defined(CONFIG_CMD_SATA) || defined(CONFIG_PCIE_IMX)
 static int enable_enet_pll(uint32_t en)
 {
 	struct mxc_ccm_reg *const imx_ccm
@@ -627,8 +659,9 @@ static int enable_enet_pll(uint32_t en)
 	writel(reg, &imx_ccm->analog_pll_enet);
 	return 0;
 }
+#endif
 
-#ifndef CONFIG_MX6SX
+#ifdef CONFIG_CMD_SATA
 static void ungate_sata_clock(void)
 {
 	struct mxc_ccm_reg *const imx_ccm =
@@ -637,18 +670,7 @@ static void ungate_sata_clock(void)
 	/* Enable SATA clock. */
 	setbits_le32(&imx_ccm->CCGR5, MXC_CCM_CCGR5_SATA_MASK);
 }
-#endif
-
-static void ungate_pcie_clock(void)
-{
-	struct mxc_ccm_reg *const imx_ccm =
-		(struct mxc_ccm_reg *)CCM_BASE_ADDR;
 
-	/* Enable PCIe clock. */
-	setbits_le32(&imx_ccm->CCGR4, MXC_CCM_CCGR4_PCIE_MASK);
-}
-
-#ifndef CONFIG_MX6SX
 int enable_sata_clock(void)
 {
 	ungate_sata_clock();
@@ -664,6 +686,16 @@ void disable_sata_clock(void)
 }
 #endif
 
+#ifdef CONFIG_PCIE_IMX
+static void ungate_pcie_clock(void)
+{
+	struct mxc_ccm_reg *const imx_ccm =
+		(struct mxc_ccm_reg *)CCM_BASE_ADDR;
+
+	/* Enable PCIe clock. */
+	setbits_le32(&imx_ccm->CCGR4, MXC_CCM_CCGR4_PCIE_MASK);
+}
+
 int enable_pcie_clock(void)
 {
 	struct anatop_regs *anatop_regs =
@@ -703,7 +735,7 @@ int enable_pcie_clock(void)
 	clrbits_le32(&ccm_regs->cbcmr, MXC_CCM_CBCMR_PCIE_AXI_CLK_SEL);
 
 	/* Party time! Ungate the clock to the PCIe. */
-#ifndef CONFIG_MX6SX
+#ifdef CONFIG_CMD_SATA
 	ungate_sata_clock();
 #endif
 	ungate_pcie_clock();
@@ -711,6 +743,7 @@ int enable_pcie_clock(void)
 	return enable_enet_pll(BM_ANADIG_PLL_ENET_ENABLE_SATA |
 			       BM_ANADIG_PLL_ENET_ENABLE_PCIE);
 }
+#endif
 
 #ifdef CONFIG_SECURE_BOOT
 void hab_caam_clock_enable(unsigned char enable)
arch/arm/include/asm/arch-mx6/crm_regs.h +51 -28

210 lines not on this page · raw message

Signature · 1 line
1.8.4
author
#18 lore raw

PATCH v2 8/15 imx: mx6ul select SYS_L2CACHE_OFF

In reply to Peng Fan

i.MX6UL features an Cortex-A7 core, it does not have PL310 as other i.MX6 chips. To Cortex-A7 core, If D-Cache is enabled, L2 Cache is enabled. There is on specific switch for on/off L2 Cache, so default select SYS_L2CACHE_OFF.

---

Changes v2:
refine commit msg.

 arch/arm/cpu/armv7/mx6/Kconfig | 4 ++++
 1 file changed, 4 insertions(+)
arch/arm/cpu/armv7/mx6/Kconfig +4 -0
index 10908c4..fceba27 100644
@@ -25,6 +25,10 @@ config MX6SL
 config MX6SX
 	bool
 
+config MX6UL
+	select SYS_L2CACHE_OFF
+	bool
+
 choice
 	prompt "MX6 board select"
 	optional
Signature · 1 line
1.8.4
author
#19 lore raw

PATCH v2 9/15 imx: mx6ul update soc related settings

In reply to Peng Fan

1.Update WDOG settings.
2.No need to gate/ungate all PFDs for i.MX6UL.

---

Changes v2:
runtime check for wdog part.

 arch/arm/cpu/armv7/mx6/soc.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
arch/arm/cpu/armv7/mx6/soc.c +4 -5
index e80c09c..033f9de 100644
@@ -316,11 +316,10 @@ static void imx_set_wdog_powerdown(bool enable)
 {
 	struct wdog_regs *wdog1 = (struct wdog_regs *)WDOG1_BASE_ADDR;
 	struct wdog_regs *wdog2 = (struct wdog_regs *)WDOG2_BASE_ADDR;
-
-#ifdef CONFIG_MX6SX
 	struct wdog_regs *wdog3 = (struct wdog_regs *)WDOG3_BASE_ADDR;
-	writew(enable, &wdog3->wmcr);
-#endif
+
+	if (is_cpu_type(MXC_CPU_MX6UL) || is_cpu_type(MXC_CPU_MX6UL))
+		writew(enable, &wdog3->wmcr);
 
 	/* Write to the PDE (Power Down Enable) bit */
 	writew(enable, &wdog1->wmcr);
@@ -530,7 +529,7 @@ void s_init(void)
 	u32 mask528;
 	u32 reg, periph1, periph2;
 
-	if (is_cpu_type(MXC_CPU_MX6SX))
+	if (is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL))
 		return;
 
 	/* Due to hardware limitation, on MX6Q we need to gate/ungate all PFDs
Signature · 1 line
1.8.4
author
#20 lore raw

PATCH v2 10/15 imx: mx6 add PAD_CTL_SPEED_LOW for i.MX6SX/UL

In reply to Peng Fan

PAD_CTL_SPEED_LOW for i.MX6SX/UL is (0 << 6)

---

Changes v2:
none

 arch/arm/include/asm/imx-common/iomux-v3.h | 4 ++++
 1 file changed, 4 insertions(+)
arch/arm/include/asm/imx-common/iomux-v3.h +4 -0
index 5cde90f..42098a3 100644
@@ -98,7 +98,11 @@ typedef u64 iomux_v3_cfg_t;
 
 #define PAD_CTL_ODE		(1 << 11)
 
+#if defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL)
+#define PAD_CTL_SPEED_LOW	(0 << 6)
+#else
 #define PAD_CTL_SPEED_LOW	(1 << 6)
+#endif
 #define PAD_CTL_SPEED_MED	(2 << 6)
 #define PAD_CTL_SPEED_HIGH	(3 << 6)
 
Signature · 1 line
1.8.4
author
#21 lore raw

PATCH v2 11/15 mxc: gpio add i.MX6UL support

In reply to Peng Fan

i.MX6UL does not have GPIO6/7, so do not include them for i.MX6UL.

---

Changes v2:
none

 drivers/gpio/mxc_gpio.c | 4 ++++
 1 file changed, 4 insertions(+)
drivers/gpio/mxc_gpio.c +4 -0
index 2012f99..57a650f 100644
@@ -45,11 +45,15 @@ static unsigned long gpio_ports[] = {
 #endif
 #if defined(CONFIG_MX27) || defined(CONFIG_MX53) || defined(CONFIG_MX6)
 	[4] = GPIO5_BASE_ADDR,
+#ifndef CONFIG_MX6UL
 	[5] = GPIO6_BASE_ADDR,
 #endif
+#endif
 #if defined(CONFIG_MX53) || defined(CONFIG_MX6)
+#ifndef CONFIG_MX6UL
 	[6] = GPIO7_BASE_ADDR,
 #endif
+#endif
 };
 
 static int mxc_gpio_direction(unsigned int gpio,
Signature · 1 line
1.8.4
author
#22 lore raw

PATCH v2 12/15 mx6_common: Fix LOADADDR and SYS_TEXT_BASE for i.MX6UL

In reply to Peng Fan

DRAM space starts from 0x80000000 for i.MX6UL, so need to fix LOADADDR, SYS_TEXT_BASE.

---

Changes v2:
refine commit msg.

 include/configs/mx6_common.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
include/configs/mx6_common.h +1 -1
index ce43bd7..ef4cb68 100644
@@ -54,7 +54,7 @@
 #define CONFIG_REVISION_TAG
 
 /* Boot options */
-#if (defined(CONFIG_MX6SX) || defined(CONFIG_MX6SL))
+#if (defined(CONFIG_MX6SX) || defined(CONFIG_MX6SL) || defined(CONFIG_MX6UL))
 #define CONFIG_LOADADDR		0x82000000
 #ifndef CONFIG_SYS_TEXT_BASE
 #define CONFIG_SYS_TEXT_BASE	0x87800000
Signature · 1 line
1.8.4
author
#23 lore raw

PATCH v2 13/15 imx:mx6ul add dram spl configuration and header file

In reply to Peng Fan

1. Define two structures mx6ul_iomux_ddr_regs and mx6ul_iomux_grp_regs.
2. Add a new function mx6ul_dram_iocfg to configure dram io.
3. Refactor MMDC1 macro, discard "#ifdef CONFIG_MX6SX". Since only mmdc0 channel exists on i.MX6SX/UL, redefine MMDC1 macro support runtime check, but not hardcoding #ifdef macros.
4. Introduce mx6ul-ddr.h, which includes the register address for DRAM IO configuration.

---

Changes v2:
new patch

 arch/arm/cpu/armv7/mx6/ddr.c              | 61 ++++++++++++++++++++++++++-----
 arch/arm/include/asm/arch-mx6/mx6-ddr.h   | 45 +++++++++++++++++++++++
 arch/arm/include/asm/arch-mx6/mx6ul-ddr.h | 45 +++++++++++++++++++++++
 3 files changed, 141 insertions(+), 10 deletions(-)
 create mode 100644 arch/arm/include/asm/arch-mx6/mx6ul-ddr.h
arch/arm/cpu/armv7/mx6/ddr.c +51 -10
index 86c8354..5abbcb8 100644
@@ -71,6 +71,50 @@ void mx6sx_dram_iocfg(unsigned width,
 }
 #endif
 
+#ifdef CONFIG_MX6UL
+void mx6ul_dram_iocfg(unsigned width,
+		      const struct mx6ul_iomux_ddr_regs *ddr,
+		      const struct mx6ul_iomux_grp_regs *grp)
+{
+	struct mx6ul_iomux_ddr_regs *mx6_ddr_iomux;
+	struct mx6ul_iomux_grp_regs *mx6_grp_iomux;
+
+	mx6_ddr_iomux = (struct mx6ul_iomux_ddr_regs *)MX6UL_IOM_DDR_BASE;
+	mx6_grp_iomux = (struct mx6ul_iomux_grp_regs *)MX6UL_IOM_GRP_BASE;
+
+	/* DDR IO TYPE */
+	writel(grp->grp_ddr_type, &mx6_grp_iomux->grp_ddr_type);
+	writel(grp->grp_ddrpke, &mx6_grp_iomux->grp_ddrpke);
+
+	/* CLOCK */
+	writel(ddr->dram_sdclk_0, &mx6_ddr_iomux->dram_sdclk_0);
+
+	/* ADDRESS */
+	writel(ddr->dram_cas, &mx6_ddr_iomux->dram_cas);
+	writel(ddr->dram_ras, &mx6_ddr_iomux->dram_ras);
+	writel(grp->grp_addds, &mx6_grp_iomux->grp_addds);
+
+	/* Control */
+	writel(ddr->dram_reset, &mx6_ddr_iomux->dram_reset);
+	writel(ddr->dram_sdba2, &mx6_ddr_iomux->dram_sdba2);
+	writel(ddr->dram_odt0, &mx6_ddr_iomux->dram_odt0);
+	writel(ddr->dram_odt1, &mx6_ddr_iomux->dram_odt1);
+	writel(grp->grp_ctlds, &mx6_grp_iomux->grp_ctlds);
+
+	/* Data Strobes */
+	writel(grp->grp_ddrmode_ctl, &mx6_grp_iomux->grp_ddrmode_ctl);
+	writel(ddr->dram_sdqs0, &mx6_ddr_iomux->dram_sdqs0);
+	writel(ddr->dram_sdqs1, &mx6_ddr_iomux->dram_sdqs1);
+
+	/* Data */
+	writel(grp->grp_ddrmode, &mx6_grp_iomux->grp_ddrmode);
+	writel(grp->grp_b0ds, &mx6_grp_iomux->grp_b0ds);
+	writel(grp->grp_b1ds, &mx6_grp_iomux->grp_b1ds);
+	writel(ddr->dram_dqm0, &mx6_ddr_iomux->dram_dqm0);
+	writel(ddr->dram_dqm1, &mx6_ddr_iomux->dram_dqm1);
+}
+#endif
+
 #if defined(CONFIG_MX6QDL) || defined(CONFIG_MX6Q) || defined(CONFIG_MX6D)
 /* Configure MX6DQ mmdc iomux */
 void mx6dq_dram_iocfg(unsigned width,
@@ -243,19 +287,17 @@ void mx6sdl_dram_iocfg(unsigned width,
  */
 #define MR(val, ba, cmd, cs1) \
 	((val << 16) | (1 << 15) | (cmd << 4) | (cs1 << 3) | ba)
-#ifdef CONFIG_MX6SX
-#define MMDC1(entry, value)	do {} while (0)
-#else
-#define MMDC1(entry, value) do { mmdc1->entry = value; } while (0)
-#endif
+#define MMDC1(entry, value) do {					  \
+	if (!is_cpu_type(MXC_CPU_MX6SX) && !is_cpu_type(MXC_CPU_MX6UL))	  \
+		mmdc1->entry = value;					  \
+	} while (0)
+
 void mx6_dram_cfg(const struct mx6_ddr_sysinfo *sysinfo,
 		  const struct mx6_mmdc_calibration *calib,
 		  const struct mx6_ddr3_cfg *ddr3_cfg)
 {
 	volatile struct mmdc_p_regs *mmdc0;
-#ifndef CONFIG_MX6SX
 	volatile struct mmdc_p_regs *mmdc1;
-#endif
 	u32 val;
 	u8 tcke, tcksrx, tcksre, txpdll, taofpd, taonpd, trrd;
 	u8 todtlon, taxpd, tanpd, tcwl, txp, tfaw, tcl;
@@ -270,9 +312,8 @@ void mx6_dram_cfg(const struct mx6_ddr_sysinfo *sysinfo,
 	u16 mem_speed = ddr3_cfg->mem_speed;
 
 	mmdc0 = (struct mmdc_p_regs *)MMDC_P0_BASE_ADDR;
-#ifndef CONFIG_MX6SX
-	mmdc1 = (struct mmdc_p_regs *)MMDC_P1_BASE_ADDR;
-#endif
+	if (!is_cpu_type(MXC_CPU_MX6SX) && !is_cpu_type(MXC_CPU_MX6UL))
+		mmdc1 = (struct mmdc_p_regs *)MMDC_P1_BASE_ADDR;
 
 	/* Limit mem_speed for MX6D/MX6Q */
 	if (is_cpu_type(MXC_CPU_MX6Q) || is_cpu_type(MXC_CPU_MX6D)) {
arch/arm/include/asm/arch-mx6/mx6-ddr.h +45 -0

64 lines not on this page · raw message

arch/arm/include/asm/arch-mx6/mx6ul-ddr.h new file +45 -0

45 lines not on this page · raw message

Signature · 1 line
1.8.4
author
#24 lore raw

PATCH v2 14/15 imx: imx6_spl add mx6ul support

In reply to Peng Fan

i.MX6UL's DRAM space starts from 0x80000000, same to i.MX6SX, so use same address with i.MX6SX.

---

Changes v2:
new patch

 include/configs/imx6_spl.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
include/configs/imx6_spl.h +1 -1
index 21c5dce..0a585b7 100644
@@ -61,7 +61,7 @@
 #define CONFIG_SPL_LIBDISK_SUPPORT
 #endif
 
-#if defined(CONFIG_MX6SX)
+#if defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL)
 #define CONFIG_SPL_BSS_START_ADDR      0x88200000
 #define CONFIG_SPL_BSS_MAX_SIZE        0x100000        /* 1 MB */
 #define CONFIG_SYS_SPL_MALLOC_START    0x88300000
Signature · 1 line
1.8.4
author
#25 lore raw

PATCH v2 15/15 imx: mx6ul_14x14_evk add basic board support

In reply to Peng Fan

1. Add USDHC, I2C, UART, 74LV, USB, QSPI support.
2. Support SPL
3. CONFIG_MX6UL_14X14_EVK_EMMC_REWORK is introduced, this board default supports sd for usdhc2, but can do hardware rework to make usdhc2 support emmc.

---

Changes v2:
Add SPL support
More commit msg for CONFIG_MX6UL_14X14_EVK_EMMC_REWORK.

 arch/arm/Kconfig                                  |   8 +
 board/freescale/mx6ul_14x14_evk/Kconfig           |  15 +
 board/freescale/mx6ul_14x14_evk/MAINTAINERS       |   6 +
 board/freescale/mx6ul_14x14_evk/Makefile          |   6 +
 board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c | 636 ++++++++++++++++++++++
 configs/mx6ul_14x14_evk_defconfig                 |   4 +
 include/configs/mx6ul_14x14_evk.h                 | 227 ++++++++
 7 files changed, 902 insertions(+)
 create mode 100644 board/freescale/mx6ul_14x14_evk/Kconfig
 create mode 100644 board/freescale/mx6ul_14x14_evk/MAINTAINERS
 create mode 100644 board/freescale/mx6ul_14x14_evk/Makefile
 create mode 100644 board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c
 create mode 100644 configs/mx6ul_14x14_evk_defconfig
 create mode 100644 include/configs/mx6ul_14x14_evk.h
arch/arm/Kconfig +8 -0
index 9908b43..14a622e 100644
@@ -575,6 +575,13 @@ config TARGET_MX6SXSABRESD
 	select DM
 	select DM_THERMAL
 
+config TARGET_MX6UL_14X14_EVK
+	bool "Support mx6ul_14x14_evk"
+	select CPU_V7
+	select DM
+	select DM_THERMAL
+	select SUPPORT_SPL
+
 config TARGET_GW_VENTANA
 	bool "Support gw_ventana"
 	select CPU_V7
@@ -920,6 +927,7 @@ source "board/freescale/mx6qsabreauto/Kconfig"
 source "board/freescale/mx6sabresd/Kconfig"
 source "board/freescale/mx6slevk/Kconfig"
 source "board/freescale/mx6sxsabresd/Kconfig"
+source "board/freescale/mx6ul_14x14_evk/Kconfig"
 source "board/freescale/vf610twr/Kconfig"
 source "board/gateworks/gw_ventana/Kconfig"
 source "board/genesi/mx51_efikamx/Kconfig"
board/freescale/mx6ul_14x14_evk/Kconfig new file +15 -0
new file mode 100644
index 0000000..393aca6
@@ -0,0 +1,15 @@
+if TARGET_MX6UL_14X14_EVK
+
+config SYS_BOARD
+	default "mx6ul_14x14_evk"
+
+config SYS_VENDOR
+	default "freescale"
+
+config SYS_SOC
+	default "mx6"
+
+config SYS_CONFIG_NAME
+	default "mx6ul_14x14_evk"
+
+endif
board/freescale/mx6ul_14x14_evk/MAINTAINERS new file +6 -0
new file mode 100644
index 0000000..611feca
@@ -0,0 +1,6 @@
+MX6ULEVK BOARD
+M:	Peng Fan <[email protected]>
+S:	Maintained
+F:	board/freescale/mx6ul_14x14_evk/
+F:	include/configs/mx6ul_14x14_evk.h
+F:	configs/mx6ul_14x14_evk_defconfig
board/freescale/mx6ul_14x14_evk/Makefile new file +6 -0
new file mode 100644
index 0000000..61f6778
@@ -0,0 +1,6 @@
+# (C) Copyright 2015 Freescale Semiconductor, Inc.
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
+
+obj-y  := mx6ul_14x14_evk.o
board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c new file +636 -0

636 lines not on this page · raw message

configs/mx6ul_14x14_evk_defconfig new file +4 -0
new file mode 100644
index 0000000..b6eefaf
@@ -0,0 +1,4 @@
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/imx-common/spl_sd.cfg,MX6UL"
+CONFIG_ARM=y
+CONFIG_TARGET_MX6UL_14X14_EVK=y
+CONFIG_SPL=y
include/configs/mx6ul_14x14_evk.h new file +227 -0

227 lines not on this page · raw message

Signature · 1 line
1.8.4