[U-Boot] [PATCH 1/1] board: tq mba7 tqma7d 1gb emmc support.
Bruno Thomsen
bruno.thomsen at gmail.com
Tue Mar 12 16:58:05 UTC 2019
Add TQMa7D SoM support when mounted on MBa7 evaluation board.
Signed-off-by: Bruno Thomsen <bruno.thomsen at gmail.com>
---
arch/arm/mach-imx/Kconfig | 2 +-
arch/arm/mach-imx/cpu.c | 2 +-
arch/arm/mach-imx/mx7/Kconfig | 9 +
arch/arm/mach-imx/mx7/soc.c | 7 +
board/tqc/common/Kconfig | 4 +
board/tqc/common/Makefile | 10 +
board/tqc/common/tqc_bb.h | 30 ++
board/tqc/common/tqc_emmc.c | 78 ++++
board/tqc/common/tqc_emmc.h | 12 +
board/tqc/tqma7/Kconfig | 79 ++++
board/tqc/tqma7/MAINTAINERS | 8 +
board/tqc/tqma7/Makefile | 9 +
board/tqc/tqma7/README | 38 ++
board/tqc/tqma7/tqma7.c | 328 ++++++++++++++
board/tqc/tqma7/tqma7_mba7.c | 596 ++++++++++++++++++++++++++
board/tqc/tqma7/tqma7d.cfg | 68 +++
board/tqc/tqma7/tqma7d_ddr_1gb.cfg | 58 +++
board/tqc/tqma7/tqma7d_ddr_512mb.cfg | 58 +++
configs/tqma7d_1gb_mba7_mmc_defconfig | 50 +++
include/configs/tqma7.h | 426 ++++++++++++++++++
include/configs/tqma7_mba7.h | 35 ++
21 files changed, 1905 insertions(+), 2 deletions(-)
create mode 100644 board/tqc/common/Kconfig
create mode 100644 board/tqc/common/Makefile
create mode 100644 board/tqc/common/tqc_bb.h
create mode 100644 board/tqc/common/tqc_emmc.c
create mode 100644 board/tqc/common/tqc_emmc.h
create mode 100644 board/tqc/tqma7/Kconfig
create mode 100644 board/tqc/tqma7/MAINTAINERS
create mode 100644 board/tqc/tqma7/Makefile
create mode 100644 board/tqc/tqma7/README
create mode 100644 board/tqc/tqma7/tqma7.c
create mode 100644 board/tqc/tqma7/tqma7_mba7.c
create mode 100644 board/tqc/tqma7/tqma7d.cfg
create mode 100644 board/tqc/tqma7/tqma7d_ddr_1gb.cfg
create mode 100644 board/tqc/tqma7/tqma7d_ddr_512mb.cfg
create mode 100644 configs/tqma7d_1gb_mba7_mmc_defconfig
create mode 100644 include/configs/tqma7.h
create mode 100644 include/configs/tqma7_mba7.h
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index 8631fbd481..0335c0e8db 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -46,7 +46,7 @@ config SECURE_BOOT
config CMD_BMODE
bool "Support the 'bmode' command"
default y
- depends on ARCH_MX6 || ARCH_MX5
+ depends on ARCH_MX7 || ARCH_MX6 || ARCH_MX5
help
This enables the 'bmode' (bootmode) command for forcing
a boot from specific media.
diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c
index 6b83f92662..113f228c86 100644
--- a/arch/arm/mach-imx/cpu.c
+++ b/arch/arm/mach-imx/cpu.c
@@ -251,7 +251,7 @@ int cpu_eth_init(bd_t *bis)
{
int rc = -ENODEV;
-#if defined(CONFIG_FEC_MXC)
+#if defined(CONFIG_FEC_MXC) && defined(CONFIG_FEC_MXC_PHYADDR)
rc = fecmxc_initialize(bis);
#endif
diff --git a/arch/arm/mach-imx/mx7/Kconfig b/arch/arm/mach-imx/mx7/Kconfig
index 232f33285d..dfe1bedd3f 100644
--- a/arch/arm/mach-imx/mx7/Kconfig
+++ b/arch/arm/mach-imx/mx7/Kconfig
@@ -60,6 +60,14 @@ config TARGET_COLIBRI_IMX7
select DM_THERMAL
imply CMD_DM
+config TARGET_TQMA7
+ bool "tqma7"
+ select MX7D
+ select TQMA7
+ select DM
+ select DM_THERMAL
+ select TQC_EMMC
+
endchoice
config SYS_SOC
@@ -70,5 +78,6 @@ source "board/freescale/mx7dsabresd/Kconfig"
source "board/technexion/pico-imx7d/Kconfig"
source "board/toradex/colibri_imx7/Kconfig"
source "board/warp7/Kconfig"
+source "board/tqc/tqma7/Kconfig"
endif
diff --git a/arch/arm/mach-imx/mx7/soc.c b/arch/arm/mach-imx/mx7/soc.c
index 7cfdff0981..f4d697daea 100644
--- a/arch/arm/mach-imx/mx7/soc.c
+++ b/arch/arm/mach-imx/mx7/soc.c
@@ -8,6 +8,7 @@
#include <asm/arch/imx-regs.h>
#include <asm/arch/clock.h>
#include <asm/arch/sys_proto.h>
+#include <asm/mach-imx/boot_mode.h>
#include <asm/mach-imx/dma.h>
#include <asm/mach-imx/hab.h>
#include <asm/mach-imx/rdc-sema.h>
@@ -128,6 +129,12 @@ struct imx_sec_config_fuse_t const imx_sec_config_fuse = {
};
#endif
+#if defined(CONFIG_CMD_BMODE)
+const struct boot_mode soc_boot_modes[] = {
+ {NULL, 0},
+};
+#endif
+
static bool is_mx7d(void)
{
struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
diff --git a/board/tqc/common/Kconfig b/board/tqc/common/Kconfig
new file mode 100644
index 0000000000..6d77ad6052
--- /dev/null
+++ b/board/tqc/common/Kconfig
@@ -0,0 +1,4 @@
+
+config TQC_EMMC
+ bool
+ default n
diff --git a/board/tqc/common/Makefile b/board/tqc/common/Makefile
new file mode 100644
index 0000000000..d2f34f88db
--- /dev/null
+++ b/board/tqc/common/Makefile
@@ -0,0 +1,10 @@
+#
+# Copyright (C) 2016, Markus Niebel <Markus.Niebel at tq-group.com>
+#
+# SPDX-License-Identifier: GPL-2.0+
+#
+
+# necessary to create built-in.o
+obj- := __dummy__.o
+
+obj-$(CONFIG_TQC_EMMC) += tqc_emmc.o
diff --git a/board/tqc/common/tqc_bb.h b/board/tqc/common/tqc_bb.h
new file mode 100644
index 0000000000..d84d799c3b
--- /dev/null
+++ b/board/tqc/common/tqc_bb.h
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2013, 2014, 2016 TQ Systems
+ * Author: Markus Niebel <markus.niebel at tq-group.com>
+ */
+
+#ifndef __TQC_BB__
+#define __TQC_BB__
+
+#include <common.h>
+
+int tqc_bb_board_mmc_getwp(struct mmc *mmc);
+int tqc_bb_board_mmc_getcd(struct mmc *mmc);
+int tqc_bb_board_mmc_init(bd_t *bis);
+
+int tqc_bb_board_early_init_f(void);
+int tqc_bb_board_init(void);
+int tqc_bb_board_late_init(void);
+int tqc_bb_checkboard(void);
+
+const char *tqc_bb_get_boardname(void);
+
+/*
+ * Device Tree Support
+ */
+#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
+void tqc_bb_ft_board_setup(void *blob, bd_t *bd);
+#endif /* defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) */
+
+#endif
diff --git a/board/tqc/common/tqc_emmc.c b/board/tqc/common/tqc_emmc.c
new file mode 100644
index 0000000000..a75e0c7d23
--- /dev/null
+++ b/board/tqc/common/tqc_emmc.c
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2017 TQ Systems GmbH
+ * Markus Niebel <Markus.Niebel at tq-group.com>
+ */
+
+#include <common.h>
+#include <fdt_support.h>
+#include <mmc.h>
+
+#include "tqc_emmc.h"
+
+struct emmc_dsr_lookup {
+ uint mfgid;
+ char *pnm;
+ int dsr_needed;
+};
+
+static const struct emmc_dsr_lookup dsr_tbl[] = {
+ /* Micron, e-MMC 4.41 */
+ { 0xfe, "MMC02G", 1 },
+ { 0xfe, "MMC04G", 1 },
+ { 0xfe, "MMC08G", 1 },
+ /* Micron, e-MMC 5.0 4 GB*/
+ { 0x13, "Q1J54A", 1 },
+ { 0x13, "Q2J54A", 1 },
+ /* Micron, e-MMC 5.0 8 GB*/
+ { 0x13, "Q2J55L", 0 },
+ /* Samsung, e-MMC 5.0 */
+ { 0x15, "8GSD3R", 0 },
+ { 0x15, "AGSD3R", 0 },
+ { 0x15, "BGSD3R", 0 },
+ { 0x15, "CGSD3R", 0 },
+ /* SanDisk, iNAND 7250 5.1 */
+ { 0x45, "DG4008", 0 },
+ { 0x45, "DG4016", 0 },
+ { 0x45, "DG4032", 0 },
+ { 0x45, "DG4064", 0 },
+ /* Kingston TBD. */
+ { 0x100, "?????", 0 },
+};
+
+int tqc_emmc_need_dsr(struct mmc *mmc)
+{
+ uint mfgid = mmc->cid[0] >> 24;
+ char name[7];
+ unsigned int i;
+ int ret = -1;
+
+ if (IS_SD(mmc))
+ return 0;
+
+ sprintf(name, "%c%c%c%c%c%c", mmc->cid[0] & 0xff, (mmc->cid[1] >> 24),
+ (mmc->cid[1] >> 16) & 0xff, (mmc->cid[1] >> 8) & 0xff,
+ mmc->cid[1] & 0xff, (mmc->cid[2] >> 24));
+
+ for (i = 0; i < ARRAY_SIZE(dsr_tbl) && (ret < 0); ++i) {
+ if (dsr_tbl[i].mfgid == mfgid &&
+ !strncmp(name, dsr_tbl[i].pnm, 6)) {
+ ret = dsr_tbl[i].dsr_needed;
+ debug("MFG: %x PNM: %s\n", mfgid, name);
+ }
+ }
+
+ if (ret < 0) {
+ printf("e-MMC unknown: MFG: %x PNM: %s\n", mfgid, name);
+ /* request DSR, even if not known if supported to be safe */
+ ret = 1;
+ }
+
+ return ret;
+}
+
+int tqc_ft_fixup_emmc_dsr(void *blob, const char *path, u32 value)
+{
+ do_fixup_by_path_u32(blob, path, "dsr", value, 1);
+ return 0;
+}
diff --git a/board/tqc/common/tqc_emmc.h b/board/tqc/common/tqc_emmc.h
new file mode 100644
index 0000000000..8b40d2887d
--- /dev/null
+++ b/board/tqc/common/tqc_emmc.h
@@ -0,0 +1,12 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2017 TQ Systems GmbH
+ * Markus Niebel <Markus.Niebel at tq-group.com>
+ */
+#ifndef __TQC_EMMC_H__
+#define __TQC_EMMC_H__
+
+int tqc_emmc_need_dsr(struct mmc *mmc);
+int tqc_ft_fixup_emmc_dsr(void *blob, const char *path, u32 value);
+
+#endif /* __TQC_EMMC_H__ */
diff --git a/board/tqc/tqma7/Kconfig b/board/tqc/tqma7/Kconfig
new file mode 100644
index 0000000000..76338c8d3e
--- /dev/null
+++ b/board/tqc/tqma7/Kconfig
@@ -0,0 +1,79 @@
+if TARGET_TQMA7
+
+config SYS_BOARD
+ default "tqma7"
+
+config SYS_VENDOR
+ default "tqc"
+
+config SYS_SOC
+ default "mx7"
+
+config SYS_CONFIG_NAME
+ default "tqma7"
+
+config TQMA7
+ bool
+ select MX7D
+ select SPI_FLASH_STMICRO if SPI_FLASH
+ select SPI_FLASH_WINBOND if SPI_FLASH
+ select SPI_FLASH_SPANSION if SPI_FLASH
+ select SPI_FLASH_MTD if SPI_FLASH
+ select SPI_FLASH_BAR if SPI_FLASH
+
+choice
+ prompt "TQMa7 boot configuration"
+ default TQMA7_MMC_BOOT
+ help
+ Configure boot device. This is also used to implement environment
+ location.
+
+config TQMA7_MMC_BOOT
+ bool "MMC / SD Boot"
+ help
+ Boot from eMMC / SD Card.
+
+config TQMA7_QSPI_BOOT
+ bool "QSPI NOR Boot"
+ help
+ Boot from on board QSPI NOR flash.
+
+endchoice
+
+
+choice
+ prompt "TQMa7 DRAM configuration"
+ default TQMA7_512MB
+ help
+ Configure DRAM size.
+
+config TQMA7_512MB
+ bool "512 MB DRAM"
+ help
+ configure for variant with 512 MB DRAM.
+
+config TQMA7_1GB
+ bool "1 GB DRAM"
+ help
+ configure for variant with 1 GB DRAM.
+
+endchoice
+
+
+choice
+ prompt "TQMa7 base board variant"
+ default MBA7
+
+config MBA7
+ bool "TQMa7 on MBa7 Starterkit"
+ help
+ Select the MBa7 starterkit.
+
+endchoice
+
+config IMX_CONFIG
+ default "board/tqc/tqma7/tqma7d.cfg"
+
+source "board/tqc/common/Kconfig"
+
+endif
diff --git a/board/tqc/tqma7/MAINTAINERS b/board/tqc/tqma7/MAINTAINERS
new file mode 100644
index 0000000000..dcf0b88817
--- /dev/null
+++ b/board/tqc/tqma7/MAINTAINERS
@@ -0,0 +1,8 @@
+TQ SYSTEMS TQMA7 BOARD
+M: Markus Niebel <Markus.Niebel at tq-group.com>
+R: Bruno Thomsen <bruno.thomsen at gmail.com>
+S: Maintained
+F: board/tqc/tqma7/*
+F: include/configs/tqma7.h
+F: include/configs/tqma7_*.h
+F: configs/tqma7*_defconfig
diff --git a/board/tqc/tqma7/Makefile b/board/tqc/tqma7/Makefile
new file mode 100644
index 0000000000..048205f121
--- /dev/null
+++ b/board/tqc/tqma7/Makefile
@@ -0,0 +1,9 @@
+#
+# Copyright (C) 2016, Markus Niebel <Markus.Niebel at tq-group.com>
+#
+# SPDX-License-Identifier: GPL-2.0+
+#
+
+obj-y := tqma7.o
+
+obj-$(CONFIG_MBA7) += tqma7_mba7.o
diff --git a/board/tqc/tqma7/README b/board/tqc/tqma7/README
new file mode 100644
index 0000000000..be5313aa8b
--- /dev/null
+++ b/board/tqc/tqma7/README
@@ -0,0 +1,38 @@
+U-Boot for the TQ Systems TQMa7x modules
+
+This file contains information for the port of
+U-Boot to the TQ Systems TQMa7x modules.
+
+1. Boot source
+--------------
+
+The following boot source is supported:
+
+- SD/eMMC
+- QSPI NOR (work in progress)
+
+2. Building
+------------
+
+To build U-Boot for the TQ Systems TQMa6 modules:
+
+ make tqma7d_<dram>_<baseboard>_<boot>_defconfig
+ make
+
+dram is a placeholder for the DRAM size
+512mb
+1gb
+
+baseboard is a placeholder for the mainboard to compile for
+mba7
+
+boot is a placeholder for the boot device
+mmc - means eMMC
+qspi - mean QSPI NOR
+
+This gives the following configurations:
+
+tqma7d_512mb_mba7_mmc_defconfig (work in progress)
+tqma7d_1gb_mba7_mmc_defconfig
+tqma7d_512mb_mba7_qspi_defconfig (work in progress)
+tqma7d_1gb_mba7_qspi_defconfig (work in progress)
diff --git a/board/tqc/tqma7/tqma7.c b/board/tqc/tqma7/tqma7.c
new file mode 100644
index 0000000000..7adef79f9a
--- /dev/null
+++ b/board/tqc/tqma7/tqma7.c
@@ -0,0 +1,328 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2016-2018 TQ Systems GmbH
+ * Author: Markus Niebel <Markus.Niebel at tq-group.com>
+ * Copyright (C) 2019 Bruno Thomsen <bruno.thomsen at gmail.com>
+ */
+
+#include <asm/arch/clock.h>
+#include <asm/arch/crm_regs.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/mx7-pins.h>
+#include <asm/arch/sys_proto.h>
+#include <linux/errno.h>
+#include <asm/gpio.h>
+#include <asm/mach-imx/iomux-v3.h>
+#include <asm/mach-imx/boot_mode.h>
+#include <asm/mach-imx/mxc_i2c.h>
+#include <asm/mach-imx/spi.h>
+#include <asm/io.h>
+#include <common.h>
+#include <fdt_support.h>
+#include <fsl_esdhc.h>
+#include <linux/libfdt.h>
+#include <linux/sizes.h>
+#include <i2c.h>
+#include <mmc.h>
+#include <miiphy.h>
+#include <netdev.h>
+#include <power/pfuze3000_pmic.h>
+#include <power/pmic.h>
+#if defined(CONFIG_FSL_QSPI)
+#include <spi.h>
+#include <spi_flash.h>
+#endif
+
+#include "../common/tqc_bb.h"
+#include "../common/tqc_emmc.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define USDHC_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \
+ PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU47KOHM)
+
+#define USDHC_CMD_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \
+ PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU47KOHM)
+
+#define USDHC_CLK_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_FAST | \
+ PAD_CTL_PUE | PAD_CTL_PUS_PU47KOHM)
+
+/* HW Rev.0200, DDR50 */
+#define USDHC_CLK_PAD_CTRL_R0200 (PAD_CTL_DSE_3P3V_49OHM | \
+ PAD_CTL_SRE_SLOW | PAD_CTL_PUE | PAD_CTL_PUS_PU47KOHM)
+
+#define GPIO_IN_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | \
+ PAD_CTL_DSE_3P3V_196OHM | PAD_CTL_HYS | PAD_CTL_SRE_SLOW)
+#define GPIO_OUT_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | \
+ PAD_CTL_DSE_3P3V_98OHM | PAD_CTL_HYS | PAD_CTL_SRE_SLOW)
+
+#define I2C_PAD_CTRL (PAD_CTL_DSE_3P3V_196OHM | PAD_CTL_SRE_FAST | \
+ PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU100KOHM)
+
+#define QSPI_DATA_PAD_CTRL (PAD_CTL_PUS_PU47KOHM | PAD_CTL_PUE | \
+ PAD_CTL_HYS | PAD_CTL_SRE_FAST | PAD_CTL_DSE_3P3V_98OHM)
+#define QSPI_CLK_PAD_CTRL (PAD_CTL_PUS_PD100KOHM | PAD_CTL_PUE | \
+ PAD_CTL_SRE_FAST | PAD_CTL_DSE_3P3V_49OHM)
+#define QSPI_SS_PAD_CTRL (PAD_CTL_PUS_PU47KOHM | PAD_CTL_PUE | \
+ PAD_CTL_SRE_SLOW | PAD_CTL_DSE_3P3V_196OHM)
+#define QSPI_RST_PAD_CTRL (PAD_CTL_PUS_PU47KOHM | PAD_CTL_PUE | \
+ PAD_CTL_SRE_FAST | PAD_CTL_DSE_3P3V_98OHM)
+
+static const u16 tqma7_emmc_dsr = 0x0100;
+
+int dram_init(void)
+{
+ gd->ram_size = PHYS_SDRAM_SIZE;
+
+ return 0;
+}
+
+/* eMMC on USDHCI3 always present */
+static iomux_v3_cfg_t const tqma7_usdhc3_pads[] = {
+ NEW_PAD_CTRL(MX7D_PAD_SD3_CLK__SD3_CLK, USDHC_CLK_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD3_CMD__SD3_CMD, USDHC_CMD_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD3_DATA0__SD3_DATA0, USDHC_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD3_DATA1__SD3_DATA1, USDHC_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD3_DATA2__SD3_DATA2, USDHC_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD3_DATA3__SD3_DATA3, USDHC_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD3_DATA4__SD3_DATA4, USDHC_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD3_DATA5__SD3_DATA5, USDHC_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD3_DATA6__SD3_DATA6, USDHC_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD3_DATA7__SD3_DATA7, USDHC_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD3_STROBE__SD3_STROBE, USDHC_PAD_CTRL),
+ /* eMMC reset */
+ NEW_PAD_CTRL(MX7D_PAD_SD3_RESET_B__SD3_RESET_B, USDHC_PAD_CTRL),
+};
+
+static iomux_v3_cfg_t const tqma7_usdhc3_r0200_pads[] = {
+ NEW_PAD_CTRL(MX7D_PAD_SD3_CLK__SD3_CLK, USDHC_CLK_PAD_CTRL_R0200),
+};
+
+/*
+ * According to board_mmc_init() the following map is done:
+ * (U-boot device node) (Physical Port)
+ * mmc0 eMMC (SD3) on TQMa7
+ * mmc1 .. n optional slots used on baseboard
+ */
+struct fsl_esdhc_cfg tqma7_usdhc_cfg = {
+ .esdhc_base = USDHC3_BASE_ADDR,
+ .max_bus_width = 8,
+};
+
+bool tqma7_emmc_needs_dsr(struct mmc *mmc)
+{
+ struct mmc *emmc = find_mmc_device(0);
+
+ if (!emmc) {
+ puts("e-MMC: not present?\n");
+ return false;
+ }
+
+ if (mmc && emmc != mmc)
+ return false;
+
+ if (!mmc && mmc_init(emmc)) {
+ puts("e-MMC: not present?\n");
+ return false;
+ }
+
+ return (tqc_emmc_need_dsr(emmc) > 0) ? true : false;
+}
+
+int board_mmc_getcd(struct mmc *mmc)
+{
+ struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
+ int ret = 0;
+
+ if (cfg->esdhc_base == USDHC3_BASE_ADDR)
+ /* eMMC/uSDHC3 is always present */
+ ret = 1;
+ else
+ ret = tqc_bb_board_mmc_getcd(mmc);
+
+ return ret;
+}
+
+int board_mmc_getwp(struct mmc *mmc)
+{
+ struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
+ int ret = 0;
+
+ if (cfg->esdhc_base == USDHC3_BASE_ADDR)
+ /* eMMC/uSDHC3 is always present */
+ ret = 0;
+ else
+ ret = tqc_bb_board_mmc_getwp(mmc);
+
+ return ret;
+}
+
+int board_mmc_init(bd_t *bis)
+{
+ imx_iomux_v3_setup_multiple_pads(tqma7_usdhc3_pads,
+ ARRAY_SIZE(tqma7_usdhc3_pads));
+ tqma7_usdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
+ if (fsl_esdhc_initialize(bis, &tqma7_usdhc_cfg))
+ puts("Warning: failed to initialize eMMC dev\n");
+
+ tqc_bb_board_mmc_init(bis);
+
+ return 0;
+}
+
+/* board-specific MMC card detection / modification */
+void board_mmc_detect_card_type(struct mmc *mmc)
+{
+ if (tqma7_emmc_needs_dsr(mmc) > 0)
+ mmc_set_dsr(mmc, tqma7_emmc_dsr);
+ else
+ imx_iomux_v3_setup_multiple_pads(tqma7_usdhc3_r0200_pads,
+ ARRAY_SIZE(tqma7_usdhc3_r0200_pads));
+}
+
+static iomux_v3_cfg_t const tqma7_quadspi_pads[] = {
+ MX7D_PAD_EPDC_DATA00__QSPI_A_DATA0 | MUX_PAD_CTRL(QSPI_DATA_PAD_CTRL),
+ MX7D_PAD_EPDC_DATA01__QSPI_A_DATA1 | MUX_PAD_CTRL(QSPI_DATA_PAD_CTRL),
+ MX7D_PAD_EPDC_DATA02__QSPI_A_DATA2 | MUX_PAD_CTRL(QSPI_DATA_PAD_CTRL),
+ MX7D_PAD_EPDC_DATA03__QSPI_A_DATA3 | MUX_PAD_CTRL(QSPI_DATA_PAD_CTRL),
+ MX7D_PAD_EPDC_DATA05__QSPI_A_SCLK | MUX_PAD_CTRL(QSPI_CLK_PAD_CTRL),
+ MX7D_PAD_EPDC_DATA06__QSPI_A_SS0_B | MUX_PAD_CTRL(QSPI_SS_PAD_CTRL),
+ MX7D_PAD_EPDC_DATA07__QSPI_A_SS1_B | MUX_PAD_CTRL(QSPI_SS_PAD_CTRL),
+ MX7D_PAD_EPDC_DATA04__GPIO2_IO4 | MUX_PAD_CTRL(QSPI_RST_PAD_CTRL) |
+ MUX_MODE_SION,
+};
+
+#define QSPI_RESET_GPIO IMX_GPIO_NR(2, 4)
+
+static void tqma7_setup_qspi(void)
+{
+ gpio_request(QSPI_RESET_GPIO, "qspi-rst#");
+ gpio_direction_output(QSPI_RESET_GPIO, 1);
+
+ /* Set the iomux */
+ imx_iomux_v3_setup_multiple_pads(tqma7_quadspi_pads,
+ ARRAY_SIZE(tqma7_quadspi_pads));
+ /* Set the clock */
+ set_clk_qspi();
+}
+
+static struct i2c_pads_info tqma7_i2c1_pads = {
+ /* I2C1: on board LM75, M24C64, */
+ .scl = {
+ .i2c_mode = NEW_PAD_CTRL(MX7D_PAD_I2C1_SCL__I2C1_SCL,
+ I2C_PAD_CTRL),
+ .gpio_mode = NEW_PAD_CTRL(MX7D_PAD_I2C1_SCL__GPIO4_IO8,
+ I2C_PAD_CTRL),
+ .gp = IMX_GPIO_NR(4, 8)
+ },
+ .sda = {
+ .i2c_mode = NEW_PAD_CTRL(MX7D_PAD_I2C1_SDA__I2C1_SDA,
+ I2C_PAD_CTRL),
+ .gpio_mode = NEW_PAD_CTRL(MX7D_PAD_I2C1_SDA__GPIO4_IO9,
+ I2C_PAD_CTRL),
+ .gp = IMX_GPIO_NR(4, 9)
+ }
+};
+
+static void tqma7_setup_i2c(void)
+{
+ int ret;
+
+ /*
+ * use logical index for bus, e.g. I2C1 -> 0
+ * warn on error
+ */
+ ret = setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f,
+ &tqma7_i2c1_pads);
+ if (ret)
+ printf("setup I2C1 failed: %d\n", ret);
+}
+
+int board_early_init_f(void)
+{
+ return tqc_bb_board_early_init_f();
+}
+
+int board_init(void)
+{
+ /* address of boot parameters */
+ gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
+
+ tqma7_setup_i2c();
+
+ tqma7_setup_qspi();
+
+ tqc_bb_board_init();
+
+ return 0;
+}
+
+static const char *tqma7_get_boardname(void)
+{
+ u32 cpurev = get_cpu_rev();
+
+ switch ((cpurev & 0xFF000) >> 12) {
+ case MXC_CPU_MX7S:
+ return "TQMa7S";
+ case MXC_CPU_MX7D:
+ return "TQMa7D";
+ default:
+ return "??";
+ };
+}
+
+/* setup board specific PMIC */
+int power_init_board(void)
+{
+ struct pmic *p;
+ u32 reg, rev;
+
+ power_pfuze3000_init(0);
+ p = pmic_get("PFUZE3000");
+ if (p && !pmic_probe(p)) {
+ pmic_reg_read(p, PFUZE3000_DEVICEID, ®);
+ pmic_reg_read(p, PFUZE3000_REVID, &rev);
+ printf("PMIC: PFUZE3000 ID=0x%02x REV=0x%02x\n", reg, rev);
+ }
+
+ return 0;
+}
+
+static const struct boot_mode tqma7_board_boot_modes[] = {
+ /* 4 bit bus width */
+ {"sd1", MAKE_CFGVAL(0x10, 0x12, 0x00, 0x00)},
+ {"emmc", MAKE_CFGVAL(0x10, 0x2a, 0x00, 0x00)},
+ {"qspi", MAKE_CFGVAL(0x00, 0x40, 0x00, 0x00)},
+ {NULL, 0},
+};
+
+int board_late_init(void)
+{
+ add_board_boot_modes(tqma7_board_boot_modes);
+
+ tqc_bb_board_late_init();
+
+ return 0;
+}
+
+u32 get_board_rev(void)
+{
+ return tqma7_emmc_needs_dsr(0) ? 100 : 200;
+}
+
+int checkboard(void)
+{
+ printf("Board: %s rev 0%u on %s\n", tqma7_get_boardname(),
+ get_board_rev(), tqc_bb_get_boardname());
+ return 0;
+}
+
+int board_get_rtc_bus(void)
+{
+ return 0;
+}
+
+int board_get_dtt_bus(void)
+{
+ return 0;
+}
diff --git a/board/tqc/tqma7/tqma7_mba7.c b/board/tqc/tqma7/tqma7_mba7.c
new file mode 100644
index 0000000000..59902a14a1
--- /dev/null
+++ b/board/tqc/tqma7/tqma7_mba7.c
@@ -0,0 +1,596 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2016-2018 TQ Systems GmbH
+ * Author: Markus Niebel <Markus.Niebel at tq-group.com>
+ * Copyright (C) 2019 Bruno Thomsen <bruno.thomsen at gmail.com>
+ */
+
+#include <asm/arch/clock.h>
+#include <asm/arch/crm_regs.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/mx7-pins.h>
+#include <asm/arch/sys_proto.h>
+#include <linux/errno.h>
+#include <asm/gpio.h>
+#include <asm/mach-imx/boot_mode.h>
+#include <asm/mach-imx/iomux-v3.h>
+#include <asm/mach-imx/spi.h>
+#include <asm/io.h>
+#include <common.h>
+#include <fsl_esdhc.h>
+#include <linux/libfdt.h>
+#include <linux/sizes.h>
+#include <malloc.h>
+#include <miiphy.h>
+#include <mmc.h>
+#include <netdev.h>
+#include <pca953x.h>
+#include <usb.h>
+
+#include "../common/tqc_bb.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define UART_RX_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | \
+ PAD_CTL_PUS_PU100KOHM | PAD_CTL_PUE | PAD_CTL_HYS | PAD_CTL_SRE_SLOW)
+
+#define UART_TX_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | \
+ PAD_CTL_PUS_PU100KOHM | PAD_CTL_PUE | PAD_CTL_SRE_SLOW)
+
+#define USDHC_DATA_PAD_CTRL (PAD_CTL_DSE_3P3V_98OHM | \
+ PAD_CTL_SRE_SLOW | PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU47KOHM)
+
+#define USDHC_CMD_PAD_CTRL (USDHC_DATA_PAD_CTRL)
+
+#define USDHC_CLK_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \
+ PAD_CTL_PUE | PAD_CTL_PUS_PU47KOHM)
+
+/* output of MIC2016 is open drain */
+#define USB_OC_PAD_CTRL (PAD_CTL_PUS_PU47KOHM | \
+ PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_HYS | PAD_CTL_SRE_SLOW)
+
+#define GPIO_IN_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | \
+ PAD_CTL_DSE_3P3V_196OHM | PAD_CTL_HYS | PAD_CTL_SRE_SLOW)
+
+#define GPIO_OUT_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | \
+ PAD_CTL_DSE_3P3V_196OHM | PAD_CTL_HYS | PAD_CTL_SRE_FAST)
+
+#define I2C_PAD_CTRL (PAD_CTL_DSE_3P3V_196OHM | PAD_CTL_SRE_FAST | \
+ PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU100KOHM)
+
+#define ENET_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | PAD_CTL_PUE | \
+ PAD_CTL_SRE_FAST | PAD_CTL_DSE_3P3V_49OHM)
+#define ENET_TX_PAD_CTRL (ENET_PAD_CTRL)
+#define ENET_RX_PAD_CTRL (ENET_PAD_CTRL | PAD_CTL_HYS)
+#define ENET_PAD_CTRL_MDC (PAD_CTL_DSE_3P3V_196OHM)
+#define ENET_PAD_CTRL_MDIO (PAD_CTL_DSE_3P3V_98OHM)
+#define ENET_RST_PAD_CTRL (PAD_CTL_PUS_PU100KOHM | PAD_CTL_PUE | \
+ PAD_CTL_DSE_3P3V_196OHM | PAD_CTL_SRE_FAST)
+
+#define WDOG_PAD_CTRL (PAD_CTL_PUS_PU5KOHM | PAD_CTL_PUE | \
+ PAD_CTL_SRE_FAST | PAD_CTL_DSE_3P3V_196OHM)
+
+static iomux_v3_cfg_t const mba7_fec1_pads[] = {
+ MX7D_PAD_ENET1_RGMII_RX_CTL__ENET1_RGMII_RX_CTL | \
+ MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
+ MX7D_PAD_ENET1_RGMII_RD0__ENET1_RGMII_RD0 | \
+ MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
+ MX7D_PAD_ENET1_RGMII_RD1__ENET1_RGMII_RD1 | \
+ MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
+ MX7D_PAD_ENET1_RGMII_RD2__ENET1_RGMII_RD2 | \
+ MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
+ MX7D_PAD_ENET1_RGMII_RD3__ENET1_RGMII_RD3 | \
+ MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
+ MX7D_PAD_ENET1_RGMII_RXC__ENET1_RGMII_RXC | \
+ MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
+ MX7D_PAD_ENET1_RGMII_TX_CTL__ENET1_RGMII_TX_CTL | \
+ MUX_PAD_CTRL(ENET_TX_PAD_CTRL),
+ MX7D_PAD_ENET1_RGMII_TD0__ENET1_RGMII_TD0 | \
+ MUX_PAD_CTRL(ENET_TX_PAD_CTRL),
+ MX7D_PAD_ENET1_RGMII_TD1__ENET1_RGMII_TD1 | \
+ MUX_PAD_CTRL(ENET_TX_PAD_CTRL),
+ MX7D_PAD_ENET1_RGMII_TD2__ENET1_RGMII_TD2 | \
+ MUX_PAD_CTRL(ENET_TX_PAD_CTRL),
+ MX7D_PAD_ENET1_RGMII_TD3__ENET1_RGMII_TD3 | \
+ MUX_PAD_CTRL(ENET_TX_PAD_CTRL),
+ MX7D_PAD_ENET1_RGMII_TXC__ENET1_RGMII_TXC | \
+ MUX_PAD_CTRL(ENET_TX_PAD_CTRL),
+
+ MX7D_PAD_GPIO1_IO10__ENET1_MDIO | \
+ MUX_PAD_CTRL(ENET_PAD_CTRL_MDIO),
+ MX7D_PAD_GPIO1_IO11__ENET1_MDC | \
+ MUX_PAD_CTRL(ENET_PAD_CTRL_MDC),
+ /* PHY reset */
+ MX7D_PAD_ENET1_COL__GPIO7_IO15 | \
+ MUX_PAD_CTRL(ENET_RST_PAD_CTRL) | MUX_MODE_SION,
+ /* INT/PWDN */
+ MX7D_PAD_GPIO1_IO09__GPIO1_IO9 | \
+ MUX_PAD_CTRL(GPIO_OUT_PAD_CTRL) | MUX_MODE_SION,
+};
+
+#define ENET1_PHY_RESET_GPIO IMX_GPIO_NR(7, 15)
+#define ENET1_PHY_INT_GPIO IMX_GPIO_NR(1, 9)
+
+static iomux_v3_cfg_t const mba7_fec2_pads[] = {
+ MX7D_PAD_EPDC_SDCE0__ENET2_RGMII_RX_CTL | \
+ MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
+ MX7D_PAD_EPDC_SDCLK__ENET2_RGMII_RD0 | \
+ MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
+ MX7D_PAD_EPDC_SDLE__ENET2_RGMII_RD1 | \
+ MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
+ MX7D_PAD_EPDC_SDOE__ENET2_RGMII_RD2 | \
+ MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
+ MX7D_PAD_EPDC_SDSHR__ENET2_RGMII_RD3 | \
+ MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
+ MX7D_PAD_EPDC_SDCE1__ENET2_RGMII_RXC | \
+ MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
+ MX7D_PAD_EPDC_GDRL__ENET2_RGMII_TX_CTL | \
+ MUX_PAD_CTRL(ENET_TX_PAD_CTRL),
+ MX7D_PAD_EPDC_SDCE2__ENET2_RGMII_TD0 | \
+ MUX_PAD_CTRL(ENET_TX_PAD_CTRL),
+ MX7D_PAD_EPDC_SDCE3__ENET2_RGMII_TD1 | \
+ MUX_PAD_CTRL(ENET_TX_PAD_CTRL),
+ MX7D_PAD_EPDC_GDCLK__ENET2_RGMII_TD2 | \
+ MUX_PAD_CTRL(ENET_TX_PAD_CTRL),
+ MX7D_PAD_EPDC_GDOE__ENET2_RGMII_TD3 | \
+ MUX_PAD_CTRL(ENET_TX_PAD_CTRL),
+ MX7D_PAD_EPDC_GDSP__ENET2_RGMII_TXC | \
+ MUX_PAD_CTRL(ENET_TX_PAD_CTRL),
+
+ MX7D_PAD_SD2_CD_B__ENET2_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL_MDIO),
+ MX7D_PAD_SD2_WP__ENET2_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL_MDC),
+
+ /* PHY reset */
+ MX7D_PAD_EPDC_BDR0__GPIO2_IO28 | MUX_PAD_CTRL(ENET_RST_PAD_CTRL) |
+ MUX_MODE_SION,
+ /* INT/PWDN */
+ MX7D_PAD_EPDC_PWR_STAT__GPIO2_IO31 | MUX_PAD_CTRL(GPIO_OUT_PAD_CTRL) |
+ MUX_MODE_SION,
+};
+
+#define ENET2_PHY_RESET_GPIO IMX_GPIO_NR(2, 28)
+#define ENET2_PHY_INT_GPIO IMX_GPIO_NR(2, 31)
+
+static void mba7_setup_iomuxc_enet(void)
+{
+ imx_iomux_v3_setup_multiple_pads(mba7_fec1_pads,
+ ARRAY_SIZE(mba7_fec1_pads));
+
+ gpio_request(ENET1_PHY_RESET_GPIO, "enet1-phy-rst#");
+ gpio_request(ENET1_PHY_INT_GPIO, "enet1-phy-intpwdn");
+ gpio_direction_output(ENET1_PHY_INT_GPIO, 1);
+ /* Reset PHY */
+ gpio_direction_output(ENET1_PHY_RESET_GPIO, 0);
+ udelay(100);
+ gpio_set_value(ENET1_PHY_RESET_GPIO, 1);
+ udelay(500);
+
+ if (is_cpu_type(MXC_CPU_MX7D)) {
+ imx_iomux_v3_setup_multiple_pads(mba7_fec2_pads,
+ ARRAY_SIZE(mba7_fec2_pads));
+ gpio_request(ENET2_PHY_RESET_GPIO, "enet2-phy-rst#");
+ gpio_request(ENET2_PHY_INT_GPIO, "enet2-phy-intpwdn");
+ gpio_direction_output(ENET2_PHY_INT_GPIO, 1);
+ /* Reset PHY */
+ gpio_direction_output(ENET2_PHY_RESET_GPIO, 0);
+ udelay(100);
+ gpio_set_value(ENET2_PHY_RESET_GPIO, 1);
+ udelay(500);
+ } else {
+ gpio_request(ENET2_PHY_RESET_GPIO, "enet2-reserved0");
+ gpio_request(ENET2_PHY_INT_GPIO, "enet2-reserved1");
+ gpio_direction_output(ENET2_PHY_INT_GPIO, 0);
+ gpio_direction_output(ENET2_PHY_RESET_GPIO, 0);
+ }
+}
+
+static const u32 fec_base[] = {
+ ENET_IPS_BASE_ADDR,
+ ENET2_IPS_BASE_ADDR
+};
+
+static const u32 phy_addr[] = {
+ TQMA7_ENET1_PHYADDR,
+ TQMA7_ENET2_PHYADDR
+};
+
+int board_eth_init(bd_t *bis)
+{
+ int ret;
+ int i;
+ int count = (is_cpu_type(MXC_CPU_MX7D)) ? ARRAY_SIZE(fec_base) : 1;
+
+ struct mii_dev *bus = NULL;
+ struct phy_device *phydev = NULL;
+
+ for (i = 0; i < count; ++i) {
+ bus = fec_get_miibus(fec_base[i], i);
+ if (!bus)
+ goto err_bus;
+ /* scan phy */
+ phydev = phy_find_by_mask(bus, (0x1 << phy_addr[i]),
+ PHY_INTERFACE_MODE_RGMII_ID);
+ if (!phydev)
+ goto err_phydev;
+ ret = fec_probe(bis, i, fec_base[i], bus, phydev);
+ if (ret)
+ goto err_fec;
+ continue;
+
+err_fec:
+ free(phydev);
+err_phydev:
+ free(bus);
+err_bus:
+ printf("Error init FEC%d\n", i);
+ }
+
+ return 0;
+}
+
+static int mba7_setup_fec(int fec_id)
+{
+ struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs
+ = (struct iomuxc_gpr_base_regs *)IOMUXC_GPR_BASE_ADDR;
+ int ret;
+
+ switch (fec_id) {
+ case 0:
+ /* Use 125M anatop REF_CLK1 for ENET1,
+ * clear gpr1[13], gpr1[17]
+ */
+ clrsetbits_le32(&iomuxc_gpr_regs->gpr[1],
+ (IOMUXC_GPR_GPR1_GPR_ENET1_TX_CLK_SEL_MASK |
+ IOMUXC_GPR_GPR1_GPR_ENET1_CLK_DIR_MASK), 0);
+ break;
+ case 1:
+ /* Use 125M anatop REF_CLK2 for ENET2,
+ * clear gpr1[14], gpr1[18]
+ */
+ clrsetbits_le32(&iomuxc_gpr_regs->gpr[1],
+ (IOMUXC_GPR_GPR1_GPR_ENET2_TX_CLK_SEL_MASK |
+ IOMUXC_GPR_GPR1_GPR_ENET2_CLK_DIR_MASK), 0);
+ break;
+ default:
+ printf("FEC%d: unsupported\n", fec_id);
+ return -1;
+ }
+
+ ret = set_clk_enet(ENET_125MHZ);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+#define DP83867_DEVADDR 0x1f
+
+/* TODO: needed here until we have DT init */
+
+#define MBA7_DP83867_RGMII_TX_DELAY_CTRL 0x09 /* 0b1001 = 2,5 ns */
+#define MBA7_DP83867_RGMII_RX_DELAY_CTRL 0x09 /* 0b1001 = 2,5 ns */
+
+/* Extended Registers */
+#define DP83867_RGMIICTL 0x0032
+#define DP83867_RGMIIDCTL 0x0086
+
+/* RGMIIDCTL bits */
+#define DP83867_RGMII_TX_CLK_DELAY_SHIFT 4
+
+/* RGMIICTL bits */
+#define DP83867_RGMII_TX_CLK_DELAY_EN BIT(1)
+#define DP83867_RGMII_RX_CLK_DELAY_EN BIT(0)
+
+int board_phy_config(struct phy_device *phydev)
+{
+ u32 val;
+
+ if (phydev->drv->config)
+ phydev->drv->config(phydev);
+
+ /*
+ * LED configuration:
+ * LED1: Link / Activity
+ * LED2: error
+ */
+ phy_write(phydev, MDIO_DEVAD_NONE, 0x18, 0x0db0);
+ /* active low, LED1/2 driven by phy */
+ phy_write(phydev, MDIO_DEVAD_NONE, 0x19, 0x1001);
+
+ if (!phydev->drv ||
+ !phydev->drv->writeext || !phydev->drv->readext) {
+ puts("PHY does not have extended functions\n");
+ return 0;
+ }
+
+ /* set GPIO to out low */
+ phydev->drv->writeext(phydev, phydev->addr, DP83867_DEVADDR,
+ 0x0171, 0x8888);
+ phydev->drv->writeext(phydev, phydev->addr, DP83867_DEVADDR,
+ 0x0172, 0x8888);
+
+ val = phydev->drv->readext(phydev, phydev->addr, DP83867_DEVADDR,
+ DP83867_RGMIICTL);
+ val |= (DP83867_RGMII_TX_CLK_DELAY_EN |
+ DP83867_RGMII_RX_CLK_DELAY_EN);
+
+ phydev->drv->writeext(phydev, phydev->addr, DP83867_DEVADDR,
+ DP83867_RGMIICTL, val);
+
+ val = ((MBA7_DP83867_RGMII_RX_DELAY_CTRL) |
+ (MBA7_DP83867_RGMII_TX_DELAY_CTRL <<
+ DP83867_RGMII_TX_CLK_DELAY_SHIFT));
+
+ phydev->drv->writeext(phydev, phydev->addr, DP83867_DEVADDR,
+ DP83867_RGMIIDCTL, val);
+
+ return 0;
+}
+
+/*!
+ * @brief HW_PMU_REG_HSIC_1P2 - Anadig 1.2V HSIC Regulator Control Register RW
+ *
+ * Reset value: 0x00001878U
+ *
+ * This register defines the control and status bits for the 1.1V regulator.
+ * This regulator is designed to power the digital portions of the
+ * analog cells.
+ */
+static inline void hsic_1p2_regulator_out(void)
+{
+ struct mxc_ccm_anatop_reg *ccm_anatop = (struct mxc_ccm_anatop_reg *)
+ ANATOP_BASE_ADDR;
+ /*
+ * allow the GPC to override register settings.
+ * use ANATOP_BASE_ADDR which is 0x30360000 instead of
+ * PMU_BASE (0x30360200)
+ */
+ writel(PMU_REG_HSIC_1P2_SET_OVERRIDE_MASK, \
+ &ccm_anatop->reg_hsic_1p2_set);
+}
+
+#define GPC_PGC_HSIC 0xd00
+#define GPC_PGC_CPU_MAPPING 0xec
+#define GPC_PU_PGC_SW_PUP_REQ 0xf8
+#define BM_CPU_PGC_SW_PDN_PUP_REQ_USB_HSIC_PHY 0x10
+#define USB_HSIC_PHY_A7_DOMAIN 0x40
+
+static int imx_set_usb_hsic_power(void)
+{
+ u32 reg;
+ u32 val;
+
+ writel(1, GPC_IPS_BASE_ADDR + GPC_PGC_HSIC);
+
+ reg = GPC_IPS_BASE_ADDR + GPC_PGC_CPU_MAPPING;
+ val = readl(reg);
+ val |= USB_HSIC_PHY_A7_DOMAIN;
+ writel(val, reg);
+
+ hsic_1p2_regulator_out();
+
+ reg = GPC_IPS_BASE_ADDR + GPC_PU_PGC_SW_PUP_REQ;
+ val = readl(reg);
+ val |= BM_CPU_PGC_SW_PDN_PUP_REQ_USB_HSIC_PHY;
+ writel(val, reg);
+
+ while ((readl(reg) &
+ BM_CPU_PGC_SW_PDN_PUP_REQ_USB_HSIC_PHY) != 0)
+ ;
+
+ writel(0, GPC_IPS_BASE_ADDR + GPC_PGC_HSIC);
+
+ return 0;
+}
+
+iomux_v3_cfg_t const mba7_usb_otg1_pads[] = {
+ MX7D_PAD_GPIO1_IO04__USB_OTG1_OC |
+ MUX_PAD_CTRL(USB_OC_PAD_CTRL),
+ MX7D_PAD_GPIO1_IO05__GPIO1_IO5 |
+ MUX_PAD_CTRL(GPIO_OUT_PAD_CTRL),
+};
+
+iomux_v3_cfg_t const mba7_usb_otg2_pads[] = {
+ MX7D_PAD_GPIO1_IO06__USB_OTG2_OC |
+ MUX_PAD_CTRL(USB_OC_PAD_CTRL),
+ MX7D_PAD_GPIO1_IO07__GPIO1_IO7 |
+ MUX_PAD_CTRL(GPIO_OUT_PAD_CTRL),
+};
+
+/*
+ * Use gpio instead of PWR as log as he ehci driver does not support
+ * board specific polarity
+ */
+#define MBA7_OTG1_PWR_GPIO IMX_GPIO_NR(1, 5)
+#define MBA7_OTG2_PWR_GPIO IMX_GPIO_NR(1, 7)
+
+static void mba7_setup_iomux_usb(void)
+{
+ int ret;
+
+ imx_iomux_v3_setup_multiple_pads(mba7_usb_otg1_pads,
+ ARRAY_SIZE(mba7_usb_otg1_pads));
+ ret = gpio_request(MBA7_OTG1_PWR_GPIO, "usb-otg1-pwr");
+ if (!ret)
+ gpio_direction_output(MBA7_OTG1_PWR_GPIO, 0);
+
+ imx_set_usb_hsic_power();
+
+ if (is_cpu_type(MXC_CPU_MX7S))
+ return;
+
+ imx_iomux_v3_setup_multiple_pads(mba7_usb_otg2_pads,
+ ARRAY_SIZE(mba7_usb_otg2_pads));
+ ret = gpio_request(MBA7_OTG2_PWR_GPIO, "usb-otg2-pwr");
+ if (!ret)
+ gpio_direction_output(MBA7_OTG2_PWR_GPIO, 0);
+}
+
+/*
+ * Force phy mode to host for all supported boards
+ * supporting gadget mode needs an USB VID
+ */
+int board_usb_phy_mode(int port)
+{
+ return USB_INIT_HOST;
+}
+
+int board_ehci_power(int port, int on)
+{
+ switch (port) {
+ case 0:
+ gpio_set_value(MBA7_OTG1_PWR_GPIO, on);
+ break;
+ case 1:
+ if (is_cpu_type(MXC_CPU_MX7S))
+ return -ENODEV;
+ gpio_set_value(MBA7_OTG2_PWR_GPIO, on);
+ break;
+ case 2:
+ break;
+ default:
+ return -ENODEV;
+ }
+ return 0;
+}
+
+static iomux_v3_cfg_t const mba7_uart6_pads[] = {
+ NEW_PAD_CTRL(MX7D_PAD_EPDC_DATA08__UART6_DCE_RX, UART_RX_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_EPDC_DATA09__UART6_DCE_TX, UART_TX_PAD_CTRL),
+};
+
+static void mba7_setup_iomuxc_uart(void)
+{
+ imx_iomux_v3_setup_multiple_pads(mba7_uart6_pads,
+ ARRAY_SIZE(mba7_uart6_pads));
+}
+
+static iomux_v3_cfg_t const mba7_usdhc1_pads[] = {
+ NEW_PAD_CTRL(MX7D_PAD_SD1_CLK__SD1_CLK, USDHC_CLK_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD1_CMD__SD1_CMD, USDHC_CMD_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD1_DATA0__SD1_DATA0, USDHC_DATA_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD1_DATA1__SD1_DATA1, USDHC_DATA_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD1_DATA2__SD1_DATA2, USDHC_DATA_PAD_CTRL),
+ NEW_PAD_CTRL(MX7D_PAD_SD1_DATA3__SD1_DATA3, USDHC_DATA_PAD_CTRL),
+ /* CD */
+ NEW_PAD_CTRL(MX7D_PAD_SD1_CD_B__GPIO5_IO0, GPIO_IN_PAD_CTRL),
+ /* WP */
+ NEW_PAD_CTRL(MX7D_PAD_SD1_WP__GPIO5_IO1, GPIO_IN_PAD_CTRL),
+};
+
+#define USDHC1_CD_GPIO IMX_GPIO_NR(5, 0)
+#define USDHC1_WP_GPIO IMX_GPIO_NR(5, 1)
+
+int tqc_bb_board_mmc_getcd(struct mmc *mmc)
+{
+ struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
+ int ret = 0;
+
+ if (cfg->esdhc_base == USDHC1_BASE_ADDR)
+ ret = !gpio_get_value(USDHC1_CD_GPIO);
+
+ return ret;
+}
+
+int tqc_bb_board_mmc_getwp(struct mmc *mmc)
+{
+ struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
+ int ret = 0;
+
+ if (cfg->esdhc_base == USDHC1_BASE_ADDR)
+ ret = gpio_get_value(USDHC1_WP_GPIO);
+
+ return ret;
+}
+
+static struct fsl_esdhc_cfg mba7_usdhc_cfg = {
+ .esdhc_base = USDHC1_BASE_ADDR,
+ .max_bus_width = 4,
+};
+
+int tqc_bb_board_mmc_init(bd_t *bis)
+{
+ imx_iomux_v3_setup_multiple_pads(mba7_usdhc1_pads,
+ ARRAY_SIZE(mba7_usdhc1_pads));
+ gpio_request(USDHC1_CD_GPIO, "usdhc1-cd");
+ gpio_request(USDHC1_WP_GPIO, "usdhc1-wp");
+ gpio_direction_input(USDHC1_CD_GPIO);
+ gpio_direction_input(USDHC1_WP_GPIO);
+
+ mba7_usdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
+ if (fsl_esdhc_initialize(bis, &mba7_usdhc_cfg))
+ puts("Warning: failed to initialize SD\n");
+
+ return 0;
+}
+
+int tqc_bb_board_early_init_f(void)
+{
+ mba7_setup_iomuxc_uart();
+
+ return 0;
+}
+
+int tqc_bb_board_init(void)
+{
+ /* do it here - to have reset completed */
+ mba7_setup_iomuxc_enet();
+ mba7_setup_fec(0);
+
+ if (!is_cpu_type(MXC_CPU_MX7S))
+ mba7_setup_fec(1);
+
+ mba7_setup_iomux_usb();
+
+ return 0;
+}
+
+static iomux_v3_cfg_t const mba7_wdog_pads[] = {
+ NEW_PAD_CTRL(MX7D_PAD_GPIO1_IO00__WDOG1_WDOG_B, WDOG_PAD_CTRL),
+};
+
+int tqc_bb_board_late_init(void)
+{
+ imx_iomux_v3_setup_multiple_pads(mba7_wdog_pads,
+ ARRAY_SIZE(mba7_wdog_pads));
+ set_wdog_reset((struct wdog_regs *)WDOG1_BASE_ADDR);
+
+ return 0;
+}
+
+const char *tqc_bb_get_boardname(void)
+{
+ return "MBa7";
+}
+
+int board_mmc_get_env_dev(int devno)
+{
+ int env_dev;
+ /*
+ * eMMC: USDHC3 -> 0
+ * SD: USDHC1 -> 1
+ */
+ switch (devno) {
+ case 2:
+ env_dev = 0;
+ break;
+ case 0:
+ env_dev = 1;
+ break;
+ default:
+ printf("mmc boot dev %d not supported, use default",
+ devno);
+ env_dev = 0;
+ };
+
+ return env_dev;
+}
+
+/*
+ * Device Tree Support
+ */
+#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
+void tqc_bb_ft_board_setup(void *blob, bd_t *bd)
+{
+}
+#endif /* defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) */
diff --git a/board/tqc/tqma7/tqma7d.cfg b/board/tqc/tqma7/tqma7d.cfg
new file mode 100644
index 0000000000..8c578c3f68
--- /dev/null
+++ b/board/tqc/tqma7/tqma7d.cfg
@@ -0,0 +1,68 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2016 Markus Niebel <Markus.Niebel at tq-group.com>
+ *
+ * Refer doc/README.imximage for more details about how-to configure
+ * and create imximage boot image
+ *
+ * The syntax is taken as close as possible with the kwbimage
+ */
+
+/* image version */
+IMAGE_VERSION 2
+
+#define __ASSEMBLY__
+#include <config.h>
+
+/*
+ * Boot Device : one of
+ * qspi, sd (the board has no nand neither onenand)
+ */
+#if defined(CONFIG_TQMA7_MMC_BOOT)
+BOOT_FROM sd
+#elif defined(CONFIG_TQMA7_QSPI_BOOT)
+BOOT_FROM qspi
+#endif
+
+#ifdef CONFIG_SECURE_BOOT
+CSF CONFIG_CSF_SIZE
+#endif
+
+/* TQMa7D DDR config */
+
+/*
+ * Device Configuration Data (DCD)
+ *
+ * Each entry must have the format:
+ * Addr-type Address Value
+ *
+ * where:
+ * Addr-type register length (1,2 or 4 bytes)
+ * Address absolute address of the register
+ * value value to be stored in the register
+ */
+
+/* IOMUXC_GPR_GPR1 */
+DATA 4 0x30340004 0x4F400005
+
+/* Clear then set bit30 to ensure exit from DDR retention */
+DATA 4 0x30360388 0x40000000
+DATA 4 0x30360384 0x40000000
+
+#if defined(CONFIG_TQMA7_512MB)
+#include "tqma7d_ddr_512mb.cfg"
+#elif defined(CONFIG_TQMA7_1GB)
+#include "tqma7d_ddr_1gb.cfg"
+#endif
+
+/* CCM_CCGRn */
+DATA 4 0x30384130 0x00000000
+/* IOMUXC_GPR_GPR8 */
+DATA 4 0x30340020 0x00000178
+/* CCM_CCGRn */
+DATA 4 0x30384130 0x00000002
+/* DDR_PHY_LP_CON0 */
+DATA 4 0x30790018 0x0000000f
+
+/* DDRC_STAT */
+CHECK_BITS_SET 4 0x307a0004 0x1
diff --git a/board/tqc/tqma7/tqma7d_ddr_1gb.cfg b/board/tqc/tqma7/tqma7d_ddr_1gb.cfg
new file mode 100644
index 0000000000..b1f4736714
--- /dev/null
+++ b/board/tqc/tqma7/tqma7d_ddr_1gb.cfg
@@ -0,0 +1,58 @@
+/* TQMa7x DRAM Timing REV0100 */
+/* DCD Code i.MX7D/S 528 MHz 1 GByte Samsung K4B4G1646D */
+DATA 4 0x30360070 0x0070302C /* CCM_ANALOG_PLL_DDRx */
+DATA 4 0x30360090 0x00000000 /* CCM_ANALOG_PLL_NUM */
+DATA 4 0x30360070 0x0060302C /* CCM_ANALOG_PLL_DDRx */
+CHECK_BITS_SET 4 0x30360070 0x80000000
+DATA 4 0x30391000 0x00000002 /* SRC_DDRC_RCR */
+DATA 4 0x307a0000 0x01040001 /* DDRC_MSTR */
+DATA 4 0x307a01a0 0x80400003 /* DDRC_DFIUPD0 */
+DATA 4 0x307a01a4 0x00100020 /* DDRC_DFIUPD1 */
+DATA 4 0x307a01a8 0x80100004 /* DDRC_DFIUPD2 */
+DATA 4 0x307a0064 0x00200045 /* DDRC_RFSHTMG */
+DATA 4 0x307a0490 0x00000001 /* DDRC_MP_PCTRL_0 */
+DATA 4 0x307a00d0 0x00020081 /* DDRC_INIT0 */
+DATA 4 0x307a00d4 0x00680000 /* DDRC_INIT1 */
+DATA 4 0x307a00dc 0x09300004 /* DDRC_INIT3 */
+DATA 4 0x307a00e0 0x00480000 /* DDRC_INIT4 */
+DATA 4 0x307a00e4 0x00100004 /* DDRC_INIT5 */
+DATA 4 0x307a00f4 0x0000033F /* DDRC_RANKCTL */
+DATA 4 0x307a0100 0x090E0809 /* DDRC_DRAMTMG0 */
+DATA 4 0x307a0104 0x0007020E /* DDRC_DRAMTMG1 */
+DATA 4 0x307a0108 0x03040407 /* DDRC_DRAMTMG2 */
+DATA 4 0x307a010c 0x00002006 /* DDRC_DRAMTMG3 */
+DATA 4 0x307a0110 0x04020304 /* DDRC_DRAMTMG4 */
+DATA 4 0x307a0114 0x03030202 /* DDRC_DRAMTMG5 */
+DATA 4 0x307a0120 0x00000803 /* DDRC_DRAMTMG8 */
+DATA 4 0x307a0180 0x00800020 /* DDRC_ZQCTL0 */
+DATA 4 0x307a0190 0x02098204 /* DDRC_DFITMG0 */
+DATA 4 0x307a0194 0x00030303 /* DDRC_DFITMG1 */
+DATA 4 0x307a0200 0x00000016 /* DDRC_ADDRMAP0 */
+DATA 4 0x307a0204 0x00171717 /* DDRC_ADDRMAP1 */
+DATA 5 0x307a0210 0x00000F0F /* DDRC_ADDRMAP4 */
+DATA 4 0x307a0214 0x04040404 /* DDRC_ADDRMAP5 */
+DATA 4 0x307a0218 0x0F040404 /* DDRC_ADDRMAP6 */
+DATA 4 0x307a0240 0x06000604 /* DDRC_ODTCFG */
+DATA 4 0x307a0244 0x00000001 /* DDRC_ODTMAP */
+DATA 4 0x30391000 0x00000000 /* SRC_DDRC_RCR */
+DATA 4 0x30790000 0x17420F40 /* DDR_PHY_PHY_CON0 */
+DATA 4 0x30790004 0x10210100 /* DDR_PHY_PHY_CON1 */
+DATA 4 0x30790010 0x00060807 /* DDR_PHY_PHY_CON4 */
+DATA 4 0x307900b0 0x1010007E /* DDR_PHY_MDLL_CON0 */
+DATA 4 0x3079009c 0x00000924 /* DDR_PHY_DRVDS_CON0 */
+/* DDR_PHY_CMD_DESKEW_CON0 */
+/* DDR_PHY_CMD_DESKEW_CON1 */
+/* DDR_PHY_CMD_DESKEW_CON2 */
+/* DDR_PHY_CMD_DESKEW_CON3 */
+/* DDR_PHY_LVL_CON0 */
+DATA 4 0x30790020 0x0B0B0B0B /* DDR_PHY_OFFSET_RD_CON0 */
+DATA 4 0x30790030 0x06060606 /* DDR_PHY_OFFSET_WR_CON0 */
+DATA 4 0x30790050 0x01000010 /* DDR_PHY_CMD_SDLL_CON0 */
+DATA 4 0x30790050 0x00000010 /* DDR_PHY_CMD_SDLL_CON0 */
+
+DATA 4 0x307900c0 0x0C407304 /* DDR_PHY_ZQ_CON0 */
+DATA 4 0x307900c0 0x0C447304 /* DDR_PHY_ZQ_CON0 */
+DATA 4 0x307900c0 0x0C447306 /* DDR_PHY_ZQ_CON0 */
+CHECK_BITS_SET 4 0x307900c4 0x1 /* ZQ Calibration is finished */
+DATA 4 0x307900c0 0x0C447304 /* DDR_PHY_ZQ_CON0 */
+DATA 4 0x307900c0 0x0C407304 /* DDR_PHY_ZQ_CON0 */
diff --git a/board/tqc/tqma7/tqma7d_ddr_512mb.cfg b/board/tqc/tqma7/tqma7d_ddr_512mb.cfg
new file mode 100644
index 0000000000..79a5b18712
--- /dev/null
+++ b/board/tqc/tqma7/tqma7d_ddr_512mb.cfg
@@ -0,0 +1,58 @@
+/* TQMa7x DRAM Timing REV0100 */
+/* DCD Code i.MX7D/S 528 MHz 512 MByte Samsung K4B2G1646F */
+DATA 4 0x30360070 0x0070302C /* CCM_ANALOG_PLL_DDRx */
+DATA 4 0x30360090 0x00000000 /* CCM_ANALOG_PLL_NUM */
+DATA 4 0x30360070 0x0060302C /* CCM_ANALOG_PLL_DDRx */
+CHECK_BITS_SET 4 0x30360070 0x80000000
+DATA 4 0x30391000 0x00000002 /* SRC_DDRC_RCR */
+DATA 4 0x307a0000 0x01040001 /* DDRC_MSTR */
+DATA 4 0x307a01a0 0x80400003 /* DDRC_DFIUPD0 */
+DATA 4 0x307a01a4 0x00100020 /* DDRC_DFIUPD1 */
+DATA 4 0x307a01a8 0x80100004 /* DDRC_DFIUPD2 */
+DATA 4 0x307a0064 0x0020005B /* DDRC_RFSHTMG */
+DATA 4 0x307a0490 0x00000001 /* DDRC_MP_PCTRL_0 */
+DATA 4 0x307a00d0 0x00020081 /* DDRC_INIT0 */
+DATA 4 0x307a00d4 0x00680000 /* DDRC_INIT1 */
+DATA 4 0x307a00dc 0x09300004 /* DDRC_INIT3 */
+DATA 4 0x307a00e0 0x00480000 /* DDRC_INIT4 */
+DATA 4 0x307a00e4 0x00100004 /* DDRC_INIT5 */
+DATA 4 0x307a00f4 0x0000033F /* DDRC_RANKCTL */
+DATA 4 0x307a0100 0x090E0809 /* DDRC_DRAMTMG0 */
+DATA 4 0x307a0104 0x0007020E /* DDRC_DRAMTMG1 */
+DATA 4 0x307a0108 0x03040407 /* DDRC_DRAMTMG2 */
+DATA 4 0x307a010c 0x00002006 /* DDRC_DRAMTMG3 */
+DATA 4 0x307a0110 0x04020304 /* DDRC_DRAMTMG4 */
+DATA 4 0x307a0114 0x03030202 /* DDRC_DRAMTMG5 */
+DATA 4 0x307a0120 0x00000803 /* DDRC_DRAMTMG8 */
+DATA 4 0x307a0180 0x00800020 /* DDRC_ZQCTL0 */
+DATA 4 0x307a0190 0x02098204 /* DDRC_DFITMG0 */
+DATA 4 0x307a0194 0x00030303 /* DDRC_DFITMG1 */
+DATA 4 0x307a0200 0x00000015 /* DDRC_ADDRMAP0 */
+DATA 4 0x307a0204 0x00161616 /* DDRC_ADDRMAP1 */
+DATA 5 0x307a0210 0x00000F0F /* DDRC_ADDRMAP4 */
+DATA 4 0x307a0214 0x04040404 /* DDRC_ADDRMAP5 */
+DATA 4 0x307a0218 0x0F0F0404 /* DDRC_ADDRMAP6 */
+DATA 4 0x307a0240 0x06000604 /* DDRC_ODTCFG */
+DATA 4 0x307a0244 0x00000001 /* DDRC_ODTMAP */
+DATA 4 0x30391000 0x00000000 /* SRC_DDRC_RCR */
+DATA 4 0x30790000 0x17420F40 /* DDR_PHY_PHY_CON0 */
+DATA 4 0x30790004 0x10210100 /* DDR_PHY_PHY_CON1 */
+DATA 4 0x30790010 0x00060807 /* DDR_PHY_PHY_CON4 */
+DATA 4 0x307900b0 0x1010007E /* DDR_PHY_MDLL_CON0 */
+DATA 4 0x3079009c 0x00000924 /* DDR_PHY_DRVDS_CON0 */
+/* DDR_PHY_CMD_DESKEW_CON0 */
+/* DDR_PHY_CMD_DESKEW_CON1 */
+/* DDR_PHY_CMD_DESKEW_CON2 */
+/* DDR_PHY_CMD_DESKEW_CON3 */
+/* DDR_PHY_LVL_CON0 */
+DATA 4 0x30790020 0x0B0B0B0B /* DDR_PHY_OFFSET_RD_CON0 */
+DATA 4 0x30790030 0x06060606 /* DDR_PHY_OFFSET_WR_CON0 */
+DATA 4 0x30790050 0x01000010 /* DDR_PHY_CMD_SDLL_CON0 */
+DATA 4 0x30790050 0x00000010 /* DDR_PHY_CMD_SDLL_CON0 */
+
+DATA 4 0x307900c0 0x0C407304 /* DDR_PHY_ZQ_CON0 */
+DATA 4 0x307900c0 0x0C447304 /* DDR_PHY_ZQ_CON0 */
+DATA 4 0x307900c0 0x0C447306 /* DDR_PHY_ZQ_CON0 */
+CHECK_BITS_SET 4 0x307900c4 0x1 /* ZQ Calibration is finished */
+DATA 4 0x307900c0 0x0C447304 /* DDR_PHY_ZQ_CON0 */
+DATA 4 0x307900c0 0x0C407304 /* DDR_PHY_ZQ_CON0 */
diff --git a/configs/tqma7d_1gb_mba7_mmc_defconfig b/configs/tqma7d_1gb_mba7_mmc_defconfig
new file mode 100644
index 0000000000..97bbcbadb6
--- /dev/null
+++ b/configs/tqma7d_1gb_mba7_mmc_defconfig
@@ -0,0 +1,50 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX7=y
+CONFIG_SYS_TEXT_BASE=0xbfc00000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_TARGET_TQMA7=y
+CONFIG_TQMA7_1GB=y
+CONFIG_DEFAULT_FDT_FILE="imx7d-mba7.dtb"
+CONFIG_BOARD_EARLY_INIT_F=y
+CONFIG_DISPLAY_CPUINFO=y
+# CONFIG_DM_GPIO is not set
+# CONFIG_DM_MMC is not set
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
+CONFIG_CMD_MEMTEST=y
+CONFIG_CMD_MEMINFO=y
+# CONFIG_CMD_FLASH is not set
+CONFIG_CMD_I2C=y
+# CONFIG_CMD_USB is not set
+# CONFIG_CMD_FPGA is not set
+# CONFIG_CMD_GPIO is not set
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_TIMER=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_TPM=y
+CONFIG_CMD_TPM_V2=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_BMODE=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_SYS_I2C_MXC=y
+CONFIG_SYS_I2C_MXC_I2C1=y
+CONFIG_SYS_I2C_MXC_I2C2=y
+CONFIG_HUSH_PARSER=y
+# CONFIG_DM_WARN is not set
+# CONFIG_DM_DEVICE_REMOVE is not set
+# CONFIG_DM_STDIO is not set
+# CONFIG_DISK is not set
+# CONFIG_SPI_FLASH is not set
+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
+CONFIG_FS_EXT4=y
+CONFIG_CC_OPTIMIZE_LIBS_FOR_SPEED=y
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_FSL_ESDHC=y
+CONFIG_OF_LIBFDT=y
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_SUPPORT_EMMC_RPMB=y
diff --git a/include/configs/tqma7.h b/include/configs/tqma7.h
new file mode 100644
index 0000000000..3771914d4d
--- /dev/null
+++ b/include/configs/tqma7.h
@@ -0,0 +1,426 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2016-2018 TQ Systems GmbH
+ * Copyright (C) 2019 Bruno Thomsen <bruno.thomsen at gmail.com>
+ * Configuration settings for the TQ Systems TQMa7x SoM
+ */
+
+#ifndef __TQMA7_CONFIG_H
+#define __TQMA7_CONFIG_H
+
+#include <linux/kconfig.h>
+
+#include <asm/arch/imx-regs.h>
+#include <asm/mach-imx/gpio.h>
+#include <linux/sizes.h>
+#include "mx7_common.h"
+
+#if defined(CONFIG_DISPLAY_BOARDINFO)
+#undef CONFIG_DISPLAY_BOARDINFO
+#endif
+#define CONFIG_DISPLAY_BOARDINFO_LATE
+
+/* uncomment for SECURE mode support */
+/* #define CONFIG_SECURE_BOOT */
+
+#ifdef CONFIG_SECURE_BOOT
+#ifndef CONFIG_CSF_SIZE
+#define CONFIG_CSF_SIZE 0x4000
+#endif
+#endif
+
+#define CONFIG_CMDLINE_TAG
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_INITRD_TAG
+#define CONFIG_REVISION_TAG
+
+#define CONFIG_BOARD_LATE_INIT
+
+#define CONFIG_MXC_UART
+
+/* Allow overwrite of serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+#define CONFIG_CONS_INDEX 1
+#define CONFIG_BAUDRATE 115200
+
+/* I2C */
+#define CONFIG_SYS_I2C
+#define CONFIG_SYS_I2C_SPEED 100000
+
+/* PMIC */
+#define CONFIG_POWER
+#define CONFIG_POWER_I2C
+#define CONFIG_POWER_PFUZE3000
+#define CONFIG_POWER_PFUZE3000_I2C_ADDR 0x08
+
+/* MMC Configs, other options from mx7_common */
+#define CONFIG_SYS_FSL_ESDHC_ADDR 0
+
+#if defined(CONFIG_TQMA7_512MB)
+#define PHYS_SDRAM_SIZE SZ_512M
+#elif defined(CONFIG_TQMA7_1GB)
+#define PHYS_SDRAM_SIZE SZ_1G
+#endif
+
+#define CONFIG_FEC_MXC
+#define CONFIG_PHYLIB
+#define CONFIG_MII
+
+#if !defined(CONFIG_SYS_BOOTM_LEN) || (CONFIG_SYS_BOOTM_LEN < SZ_16M)
+#undef CONFIG_SYS_BOOTM_LEN
+#define CONFIG_SYS_BOOTM_LEN SZ_16M
+#endif
+
+#undef CONFIG_BOOTM_NETBSD
+#undef CONFIG_BOOTM_PLAN9
+#undef CONFIG_BOOTM_RTEMS
+
+#if defined(CONFIG_LOADADDR) && (CONFIG_LOADADDR < 0x82000000)
+#undef CONFIG_LOADADDR
+#endif
+#define CONFIG_LOADADDR 0x82000000
+
+#define CONFIG_ENV_SIZE (SZ_8K)
+/* Size of malloc() pool */
+#define CONFIG_SYS_MALLOC_LEN (32 * SZ_1M)
+
+/*
+ * above 128 MiB offset as in ARM related docu for linux suggested
+ * DTB is loaded at 128 MiB, so use just 16 MiB more
+ */
+#define TQMA7_INITRD_ADDRESS 0x89000000
+
+#define TQMA7_MFG_ENV_SETTINGS \
+ "mfgtool_args=setenv bootargs console=" CONSOLE_DEV ",115200 " \
+ "rdinit=/linuxrc " \
+ "g_mass_storage.stall=0 g_mass_storage.removable=1 " \
+ "g_mass_storage.file=/fat g_mass_storage.ro=1 " \
+ "g_mass_storage.idVendor=0x066F " \
+ "g_mass_storage.idProduct=0x37FF " \
+ "g_mass_storage.iSerialNumber=\"\" " \
+ "enable_wait_mode=off " \
+ "\0" \
+ "initrd_addr=" __stringify(TQMA7_INITRD_ADDRESS) "\0" \
+ "initrd_high=0xffffffff\0" \
+ "bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} " \
+ "${initrd_addr} ${fdt_addr};\0"
+
+#if defined(CONFIG_TQMA7_MMC_BOOT)
+
+#define CONFIG_SYS_MMC_ENV_DEV -1
+#define TQMA7_UBOOT_OFFSET SZ_1K
+#define TQMA7_UBOOT_SECTOR_START 0x2
+#define TQMA7_UBOOT_SECTOR_COUNT 0x7fe
+
+#define CONFIG_ENV_OFFSET SZ_1M
+
+#define TQMA7_EXTRA_BOOTDEV_ENV_SETTINGS \
+ "uboot_start=" __stringify(TQMA7_UBOOT_SECTOR_START) "\0" \
+ "uboot_size=" __stringify(TQMA7_UBOOT_SECTOR_COUNT) "\0" \
+ "mmcdev=1\0" \
+ "firmwarepart=1\0" \
+ "loadimage=run kernel_name; " \
+ "fatload mmc ${mmcdev}:${firmwarepart} " \
+ "${loadaddr} ${kernel}\0" \
+ "loadfdt=fatload mmc ${mmcdev}:${firmwarepart} " \
+ "${fdt_addr} ${fdt_file}\0" \
+ "update_uboot=run set_getcmd; " \
+ "if ${getcmd} ${uboot}; then " \
+ "if itest ${filesize} > 0; then " \
+ "mmc dev ${mmcdev}; mmc rescan; " \
+ "setexpr blkc ${filesize} + 0x1ff; " \
+ "setexpr blkc ${blkc} / 0x200; " \
+ "if itest ${blkc} <= ${uboot_size}; then " \
+ "mmc write ${loadaddr} ${uboot_start} "\
+ "${blkc}; " \
+ "fi; " \
+ "fi; " \
+ "fi; " \
+ "setenv filesize; setenv blkc; setenv getcmd \0" \
+ "update_kernel=run kernel_name; run set_getcmd; " \
+ "if ${getcmd} ${kernel}; then " \
+ "if itest ${filesize} > 0; then " \
+ "mmc dev ${mmcdev}; mmc rescan; " \
+ "echo Write kernel image to mmc " \
+ "${mmcdev}:${firmwarepart}...; " \
+ "save mmc ${mmcdev}:${firmwarepart} " \
+ "${loadaddr} ${kernel} ${filesize}; " \
+ "fi; " \
+ "fi; " \
+ "setenv filesize; setenv getcmd \0" \
+ "update_fdt=run set_getcmd; " \
+ "if ${getcmd} ${fdt_file}; then " \
+ "if itest ${filesize} > 0; then " \
+ "mmc dev ${mmcdev}; mmc rescan; " \
+ "echo Write fdt image to mmc "\
+ "${mmcdev}:${firmwarepart}...; " \
+ "save mmc ${mmcdev}:${firmwarepart} "\
+ "${loadaddr} ${fdt_file} ${filesize}; "\
+ "fi; " \
+ "fi; " \
+ "setenv filesize; setenv getcmd \0"
+
+#define CONFIG_BOOTCOMMAND \
+ "run mmcboot; run netboot; run panicboot"
+
+#elif defined(CONFIG_TQMA7_QSPI_BOOT)
+
+#define TQMA7_SPI_FLASH_SECTOR_SIZE SZ_64K
+
+#define TQMA7_UBOOT_OFFSET SZ_4K
+#define TQMA7_UBOOT_SECTOR_START 0x0
+/* max u-boot size: 832kiB */
+#define TQMA7_UBOOT_SECTOR_SIZE TQMA7_SPI_FLASH_SECTOR_SIZE
+#define TQMA7_UBOOT_SECTOR_COUNT 13
+#define TQMA7_UBOOT_SIZE (TQMA7_UBOOT_SECTOR_SIZE * \
+ TQMA7_UBOOT_SECTOR_COUNT)
+
+#define CONFIG_ENV_IS_IN_SPI_FLASH
+#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
+#define CONFIG_ENV_OFFSET (TQMA7_UBOOT_SIZE)
+#define CONFIG_ENV_SECT_SIZE TQMA7_SPI_FLASH_SECTOR_SIZE
+#define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET + \
+ CONFIG_ENV_SECT_SIZE)
+
+#define CONFIG_ENV_SPI_BUS (CONFIG_SF_DEFAULT_BUS)
+#define CONFIG_ENV_SPI_CS (CONFIG_SF_DEFAULT_CS)
+#define CONFIG_ENV_SPI_MAX_HZ (CONFIG_SF_DEFAULT_SPEED)
+#define CONFIG_ENV_SPI_MODE (CONFIG_SF_DEFAULT_MODE)
+
+#define TQMA7_EXTRA_BOOTDEV_ENV_SETTINGS \
+ "mmcblkdev=1\0" \
+ "update_uboot=run set_getcmd; if ${getcmd} ${uboot}; then " \
+ "if itest ${filesize} > 0; then " \
+ "sf probe 0; " \
+ "sf update ${loadaddr} ${uboot_mtdpart} ${filesize}; " \
+ "fi; fi; " \
+ "setenv filesize; setenv getcmd \0" \
+ "update_kernel=run kernel_name; run set_getcmd; " \
+ "if ${getcmd} ${kernel}; then " \
+ "if itest ${filesize} > 0; then " \
+ "sf probe 0; " \
+ "sf update ${loadaddr} ${kernel_mtdpart} " \
+ "${filesize};" \
+ "fi; fi; " \
+ "setenv filesize; setenv getcmd; setenv kernel \0" \
+ "update_fdt=run set_getcmd; if ${getcmd} ${fdt_file}; then " \
+ "if itest ${filesize} > 0; then " \
+ "sf probe 0; " \
+ "sf update ${loadaddr} ${fdt_mtdpart} ${filesize}; " \
+ "fi; fi; " \
+ "setenv filesize; setenv getcmd \0" \
+ "loadimage=sf probe 0; sf read ${loadaddr} ${kernel_mtdpart}\0" \
+ "loadfdt=sf probe 0; sf read ${fdt_addr} ${fdt_mtdpart}\0"
+
+#define CONFIG_BOOTCOMMAND "sf probe; run qspiboot; run netboot; run panicboot"
+
+#else
+
+#error "need to define boot source"
+
+#endif
+
+#ifdef CONFIG_SYS_USE_QSPI
+/* Set to QSPI1 A flash, offset 1M */
+#define CONFIG_SYS_AUXCORE_BOOTDATA 0x60100000
+#else
+/* Set to TCML address */
+#define CONFIG_SYS_AUXCORE_BOOTDATA 0x7F8000
+#endif
+
+/* 128 MiB offset as in ARM related docu for linux suggested */
+#define TQMA7_FDT_ADDRESS 0x88000000
+
+/* set to a resonable value, changeable by user */
+#define TQMA7_CMA_SIZE 32M
+
+#if defined(CONFIG_DEFAULT_FDT_FILE)
+#define TQMA7_FDT_FILE_ENV "fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0"
+#else
+#define TQMA7_FDT_FILE_ENV
+#endif
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "board=TQMa7D\0" \
+ "boardtype=TQMa7D-AB.0201\0" \
+ "boot_dev=mmc\0" \
+ "ethact=\"FEC0\"\0" \
+ "fdt_file=\"imx7d-mba7.dtb\"\0" \
+ "uimage=uImage\0" \
+ "zimage=linuximage\0" \
+ "boot_type=bootz\0" \
+ "kernel_name=if test \"${boot_type}\" != bootz; then " \
+ "setenv kernel ${uimage}; " \
+ "else setenv kernel ${zimage}; fi\0" \
+ "uboot=u-boot.imx\0" \
+ TQMA7_FDT_FILE_ENV \
+ "fdt_addr=" __stringify(TQMA7_FDT_ADDRESS) "\0" \
+ "console=" CONSOLE_DEV "\0" \
+ "cma_size=" __stringify(TQMA7_CMA_SIZE) "\0" \
+ "fdt_high=0xffffffff\0" \
+ "initrd_high=0xffffffff\0" \
+ "rootfsmode=ro\0" \
+ "addcma=setenv bootargs ${bootargs} cma=${cma_size}\0" \
+ "addtty=setenv bootargs ${bootargs} console=${console},${baudrate} " \
+ "consoleblank=0\0" \
+ "mmcpart=5\0" \
+ "mmcblkdev=1\0" \
+ "mmcargs=run addmmc addtty addcma\0" \
+ "addmmc=setenv bootargs ${bootargs} " \
+ "root=/dev/mmcblk${mmcblkdev}p${mmcpart} ${rootfsmode} " \
+ "rootwait\0" \
+ "mmcboot=echo Booting from mmc ...; " \
+ "setenv bootargs; " \
+ "run boot_setup_var;" \
+ "run boot_find_firmware;" \
+ "run boot_save_env;" \
+ "run mmcargs; " \
+ "if run loadimage; then " \
+ "if run loadfdt; then " \
+ "echo boot device tree kernel ...; " \
+ "${boot_type} ${loadaddr} - ${fdt_addr}; " \
+ "fi; " \
+ "else " \
+ "${boot_type}; " \
+ "fi;\0" \
+ "setenv bootargs \0" \
+ "qspiboot=echo Booting from qspi ...; " \
+ "setenv bootargs; " \
+ "run qspiargs; " \
+ "if run loadimage; then " \
+ "if run loadfdt; then " \
+ "echo boot device tree kernel ...; " \
+ "${boot_type} ${loadaddr} - ${fdt_addr}; " \
+ "fi; " \
+ "else " \
+ "${boot_type}; " \
+ "fi;\0" \
+ "setenv bootargs \0" \
+ "netdev=eth0\0" \
+ "rootpath=/srv/nfs/tqma6\0" \
+ "ipmode=static\0" \
+ "netargs=run addnfs addip addtty addcma\0" \
+ "addnfs=setenv bootargs ${bootargs} " \
+ "root=/dev/nfs rw " \
+ "nfsroot=${serverip}:${rootpath},v3,tcp;\0" \
+ "addip_static=setenv bootargs ${bootargs} " \
+ "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:" \
+ "${hostname}:${netdev}:off\0" \
+ "addip_dynamic=setenv bootargs ${bootargs} ip=dhcp\0" \
+ "addip=if test \"${ipmode}\" != static; then " \
+ "run addip_dynamic; else run addip_static; fi\0" \
+ "set_getcmd=if test \"${ipmode}\" != static; then " \
+ "setenv getcmd dhcp; setenv autoload yes; " \
+ "else setenv getcmd tftp; setenv autoload no; fi\0" \
+ "netboot=echo Booting from net ...; " \
+ "run kernel_name; " \
+ "run set_getcmd; " \
+ "setenv bootargs; " \
+ "run netargs; " \
+ "if ${getcmd} ${fdt_addr} ${fdt_file}; then " \
+ "if ${getcmd} ${loadaddr} ${kernel}; then " \
+ "${boot_type} ${loadaddr} - ${fdt_addr}; " \
+ "fi; " \
+ "fi; " \
+ "echo ... failed\0" \
+ "panicboot=echo No boot device !!! reset\0" \
+ "rootfs_mtddev=5\0" \
+ "addqspi=setenv bootargs ${bootargs} root=ubi0:root ${rootfsmode} " \
+ "rootfstype=ubifs ubi.mtd=${rootfs_mtddev}\0" \
+ "qspiargs=run addqspi addtty addcma\0" \
+ "uboot_mtdpart=U-Boot\0" \
+ "fdt_mtdpart=DTB\0" \
+ "kernel_mtdpart=Linux\0" \
+ "rootfs_mtdpart=RootFS\0" \
+ "boot_setup_var=test -n ${BOOT_ORDER} || setenv BOOT_ORDER \"A B\";" \
+ "test -n \"${BOOT_A_LEFT}\" || setenv BOOT_A_LEFT 3; " \
+ "test -n \"${BOOT_B_LEFT}\" || setenv BOOT_B_LEFT 3; " \
+ "test -n \"${BOOT_B_LEFT}\" || setenv BOOT_B_LEFT 3;" \
+ "setenv bootargs;\0" \
+ "boot_find_firmware=for BOOT_SLOT in \"${BOOT_ORDER}\"; do" \
+ "if test \"x${bootargs}\" = \"x\"; then" \
+ "if test \"x${BOOT_SLOT}\" = \"xA\"; then" \
+ "if test ${BOOT_A_LEFT} -gt 0; then" \
+ "echo \"Found valid slot A, ${BOOT_A_LEFT} attempts remaining\"; " \
+ "setenv firmwarepart \"1\";" \
+ "setenv mmcpart \"5\";" \
+ "setenv bootargs \"rauc.slot=A\";" \
+ "setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1;" \
+ "fi;" \
+ "elif test \"x${BOOT_SLOT}\" = \"xB\"; then" \
+ "if test ${BOOT_B_LEFT} -gt 0; then" \
+ "echo \"Found valid slot B, ${BOOT_B_LEFT} attempts remaining\";" \
+ "setenv firmwarepart \"2\";" \
+ "setenv mmcpart \"6\";" \
+ "setenv bootargs \"rauc.slot=B\";" \
+ "setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1;" \
+ "fi;" \
+ "fi;" \
+ "fi;" \
+ "done;\0 " \
+ "boot_save_env=if test -n \"${bootargs}\"; then" \
+ "saveenv;" \
+ "else" \
+ "echo \"No valid slot found, resetting tries to 3\";" \
+ "setenv BOOT_A_LEFT 3;" \
+ "setenv BOOT_B_LEFT 3;" \
+ "saveenv; " \
+ "reset; " \
+ "fi;\0 " \
+ "mtdparts=" MTDPARTS_DEFAULT "\0" \
+ TQMA7_EXTRA_BOOTDEV_ENV_SETTINGS \
+ TQMA7_MFG_ENV_SETTINGS \
+
+/* Miscellaneous configurable options */
+
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
+
+#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
+
+#if defined(CONFIG_CMD_MEMTEST)
+/*
+ * config alternate mtest:
+ * enable 3/4 of RAM to test
+ * U-Boot is relocated to the end of RAM
+ */
+#define CONFIG_SYS_ALT_MEMTEST
+#define CONFIG_SYS_MEMTEST_START CONFIG_SYS_SDRAM_BASE
+#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + \
+ (PHYS_SDRAM_SIZE) / 4 * 3)
+#define CONFIG_SYS_MEMTEST_SCRATCH CONFIG_SYS_MEMTEST_END
+#endif
+
+/* Physical Memory Map */
+#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR
+
+#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
+#define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR
+#define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE
+
+#define CONFIG_SYS_INIT_SP_OFFSET \
+ (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_ADDR \
+ (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
+
+#ifndef CONFIG_SYS_DCACHE_OFF
+#define CONFIG_CMD_CACHE
+#endif
+
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV
+
+#define CONFIG_IMX_THERMAL
+
+/*
+ * All the defines above are for the TQMa7 SoM
+ *
+ * Now include the baseboard specific configuration
+ */
+#undef CONFIG_MXC_UART_BASE
+
+#ifdef CONFIG_MBA7
+#include "tqma7_mba7.h"
+#else
+#error "No baseboard for the TQMa7 SoM defined!"
+#endif
+
+#endif /* __TQMA7_CONFIG_H */
diff --git a/include/configs/tqma7_mba7.h b/include/configs/tqma7_mba7.h
new file mode 100644
index 0000000000..0e562bff08
--- /dev/null
+++ b/include/configs/tqma7_mba7.h
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2016-2018 Markus Niebel <Markus.Niebel at tq-group.com>
+ * Copyright (C) 2019 Bruno Thomsen <bruno.thomsen at gmail.com>
+ *
+ * Configuration settings for the TQ Systems MBa7x carrier board
+ * for TQMa7x module.
+ */
+
+#ifndef __CONFIG_TQMA7_MBA7_H
+#define __CONFIG_TQMA7_MBA7_H
+
+#define CONFIG_FEC_XCV_TYPE RGMII
+#define CONFIG_ETHPRIME "FEC"
+#define CONFIG_PHY_TI
+
+#define TQMA7_ENET1_PHYADDR 0x00
+#define TQMA7_ENET2_PHYADDR 0x00
+
+#define CONFIG_MXC_UART_BASE UART6_IPS_BASE_ADDR
+#define CONSOLE_DEV "ttymxc5"
+
+#define MTDIDS_DEFAULT \
+ "nor0=nor0\0"
+
+#define MTDPARTS_DEFAULT \
+ "mtdparts=nor0:" \
+ "832k at 0k(U-Boot)," \
+ "64k at 832k(ENV1)," \
+ "64k at 896k(ENV2)," \
+ "64k at 960k(DTB)," \
+ "7M at 1M(Linux)," \
+ "56M at 8M(RootFS)" \
+
+#endif /* __CONFIG_TQMA7_MBA7_H */
--
2.20.1
More information about the U-Boot
mailing list