From 79b4ec27baab7f03640a62fec181185a1e2954ec Mon Sep 17 00:00:00 2001
From: Troy Kisky <troy.kisky@boundarydevices.com>
Date: Fri, 26 Jan 2018 18:10:03 -0800
Subject: [PATCH] nitrogen51_e: initial addition, Boundary Devices board

nitrogen51_e: MAINTAINERS: s/NITROGEN6_VM/NITROGEN6_E/
nitrogen51_e: add comment for ddr
nitrogen51_e: port to v2018.07

Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com>
---
 arch/arm/mach-imx/mx5/Kconfig                 |   5 +
 board/boundary/nitrogen51_e/Kconfig           |  24 +
 board/boundary/nitrogen51_e/MAINTAINERS       |   7 +
 board/boundary/nitrogen51_e/Makefile          |   7 +
 board/boundary/nitrogen51_e/nitrogen51_e.c    | 598 ++++++++++++++++++
 board/boundary/nitrogen51_e/nitrogen51_e.cfg  | 140 ++++
 .../nitrogen_bootscript_upgrade.txt           | 128 ++++
 configs/nitrogen51_e_256m_defconfig           |  70 ++
 configs/nitrogen51_e_512m_defconfig           |  70 ++
 configs/nitrogen51_e_rev0_256m_defconfig      |  68 ++
 configs/nitrogen51_e_rev0_512m_defconfig      |  68 ++
 include/configs/nitrogen51_e.h                | 129 ++++
 12 files changed, 1314 insertions(+)
 create mode 100644 board/boundary/nitrogen51_e/Kconfig
 create mode 100644 board/boundary/nitrogen51_e/MAINTAINERS
 create mode 100644 board/boundary/nitrogen51_e/Makefile
 create mode 100644 board/boundary/nitrogen51_e/nitrogen51_e.c
 create mode 100644 board/boundary/nitrogen51_e/nitrogen51_e.cfg
 create mode 100644 board/boundary/nitrogen51_e/nitrogen_bootscript_upgrade.txt
 create mode 100644 configs/nitrogen51_e_256m_defconfig
 create mode 100644 configs/nitrogen51_e_512m_defconfig
 create mode 100644 configs/nitrogen51_e_rev0_256m_defconfig
 create mode 100644 configs/nitrogen51_e_rev0_512m_defconfig
 create mode 100644 include/configs/nitrogen51_e.h

diff --git a/arch/arm/mach-imx/mx5/Kconfig b/arch/arm/mach-imx/mx5/Kconfig
index 3654670442f..3b597676d9d 100644
--- a/arch/arm/mach-imx/mx5/Kconfig
+++ b/arch/arm/mach-imx/mx5/Kconfig
@@ -73,12 +73,17 @@ config TARGET_USBARMORY
 	bool "Support USB armory"
 	select MX53
 
+config TARGET_NITROGEN51_E
+	bool "Support Boundary Devices nitrogen51_e board"
+	select CPU_V7
+
 endchoice
 
 config SYS_SOC
 	default "mx5"
 
 source "board/beckhoff/mx53cx9020/Kconfig"
+source "board/boundary/nitrogen51_e/Kconfig"
 source "board/freescale/mx51evk/Kconfig"
 source "board/freescale/mx53ard/Kconfig"
 source "board/freescale/mx53evk/Kconfig"
diff --git a/board/boundary/nitrogen51_e/Kconfig b/board/boundary/nitrogen51_e/Kconfig
new file mode 100644
index 00000000000..7d3ff6b71d4
--- /dev/null
+++ b/board/boundary/nitrogen51_e/Kconfig
@@ -0,0 +1,24 @@
+if TARGET_NITROGEN51_E
+
+config SYS_CPU
+	default "armv7"
+
+config SYS_BOARD
+	default "nitrogen51_e"
+
+config SYS_VENDOR
+	default "boundary"
+
+config SYS_SOC
+	default "mx5"
+
+config SYS_CONFIG_NAME
+	default "nitrogen51_e"
+
+config BOARD_LATE_SPECIFIC_INIT
+	bool
+	default	y
+
+source "board/boundary/common/Kconfig"
+
+endif
diff --git a/board/boundary/nitrogen51_e/MAINTAINERS b/board/boundary/nitrogen51_e/MAINTAINERS
new file mode 100644
index 00000000000..1bbd28a4b41
--- /dev/null
+++ b/board/boundary/nitrogen51_e/MAINTAINERS
@@ -0,0 +1,7 @@
+NITROGEN6_E BOARD
+M:	Troy Kisky <troy.kisky@boundarydevices.com>
+S:	Maintained
+F:	board/boundary/nitrogen51_e/
+F:	include/configs/nitrogen51_e.h
+F:	configs/nitrogen51_e_256m_defconfig
+F:	configs/nitrogen51_e_512m_defconfig
diff --git a/board/boundary/nitrogen51_e/Makefile b/board/boundary/nitrogen51_e/Makefile
new file mode 100644
index 00000000000..5c37d638065
--- /dev/null
+++ b/board/boundary/nitrogen51_e/Makefile
@@ -0,0 +1,7 @@
+#
+# Copyright (C) 2018, Boundary Devices <info@boundarydevices.com>
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
+
+obj-y  := nitrogen51_e.o
diff --git a/board/boundary/nitrogen51_e/nitrogen51_e.c b/board/boundary/nitrogen51_e/nitrogen51_e.c
new file mode 100644
index 00000000000..b67ae78a8ac
--- /dev/null
+++ b/board/boundary/nitrogen51_e/nitrogen51_e.c
@@ -0,0 +1,598 @@
+/*
+ * Copyright (C) 2018, Boundary Devices <info@boundarydevices.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/iomux-mx51.h>
+#include <asm/arch/sys_proto.h>
+#include <malloc.h>
+#include <linux/errno.h>
+#include <asm/gpio.h>
+#include <asm/mach-imx/boot_mode.h>
+#include <asm/mach-imx/fbpanel.h>
+#include <asm/mach-imx/iomux-v3.h>
+#include <asm/mach-imx/mxc_i2c.h>
+#include <asm/mach-imx/spi.h>
+#include <mmc.h>
+#include <fsl_esdhc.h>
+#include <linux/fb.h>
+#include <ipu_pixfmt.h>
+#include <asm/arch/crm_regs.h>
+#include <i2c.h>
+#include <input.h>
+#include <power/pmic.h>
+#include <fsl_pmic.h>
+#include <mc13892.h>
+#include <usb/ehci-ci.h>
+#include "../common/bd_common.h"
+#include "../common/padctrl.h"
+
+/* Special MXCFB sync flags are here. */
+#include "../drivers/video/mxcfb.h"
+
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define AUD_PAD_CTRL	(PAD_CTL_PUS_100K_UP | PAD_CTL_DSE_HIGH | \
+			PAD_CTL_HYS | PAD_CTL_SRE_FAST)
+
+#define BUTTON_PAD_CTRL	(PAD_CTL_PUS_100K_UP |			\
+	PAD_CTL_DSE_MED |			\
+	PAD_CTL_HYS)
+
+#define CEC_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_PUS_22K_UP | PAD_CTL_ODE | \
+	PAD_CTL_DSE_MED | PAD_CTL_SRE_FAST)
+
+#define CSI_PAD_CTRL	(PAD_CTL_PUS_100K_UP |			\
+	PAD_CTL_DSE_MED |			\
+	PAD_CTL_HYS | PAD_CTL_SRE_FAST)
+
+#define ESDHC_PAD_CTRL	(PAD_CTL_DSE_HIGH | PAD_CTL_DVS | \
+			PAD_CTL_PUS_47K_UP | PAD_CTL_SRE_FAST)
+
+#define I2C_PAD_CTRL	(PAD_CTL_DSE_HIGH | PAD_CTL_HYS |	\
+	PAD_CTL_ODE | PAD_CTL_SRE_FAST)
+
+#define I2C2_PAD_CTRL	(PAD_CTL_DSE_HIGH | PAD_CTL_HYS |	\
+	PAD_CTL_ODE | PAD_CTL_SRE_FAST)
+
+#define RGB_PAD_CTRL	(PAD_CTL_DSE_MED | PAD_CTL_SRE_FAST)
+
+#define SPI_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_DSE_MED | PAD_CTL_SRE_FAST)
+
+#define UART_PAD_CTRL	(PAD_CTL_PUS_100K_UP |			\
+	PAD_CTL_DSE_MED |			\
+	PAD_CTL_HYS | PAD_CTL_SRE_FAST)
+
+/*
+ *
+ */
+static const iomux_v3_cfg_t init_pads[] = {
+	/* AUDMUX */
+	IOMUX_PAD_CTRL(AUD3_BB_TXD__AUD3_TXD, AUD_PAD_CTRL),
+	IOMUX_PAD_CTRL(AUD3_BB_RXD__AUD3_RXD, AUD_PAD_CTRL),
+	IOMUX_PAD_CTRL(AUD3_BB_CK__AUD3_TXC, AUD_PAD_CTRL),
+	IOMUX_PAD_CTRL(AUD3_BB_FS__AUD3_TXFS, AUD_PAD_CTRL),
+
+	/* ECSPI1 */
+	IOMUX_PAD_CTRL(CSPI1_MISO__ECSPI1_MISO, SPI_PAD_CTRL),
+	IOMUX_PAD_CTRL(CSPI1_MOSI__ECSPI1_MOSI, SPI_PAD_CTRL),
+	IOMUX_PAD_CTRL(CSPI1_SCLK__ECSPI1_SCLK, SPI_PAD_CTRL),
+#define GP_ECSPI1_PMIC	IMX_GPIO_NR(4, 24)
+	IOMUX_PAD_CTRL(CSPI1_SS0__GPIO4_24, WEAK_PULLDN), /* SS0 - active high */
+#define GP_ECSPI1_FLASH	IMX_GPIO_NR(4, 25)
+	IOMUX_PAD_CTRL(CSPI1_SS1__GPIO4_25, WEAK_PULLUP), /* SS1 - active low */
+
+	/* ESDHC1 - FULL sd */
+	IOMUX_PAD_CTRL(SD1_CLK__SD1_CLK, ESDHC_PAD_CTRL),
+	IOMUX_PAD_CTRL(SD1_CMD__SD1_CMD, ESDHC_PAD_CTRL),
+	IOMUX_PAD_CTRL(SD1_DATA0__SD1_DATA0, ESDHC_PAD_CTRL),
+	IOMUX_PAD_CTRL(SD1_DATA1__SD1_DATA1, ESDHC_PAD_CTRL),
+	IOMUX_PAD_CTRL(SD1_DATA2__SD1_DATA2, ESDHC_PAD_CTRL),
+	IOMUX_PAD_CTRL(SD1_DATA3__SD1_DATA3, ESDHC_PAD_CTRL),
+#define GP_ESDHC1_CD	IMX_GPIO_NR(1, 0)
+	IOMUX_PAD_CTRL(GPIO1_0__GPIO1_0, WEAK_PULLUP),
+#define GP_ESDHC1_WP	IMX_GPIO_NR(1, 1)
+	IOMUX_PAD_CTRL(GPIO1_1__GPIO1_1, WEAK_PULLUP),
+
+	/* ESDHC2  */
+	IOMUX_PAD_CTRL(SD2_CLK__SD2_CLK, ESDHC_PAD_CTRL),
+	IOMUX_PAD_CTRL(SD2_CMD__SD2_CMD, ESDHC_PAD_CTRL),
+	IOMUX_PAD_CTRL(SD2_DATA0__SD2_DATA0, ESDHC_PAD_CTRL),
+	IOMUX_PAD_CTRL(SD2_DATA1__SD2_DATA1, ESDHC_PAD_CTRL),
+	IOMUX_PAD_CTRL(SD2_DATA2__SD2_DATA2, ESDHC_PAD_CTRL),
+	IOMUX_PAD_CTRL(SD2_DATA3__SD2_DATA3, ESDHC_PAD_CTRL),
+#define GP_ESDHC2_SPARE	IMX_GPIO_NR(4, 30)
+	IOMUX_PAD_CTRL(UART1_RTS__GPIO4_30, 0x1e5),	/* spare */
+#define GPIRQ_ESDHC2	IMX_GPIO_NR(4, 31)
+	IOMUX_PAD_CTRL(UART1_CTS__GPIO4_31, 0x1e5),	/* sdio_int */
+
+	/* FEC pads */
+	IOMUX_PAD_CTRL(EIM_EB2__FEC_MDIO, 0x01f5),
+	IOMUX_PAD_CTRL(NANDF_CS3__FEC_MDC, 0x2004),
+	IOMUX_PAD_CTRL(NANDF_RDY_INT__FEC_TX_CLK, 0x2180),
+	IOMUX_PAD_CTRL(NANDF_CS2__FEC_TX_ER, 0x2004),	/* unused */
+	IOMUX_PAD_CTRL(NANDF_CS7__FEC_TX_EN, 0x2004),
+	IOMUX_PAD_CTRL(NANDF_D8__FEC_TDATA0, 0x2004),
+	IOMUX_PAD_CTRL(NANDF_CS4__FEC_TDATA1, 0x2004),
+	IOMUX_PAD_CTRL(NANDF_CS5__FEC_TDATA2, 0x2004),
+	IOMUX_PAD_CTRL(NANDF_CS6__FEC_TDATA3, 0x2004),
+	IOMUX_PAD_CTRL(NANDF_RB3__FEC_RX_CLK, 0x0180),
+	IOMUX_PAD_CTRL(EIM_CS4__FEC_RX_ER, 0x0180),
+	IOMUX_PAD_CTRL(NANDF_D11__FEC_RX_DV, 0x20a4),
+	IOMUX_PAD_CTRL(EIM_CS5__FEC_CRS, 0x0180),
+	IOMUX_PAD_CTRL(NANDF_RB2__FEC_COL, 0x0180),
+	IOMUX_PAD_CTRL(NANDF_D9__FEC_RDATA0, 0x2180),
+	IOMUX_PAD_CTRL(EIM_EB3__FEC_RDATA1, 0x0085),
+	IOMUX_PAD_CTRL(EIM_CS2__FEC_RDATA2, 0x0085),
+	IOMUX_PAD_CTRL(EIM_CS3__FEC_RDATA3, 0x0085),
+
+	/* GPIO_KEYS */
+#define GP_GPIOKEYS_1		IMX_GPIO_NR(1, 9)
+	IOMUX_PAD_CTRL(GPIO1_9__GPIO1_9, WEAK_PULLUP),
+#define GP_GPIOKEYS_2		IMX_GPIO_NR(1, 4)
+	IOMUX_PAD_CTRL(GPIO1_4__GPIO1_4, WEAK_PULLUP),
+#define GPIRQ_TP29		IMX_GPIO_NR(1, 3)
+	IOMUX_PAD_CTRL(GPIO1_3__GPIO1_3, WEAK_PULLUP),
+
+	/* GPIO_LEDS */
+#define GP_GPIOLEDS_GREEN	IMX_GPIO_NR(1, 5)
+	IOMUX_PAD_CTRL(GPIO1_5__GPIO1_5, WEAK_PULLDN_OUTPUT),
+#define GP_GPIOLEDS_RED		IMX_GPIO_NR(1, 6)
+	IOMUX_PAD_CTRL(GPIO1_6__GPIO1_6, WEAK_PULLDN_OUTPUT),
+#define GP_DRY_CONTACT		IMX_GPIO_NR(1, 7)
+	IOMUX_PAD_CTRL(GPIO1_7__GPIO1_7, WEAK_PULLDN_OUTPUT),
+
+	/* Hog, adc_trig */
+	IOMUX_PAD_CTRL(CSI2_VSYNC__GPIO4_13, 0xe5),
+
+	/* hs_i2c1 */
+	IOMUX_PAD_CTRL(I2C1_CLK__I2C1_CLK, I2C_PAD_CTRL),
+	IOMUX_PAD_CTRL(I2C1_DAT__I2C1_DAT, I2C_PAD_CTRL),
+
+	/* hs_i2c1_tfp410 */
+#define GPIRQ_DVI		IMX_GPIO_NR(3, 28)
+	IOMUX_PAD_CTRL(NANDF_D12__GPIO3_28, WEAK_PULLUP),
+#define GP_TFP410_I2C_SEL	IMX_GPIO_NR(3, 5)
+	IOMUX_PAD_CTRL(DISPB2_SER_DIN__GPIO3_5, WEAK_PULLDN),
+
+	/* i2c1 SGTL5000 */
+#define GP_SGTL5000_HP_MUTE	IMX_GPIO_NR(2, 17)
+	IOMUX_PAD_CTRL(EIM_A23__GPIO2_17, WEAK_PULLDN_OUTPUT),
+
+	/* i2c2 - ov5642 parallel camera */
+	IOMUX_PAD_CTRL(CSI1_D8__CSI1_D8, 0x85),
+	IOMUX_PAD_CTRL(CSI1_D9__CSI1_D9, 0x85),
+	IOMUX_PAD_CTRL(CSI1_D10__CSI1_D10, 0),
+	IOMUX_PAD_CTRL(CSI1_D11__CSI1_D11, 0),
+	IOMUX_PAD_CTRL(CSI1_D12__CSI1_D12, 0),
+	IOMUX_PAD_CTRL(CSI1_D13__CSI1_D13, 0),
+	IOMUX_PAD_CTRL(CSI1_D14__CSI1_D14, 0),
+	IOMUX_PAD_CTRL(CSI1_D15__CSI1_D15, 0),
+	IOMUX_PAD_CTRL(CSI1_D16__CSI1_D16, 0),
+	IOMUX_PAD_CTRL(CSI1_D17__CSI1_D17, 0),
+	IOMUX_PAD_CTRL(CSI1_D18__CSI1_D18, 0),
+	IOMUX_PAD_CTRL(CSI1_D19__CSI1_D19, 0),
+	IOMUX_PAD_CTRL(CSI1_PIXCLK__CSI1_PIXCLK, 0),
+	IOMUX_PAD_CTRL(CSI1_HSYNC__CSI1_HSYNC, 0),
+	IOMUX_PAD_CTRL(CSI1_VSYNC__CSI1_VSYNC, 0),
+	IOMUX_PAD_CTRL(CSI1_MCLK__CSI1_MCLK, 0x85),
+	IOMUX_PAD_CTRL(CSI2_D12__GPIO4_9, 0x85),
+	IOMUX_PAD_CTRL(CSI2_D13__GPIO4_10, 0x85),
+#define GP_OV5642_RESET		IMX_GPIO_NR(4, 14)
+	IOMUX_PAD_CTRL(CSI2_HSYNC__GPIO4_14, WEAK_PULLDN),
+#define GP_OV5642_POWER_DOWN	IMX_GPIO_NR(4, 15)
+	IOMUX_PAD_CTRL(CSI2_PIXCLK__GPIO4_15, WEAK_PULLUP),
+
+	/* ipu_disp1 */
+	IOMUX_PAD_CTRL(DI1_DISP_CLK__DI1_DISP_CLK, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DI1_PIN15__DI1_PIN15, RGB_PAD_CTRL),	/* DRDY */
+	IOMUX_PAD_CTRL(DI1_PIN2__DI1_PIN2, RGB_PAD_CTRL),	/* HSYNC */
+	IOMUX_PAD_CTRL(DI1_PIN3__DI1_PIN3, RGB_PAD_CTRL),	/* VSYNC */
+	IOMUX_PAD_CTRL(DISP1_DAT0__DISP1_DAT0, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT1__DISP1_DAT1, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT2__DISP1_DAT2, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT3__DISP1_DAT3, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT4__DISP1_DAT4, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT5__DISP1_DAT5, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT6__DISP1_DAT6, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT7__DISP1_DAT7, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT8__DISP1_DAT8, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT9__DISP1_DAT9, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT10__DISP1_DAT10, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT11__DISP1_DAT11, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT12__DISP1_DAT12, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT13__DISP1_DAT13, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT14__DISP1_DAT14, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT15__DISP1_DAT15, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT16__DISP1_DAT16, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT17__DISP1_DAT17, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT18__DISP1_DAT18, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT19__DISP1_DAT19, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT20__DISP1_DAT20, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT21__DISP1_DAT21, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT22__DISP1_DAT22, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP1_DAT23__DISP1_DAT23, RGB_PAD_CTRL),
+
+	/* ipu_disp2 */
+	IOMUX_PAD_CTRL(DI2_DISP_CLK__DI2_DISP_CLK, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DI_GP4__DI2_PIN15, RGB_PAD_CTRL),	/* DRDY */
+	IOMUX_PAD_CTRL(DISP2_DAT0__DISP2_DAT0, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT1__DISP2_DAT1, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT2__DISP2_DAT2, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT3__DISP2_DAT3, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT4__DISP2_DAT4, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT5__DISP2_DAT5, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT6__DISP2_DAT6, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT7__DISP2_DAT7, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT8__DISP2_DAT8, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT9__DISP2_DAT9, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT10__DISP2_DAT10, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT11__DISP2_DAT11, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT12__DISP2_DAT12, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT13__DISP2_DAT13, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT14__DISP2_DAT14, RGB_PAD_CTRL),
+	IOMUX_PAD_CTRL(DISP2_DAT15__DISP2_DAT15, RGB_PAD_CTRL),
+
+	/* PMIC */
+#define GPIRQ_PMIC	IMX_GPIO_NR(1, 8)
+	IOMUX_PAD_CTRL(GPIO1_8__GPIO1_8, WEAK_PULLUP),
+
+	/* PWM1 - lcd backlight */
+#define GP_LCD_BACKLIGHT	IMX_GPIO_NR(1, 2)
+	IOMUX_PAD_CTRL(GPIO1_2__GPIO1_2, WEAK_PULLDN_OUTPUT),
+
+	/* reg 3p3v - always enabled */
+#define GP_REG3P3V_EN		IMX_GPIO_NR(2, 6)
+	IOMUX_PAD_CTRL(EIM_D22__GPIO2_6, WEAK_PULLUP_OUTPUT),
+
+	/* Short pins 4 & 5 of J8 to enable uart1 */
+#define GP_UART1_REQ		IMX_GPIO_NR(4, 26)
+	IOMUX_PAD_CTRL(CSPI1_RDY__GPIO4_26, WEAK_PULLUP),
+
+	/* UART2 */
+	IOMUX_PAD_CTRL(UART2_TXD__UART2_TXD, UART_PAD_CTRL),
+	IOMUX_PAD_CTRL(UART2_RXD__UART2_RXD, UART_PAD_CTRL),
+
+	/* UART3 */
+	IOMUX_PAD_CTRL(UART3_TXD__UART3_TXD, UART_PAD_CTRL),
+	IOMUX_PAD_CTRL(UART3_RXD__UART3_RXD, UART_PAD_CTRL),
+
+	/* USBH1 */
+	IOMUX_PAD_CTRL(USBH1_CLK__USBH1_CLK, 0x1e5),
+	IOMUX_PAD_CTRL(USBH1_DIR__USBH1_DIR, 0x1e5),
+	IOMUX_PAD_CTRL(USBH1_NXT__USBH1_NXT, 0x1e5),
+#define GP_USBH1_STP		IMX_GPIO_NR(1, 27)
+	IOMUX_PAD_CTRL(USBH1_STP__GPIO1_27, 0x1e5),
+	IOMUX_PAD_CTRL(USBH1_DATA0__USBH1_DATA0, 0x1e5),
+	IOMUX_PAD_CTRL(USBH1_DATA1__USBH1_DATA1, 0x1e5),
+	IOMUX_PAD_CTRL(USBH1_DATA2__USBH1_DATA2, 0x1e5),
+	IOMUX_PAD_CTRL(USBH1_DATA3__USBH1_DATA3, 0x1e5),
+	IOMUX_PAD_CTRL(USBH1_DATA4__USBH1_DATA4, 0x1e5),
+	IOMUX_PAD_CTRL(USBH1_DATA5__USBH1_DATA5, 0x1e5),
+	IOMUX_PAD_CTRL(USBH1_DATA6__USBH1_DATA6, 0x1e5),
+	IOMUX_PAD_CTRL(USBH1_DATA7__USBH1_DATA7, 0x1e5),
+#define GP_USBH1_RESET		IMX_GPIO_NR(2, 5)
+	IOMUX_PAD_CTRL(EIM_D21__GPIO2_5, WEAK_PULLDN_OUTPUT),
+
+	/* USBOTG */
+#define GPIRQ_USBOTG_OC		IMX_GPIO_NR(3, 0)
+	IOMUX_PAD_CTRL(DI1_PIN11__GPIO3_0, PAD_CTRL_INPUT),
+};
+
+static const iomux_v3_cfg_t usbh1_stp_gpio[] = {
+	IOMUX_PAD_CTRL(USBH1_STP__GPIO1_27, 0x1e5),
+};
+
+static const iomux_v3_cfg_t usbh1_stp_usb[] = {
+	IOMUX_PAD_CTRL(USBH1_STP__USBH1_STP, 0x1e5),
+};
+
+static const iomux_v3_cfg_t usbotg_power_on_pads[] = {
+	IOMUX_PAD_CTRL(EIM_D26__KEY_COL7, WEAK_PULLDN_OUTPUT),		/* low is on */
+};
+
+static const iomux_v3_cfg_t usbotg_power_off_pads[] = {
+	IOMUX_PAD_CTRL(EIM_D26__KEY_COL7, WEAK_PULLUP_OUTPUT),		/* high is off */
+};
+
+/* UART1  */
+static const iomux_v3_cfg_t uart1_pads[] = {
+	IOMUX_PAD_CTRL(UART1_TXD__UART1_TXD, UART_PAD_CTRL),
+	IOMUX_PAD_CTRL(UART1_RXD__UART1_RXD, UART_PAD_CTRL),
+};
+
+#ifndef CONFIG_SPI_FLASH_ATMEL
+static const iomux_v3_cfg_t uart1_gpio_pads[] = {
+	IOMUX_PAD_CTRL(UART1_TXD__GPIO4_29, WEAK_PULLUP),
+	IOMUX_PAD_CTRL(UART1_RXD__GPIO4_28, WEAK_PULLUP),
+};
+#endif
+
+static const struct i2c_pads_info i2c_pads[] = {
+	/* I2C1, SGTL5000 */
+	I2C_PADS_INFO_ENTRY(I2C1, EIM_D19, 2, 3, EIM_D16, 2, 0, I2C_PAD_CTRL),
+	/* I2C2 */
+	I2C_PADS_INFO_ENTRY(I2C2, EIM_D27, 2, 9, EIM_D24, 2, 8, I2C2_PAD_CTRL),
+};
+#define I2C_BUS_CNT	2
+
+#ifdef CONFIG_USB_EHCI_MX5
+int board_ehci_hcd_init(int port)
+{
+	if (port) {
+		/* Set USBH1_STP to GPIO and toggle it */
+		gpio_set_value(GP_USBH1_RESET, 0);
+		gpio_set_value(GP_USBH1_STP, 0);
+		SETUP_IOMUX_PADS(usbh1_stp_gpio);
+		mdelay(10);
+		gpio_set_value(GP_USBH1_STP, 1);
+		SETUP_IOMUX_PADS(usbh1_stp_usb);
+		mdelay(2);
+
+		gpio_set_value(GP_USBH1_RESET, 1);
+		return 0;
+	}
+	SETUP_IOMUX_PADS(usbotg_power_on_pads);
+	return 0;
+}
+
+#endif
+
+#define REV_ATLAS_LITE_1_0         0x8
+#define REV_ATLAS_LITE_1_1         0x9
+#define REV_ATLAS_LITE_2_0         0x10
+#define REV_ATLAS_LITE_2_1         0x11
+
+#define SREV3_0 0x10
+
+static unsigned get_srev(void)
+{
+	struct iim_regs *piim = (struct iim_regs *)IIM_BASE_ADDR;
+	return readl(&piim->srev);
+}
+
+static void power_init(void)
+{
+	unsigned val, sw1, sw2, sw3;
+	unsigned sw1_volt, sw2_volt, sw3_volt;
+	unsigned mode;
+	struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)MXC_CCM_BASE;
+	struct pmic *p;
+	int ret;
+
+	ret = pmic_init(CONFIG_FSL_PMIC_BUS);
+	if (ret)
+		return;
+
+	p = pmic_get("FSL_PMIC");
+	if (!p)
+		return;
+
+	/* Write needed to Power Gate 2 register */
+	pmic_reg_read(p, REG_POWER_MISC, &val);
+	val &= ~PWGT2SPIEN;
+	pmic_reg_write(p, REG_POWER_MISC, val);
+
+	/* Externally powered */
+	pmic_reg_read(p, REG_CHARGE, &val);
+	val |= ICHRG0 | ICHRG1 | ICHRG2 | ICHRG3 | CHGAUTOB;
+	pmic_reg_write(p, REG_CHARGE, val);
+
+	/* power up the system first */
+	pmic_reg_write(p, REG_POWER_MISC, PWUP);
+
+	/* Set core voltage to 1.1V */
+	sw1_volt = SWx_1_100V;
+	/* Setup VCC (SW2) to 1.25 */
+	sw2_volt = SWx_1_250V;
+	/* Setup 1V2_DIG1 (SW3) to 1.275 */
+	sw3_volt = SWx_1_275V;
+
+	pmic_reg_read(p, REG_SW_0, &sw1);
+	sw1 = (sw1 & ~SWx_VOLT_MASK) | sw1_volt;
+	pmic_reg_write(p, REG_SW_0, sw1);
+
+	pmic_reg_read(p, REG_SW_1, &sw2);
+	sw2 = (sw2 & ~SWx_VOLT_MASK) | sw2_volt;
+	pmic_reg_write(p, REG_SW_1, sw2);
+
+	pmic_reg_read(p, REG_SW_2, &sw3);
+	sw3 = (sw3 & ~SWx_VOLT_MASK) | sw3_volt;
+	pmic_reg_write(p, REG_SW_2, sw3);
+
+	if (get_srev() < SREV3_0) {
+		udelay(50);
+
+		/* Raise the core frequency to 800MHz */
+		writel(CONFIG_SYS_ARM_PODF, &mxc_ccm->cacrr);
+	}
+
+	pmic_reg_read(p, REG_IDENTIFICATION, &val);
+	if (((val & 0x1f) < REV_ATLAS_LITE_2_0) || (((val >> 9) & 0x3) == 0)) {
+		mode = SWMODE_PWM_PWM;
+	} else {
+		mode = SWMODE_AUTO_AUTO;
+	}
+	/* Set switchers in Auto in NORMAL mode & STANDBY mode */
+	/* Setup the switcher mode for SW1 & SW2*/
+	pmic_reg_read(p, REG_SW_4, &val);
+	val &= ~((SWMODE_MASK << SWMODE1_SHIFT) |
+		(SWMODE_MASK << SWMODE2_SHIFT));
+	val |= (mode << SWMODE1_SHIFT) |
+		(mode << SWMODE2_SHIFT);
+	pmic_reg_write(p, REG_SW_4, val);
+
+	/* Setup the switcher mode for SW3 & SW4 */
+	pmic_reg_read(p, REG_SW_5, &val);
+	val &= ~((SWMODE_MASK << SWMODE3_SHIFT) |
+		(SWMODE_MASK << SWMODE4_SHIFT));
+	val |= (mode << SWMODE3_SHIFT) |
+		(mode << SWMODE4_SHIFT);
+	pmic_reg_write(p, REG_SW_5, val);
+
+	/* Set VDIG to 1.65V, VGEN3 to 1.8V, VCAM to 2.5V */
+	pmic_reg_read(p, REG_SETTING_0, &val);
+	val &= ~(VCAM_MASK | VGEN3_MASK | VDIG_MASK);
+	val |= VDIG_1_65 | VGEN3_1_8 | VCAM_2_5;
+	pmic_reg_write(p, REG_SETTING_0, val);
+
+	/* Set VVIDEO to 2.775V, VAUDIO to 3V, VSD to 3.15V */
+	pmic_reg_read(p, REG_SETTING_1, &val);
+	val &= ~(VVIDEO_MASK | VSD_MASK | VAUDIO_MASK);
+	val |= VSD_3_15 | VAUDIO_3_0 | VVIDEO_2_775;
+	pmic_reg_write(p, REG_SETTING_1, val);
+
+	/* Configure VGEN3 and VCAM regulators to use external PNP */
+	val = VGEN3CONFIG | VCAMCONFIG;
+	pmic_reg_write(p, REG_MODE_1, val);
+	udelay(200);
+
+	/* Enable VGEN3, VCAM, VAUDIO, VVIDEO, VSD regulators */
+	val = VGEN3EN | VGEN3CONFIG | VCAMEN | VCAMCONFIG |
+		VVIDEOEN | VAUDIOEN  | VSDEN;
+	pmic_reg_write(p, REG_MODE_1, val);
+
+	udelay(500);
+}
+
+#ifdef CONFIG_FSL_ESDHC
+struct fsl_esdhc_cfg board_usdhc_cfg[] = {
+	{.esdhc_base = MMC_SDHC1_BASE_ADDR, .bus_width = 4,
+			.gp_cd = GP_ESDHC1_CD},
+	{.esdhc_base = MMC_SDHC2_BASE_ADDR, .bus_width = 4,},
+};
+#endif
+
+#ifdef CONFIG_MXC_SPI
+int board_spi_cs_gpio(unsigned bus, unsigned cs)
+{
+	if (bus == 0 && cs == 0)
+		return GP_ECSPI1_PMIC;
+	if (bus == 0 && cs == 1)
+		return GP_ECSPI1_FLASH;
+	return -1;
+}
+#endif
+
+#ifdef CONFIG_CMD_FBPANEL
+void board_enable_lcd(const struct display_info_t *di, int enable)
+{
+	gpio_direction_output(GP_LCD_BACKLIGHT, enable);
+}
+
+static const struct display_info_t displays[] = {
+	/* PIC16F616 */
+	VD_NEON_TOUCH640X240(LCD2, NULL, 0, 0x38),
+	VD_HITACHI_HVGA565(LCD2, NULL, 0, 0x38),
+	/* PMIC touch controller */
+	VD_800X300_565(LCD2, NULL, 0, 0x38),
+	VD_OKAYA_480_272(LCD, NULL, 0, 0x48),
+};
+#define display_cnt	ARRAY_SIZE(displays)
+#else
+#define displays	NULL
+#define display_cnt	0
+#endif
+
+static const unsigned short gpios_out_low[] = {
+	GP_OV5642_RESET,	/* camera reset */
+	GP_ECSPI1_PMIC,
+	GP_GPIOLEDS_GREEN,
+	GP_GPIOLEDS_RED,
+	GP_DRY_CONTACT,
+	GP_TFP410_I2C_SEL,
+	GP_SGTL5000_HP_MUTE,
+	GP_LCD_BACKLIGHT,
+	GP_USBH1_STP,
+	GP_USBH1_RESET,
+};
+
+static const unsigned short gpios_out_high[] = {
+	GP_REG3P3V_EN,
+	GP_OV5642_POWER_DOWN,
+	GP_ECSPI1_FLASH,	/* SS1 of spi nor */
+};
+
+static const unsigned short gpios_in[] = {
+	GP_ESDHC1_CD,
+	GP_ESDHC1_WP,
+	GP_ESDHC2_SPARE,
+	GPIRQ_ESDHC2,
+	GP_GPIOKEYS_1,
+	GP_GPIOKEYS_2,
+	GPIRQ_TP29,
+	GPIRQ_DVI,
+	GPIRQ_PMIC,
+	GP_UART1_REQ,
+	GPIRQ_USBOTG_OC,
+};
+
+int board_early_init_f(void)
+{
+	set_gpios_in(gpios_in, ARRAY_SIZE(gpios_in));
+	set_gpios(gpios_out_high, ARRAY_SIZE(gpios_out_high), 1);
+	set_gpios(gpios_out_low, ARRAY_SIZE(gpios_out_low), 0);
+	SETUP_IOMUX_PADS(init_pads);
+	SETUP_IOMUX_PADS(usbotg_power_off_pads);
+#ifdef CONFIG_SPI_FLASH_ATMEL
+	/* Rev 0 boards cannot test GP_UART1_REQ */
+	SETUP_IOMUX_PADS(uart1_pads);
+#else
+	/* If J8 pins 4 &5 are shorted, then enable console  */
+	if (!gpio_get_value(GP_UART1_REQ))
+		SETUP_IOMUX_PADS(uart1_pads);
+	else
+		SETUP_IOMUX_PADS(uart1_gpio_pads);
+#endif
+	return 0;
+}
+
+int board_init(void)
+{
+	common_board_init(i2c_pads, I2C_BUS_CNT, 0, displays, display_cnt, 0);
+	return 0;
+}
+
+void board_late_specific_init(void)
+{
+#ifdef CONFIG_MXC_SPI
+	power_init();
+#endif
+#ifndef CONFIG_SPI_FLASH_ATMEL
+	/* Rev 0 boards cannot test GP_UART1_REQ */
+	/* If J8 pins 4 & 5 are shorted, then enable console  */
+	if (!gpio_get_value(GP_UART1_REQ))
+		env_set("console", "ttymxc0");
+	/*
+	 * Now that the environment is available,
+	 * check if we should enable uart1
+	 */
+	if (env_get("console"))
+		SETUP_IOMUX_PADS(uart1_pads);
+#endif
+}
+
+const struct button_key board_buttons[] = {
+#ifndef CONFIG_SPI_FLASH_ATMEL
+	/* Rev 0 boards cannot test GP_UART1_REQ */
+	{"uart_req",	GP_UART1_REQ,	'u', 1},
+#endif
+	{"tp29",	GPIRQ_TP29,	'9', 1},
+	{NULL, 0, 0, 0},
+};
+
+/* i.MX51 does not support BMODE yet, maybe can't */
+#ifdef CONFIG_CMD_BMODE
+const struct boot_mode board_boot_modes[] = {
+	/* 4 bit bus width */
+	{"mmc0",	MAKE_CFGVAL(0x40, 0x30, 0x00, 0x00)},
+	{"mmc1",	MAKE_CFGVAL(0x40, 0x38, 0x00, 0x00)},
+	{NULL,		0},
+};
+#endif
diff --git a/board/boundary/nitrogen51_e/nitrogen51_e.cfg b/board/boundary/nitrogen51_e/nitrogen51_e.cfg
new file mode 100644
index 00000000000..25892d6bb5d
--- /dev/null
+++ b/board/boundary/nitrogen51_e/nitrogen51_e.cfg
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2013 Boundary Devices
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ *
+ * Refer docs/README.imxmage for more details about how-to configure
+ * and create imximage boot image
+ *
+ * The syntax is taken as close as possible with the kwbimage
+ */
+/* H5PS1G63JFR-S5C-C */
+
+/* image version */
+IMAGE_VERSION 1
+
+/*
+ * Boot Device : one of
+ * spi, sd (the board has no nand neither onenand)
+ */
+BOOT_FROM      spi
+
+#define __ASSEMBLY__
+#include <config.h>
+
+/*
+ * 512MB board uses CS0 and CS1, we will disable CS1 if ram doesn't appear to work
+ */
+#if CONFIG_DDR_MB==512
+#define USE_CSD1
+#endif
+
+/* Setting IOMUXC */
+DATA 4 0x73fa8418 0x000000e0	/* SW_PAD_CTL_PAD_EIM_D26, usb OTG power off */
+DATA 4 0x73fa8084 0x00000001	/* SW_MUX_CTL_PAD_EIM_D26, ALT1 kpp column 7, GPIO on next board */
+
+DATA 4 0x73fa88a0 0x200		/* SW_PAD_CTL_GRP_INMODE1, ddr2 input type */
+DATA 4 0x73fa850c 0x20c3	/* SW_PAD_CTL_PAD_EIM_SDODT1, 100K Pull Down, medium drive strength */
+DATA 4 0x73fa8510 0x20c3	/* SW_PAD_CTL_PAD_EIM_SDODT0, 100K Pull Down, medium drive strength */
+DATA 4 0x73fa883c 0x3		/* SW_PAD_CTL_GRP_DDR_A0, (a0-a7)Medium drive strength */
+DATA 4 0x73fa8848 0x3		/* SW_PAD_CTL_GRP_DDR_A1, (a8-a14,ba0-ba2)Medium drive strength */
+DATA 4 0x73fa84b8 0xe3		/* SW_PAD_CTL_PAD_DRAM_SDCLK1, medium drive strength */
+DATA 4 0x73fa84bc 0x43		/* SW_PAD_CTL_PAD_DRAM_SDQS0, Disable pull down */
+DATA 4 0x73fa84c0 0x43		/* SW_PAD_CTL_PAD_DRAM_SDQS1, Disable pull down */
+DATA 4 0x73fa84c4 0x43		/* SW_PAD_CTL_PAD_DRAM_SDQS2, Disable pull down */
+DATA 4 0x73fa84c8 0x43		/* SW_PAD_CTL_PAD_DRAM_SDQS3, Disable pull down */
+DATA 4 0x73fa8820 0x0		/* SW_PAD_CTL_GRP_DDRPKS, select keeper */
+DATA 4 0x73fa84a4 0x3		/* SW_PAD_CTL_PAD_DRAM_RAS, Medium Drive Strength */
+DATA 4 0x73fa84a8 0x3		/* SW_PAD_CTL_PAD_DRAM_CAS, Medium Drive Strength */
+DATA 4 0x73fa84ac 0xe3		/* SW_PAD_CTL_PAD_DRAM_SDWE, Medium Drive Strength */
+DATA 4 0x73fa84b0 0xe3		/* SW_PAD_CTL_PAD_DRAM_SDCKE0, Medium Drive Strength */
+DATA 4 0x73fa84b4 0xe3		/* SW_PAD_CTL_PAD_DRAM_SDCKE1, Medium Drive Strength */
+DATA 4 0x73fa84cc 0xe3		/* SW_PAD_CTL_PAD_DRAM_CS0, Medium Drive Strength */
+DATA 4 0x73fa84d0 0xe3		/* SW_PAD_CTL_PAD_DRAM_CS1, Medium Drive Strength */
+
+#ifndef  USE_CSD1
+DATA 4 0x73fa882c 0x2		/* SW_PAD_CTL_GRP_DRAM_B4 (D24-D31), Medium drive strength */
+DATA 4 0x73fa88a4 0x2		/* SW_PAD_CTL_GRP_DRAM_B0 (D0-D7), Medium drive strength */
+DATA 4 0x73fa88ac 0x2		/* SW_PAD_CTL_GRP_DRAM_B1 (D8-D15, Medium drive strength */
+DATA 4 0x73fa88b8 0x2		/* SW_PAD_CTL_GRP_DRAM_B2 (D16-D23), Medium drive strength */
+#endif
+/*
+ * Setting DDR for micron
+ * 13 Rows, 10 Cols, 32 bit, SREF=4 Micron Model
+ * CAS=3 BL=4
+ */
+
+DATA 4 0x83fd9000 0x82a20000	/* ESDCTL_ESDCTL0 */
+#ifdef USE_CSD1
+DATA 4 0x83fd9008 0x82a20000	/* ESDCTL_ESDCTL1 */
+#endif
+DATA 4 0x83fd9010 0x055ad0d0	/* ESDCTL_ESDMISC */
+/*
+ * Samsung K4T1G164Q[E/F]-BCE6000 - E6 means DDR2-667, tCK, CL=3 : 5 - 8 ns
+ * 					K4T1G164QF-BCE6000
+ * tRFC(refresh to any command)		127.5 ns (26 clocks)	Bits 31-28: 3 = 26 clocks (130 ns)(ESDCTL0[23] is double tRFC)
+ * tXSR(exit self refresh)		137.5 ns (28 clocks)	Bits 27-24: 3 = 28 clocks (140 ns)
+ * tXP (exit power down to command)	2 clocks		Bits 23-21: 1 = 2 clocks (10 ns)
+ * tWTR(write to read command)		7.5 ns (2 clocks)	Bits 20:    1 = 2 clocks (10 ns)
+ * tRP (row precharge)			15 ns (3 clocks)	Bits 19-18: 1 = 3 clocks (15 ns)
+ * tMRD(load mode register)		2 clocks		Bits 17-16: 1 = 2 clocks (10 ns)
+ * tRAS(Active to precharge Command)	45 ns (9 clocks)	Bits 15-12: 8 = 9 clocks (45 ns), was 7 = 8 clocks (40ns)
+ * tRRD(Active Bank A to Active B)	10 ns (2 clocks)	Bits 11-10: 1 = 2 clocks (10 ns)
+ * tWR (write to precharge)		15 ns (3 clocks)	Bits 7:     1 = 3 clocks (15 ns)
+ * tRCD(row to columnn delay)		15 ns (3 clocks)	Bits 6-4:   2 = 3 clocks (15 ns)
+ * tRC(ACTIVE to ACTIVE, same bank)	60 ns (12 clocks)	Bits 3-0:   0xb - 12 clocks(60ns), was 0xa = 11 clocks (55 ns)
+ */
+DATA 4 0x83fd9004 0x333584ab	/* ESDCTL_ESDCFG0 */
+#ifdef USE_CSD1
+DATA 4 0x83fd900C 0x333584ab	/* ESDCTL_ESDCFG1 */
+#endif
+
+/* Init DRAM on CS0 */
+/* ESDCTL_ESDSCR */
+DATA 4 0x83fd9014 0x04008008	/* PRECHARGE ALL */
+DATA 4 0x83fd9014 0x0000801a	/* emrs(2) */
+DATA 4 0x83fd9014 0x0000801b	/* emrs(3) */
+DATA 4 0x83fd9014 0x00428019	/* emrs(1) - 150 ohms ODT */
+DATA 4 0x83fd9014 0x07328018	/* MRS (load mode register) */
+DATA 4 0x83fd9014 0x04008008	/* PRECHARGE ALL */
+DATA 4 0x83fd9014 0x00008010	/* auto-refresh */
+DATA 4 0x83fd9014 0x00008010	/* auto-refresh */
+DATA 4 0x83fd9014 0x06328018	/* MRS (load mode register) */
+DATA 4 0x83fd9014 0x03c28019	/* emrs(1) - calibrate */
+DATA 4 0x83fd9014 0x00428019	/* emrs(1) - OCD calibration mode exit */
+DATA 4 0x83fd9014 0x00008000	/* nop */
+
+#ifdef USE_CSD1
+/* Init DRAM on CS1 */
+DATA 4 0x83fd9014 0x0400800c	/* PRECHARGE ALL */
+DATA 4 0x83fd9014 0x0000801e	/* emrs(2) */
+DATA 4 0x83fd9014 0x0000801f	/* emrs(3) */
+DATA 4 0x83fd9014 0x0042801d	/* emrs(1) - 50 ohms ODT vs 0x0000801d */
+DATA 4 0x83fd9014 0x0732801c	/* MRS (load mode register) */
+DATA 4 0x83fd9014 0x0400800c	/* PRECHARGE ALL */
+DATA 4 0x83fd9014 0x00008014	/* auto-refresh */
+DATA 4 0x83fd9014 0x00008014	/* auto-refresh */
+DATA 4 0x83fd9014 0x0632801c	/* MRS (load mode register) */
+DATA 4 0x83fd9014 0x03c2801d	/* emrs(1) - calibrate */
+DATA 4 0x83fd9014 0x0042801d	/* emrs(1) - OCD calibration mode exit */
+DATA 4 0x83fd9014 0x00008004	/* nop */
+#endif
+
+/* Write to CTL0 */
+DATA 4 0x83fd9000 0xb2a20000	/* refresh 4 rows each refresh clock */
+
+#ifdef USE_CSD1
+/* Write to CTL1 */
+DATA 4 0x83fd9008 0xb2a20000
+#endif
+
+
+DATA 4 0x83fd9010 0x055af6d0	/* ESDMISC */
+DATA 4 0x83fd9020 0x00f48c00	/* ESD_DLY1 - D0-D7 read delay */
+DATA 4 0x83fd9024 0x00f48c00	/* ESD_DLY2 - D8-D15 read delay */
+DATA 4 0x83fd9028 0x00f48c00	/* ESD_DLY3 - D16-D23 read delay */
+DATA 4 0x83fd902c 0x00f48c00	/* ESD_DLY4 - D24-D31 read delay */
+DATA 4 0x83fd9030 0x00f48000	/* ESD_DLY5 - D0-D31 write delay */
+
+DATA 4 0x83fd9034 0x88000000	/* DQS gating delays */
+DATA 4 0x83fd9014 0x00000000	/* ESDSCR, AXI address readies normal operation */
diff --git a/board/boundary/nitrogen51_e/nitrogen_bootscript_upgrade.txt b/board/boundary/nitrogen51_e/nitrogen_bootscript_upgrade.txt
new file mode 100644
index 00000000000..8f783ff094b
--- /dev/null
+++ b/board/boundary/nitrogen51_e/nitrogen_bootscript_upgrade.txt
@@ -0,0 +1,128 @@
+offset=0x400
+erase_size=0xC0000
+
+a_uImage1=0x92000400
+a_uImage2=0x92400400
+a_script=0x92000000
+
+blew=0
+for addr in 0x83f98c24 0x83f98c28 0x83f98c2c 0x83f98c30 0x83f98c34 0x83f98c38 ; do
+  if itest.l *${addr} != 0 ; then
+    blew=1;
+  fi
+done
+
+setenv stdout serial,vga
+
+if itest.s "${ethaddr}_" != "_" ; then
+  if itest.l ${blew} != 0 ; then
+    echo already blew fuse;
+    iim read fecmac
+  else
+    echo blowing mac fuses ${ethaddr}
+    iim blow fecmac ${ethaddr}
+  fi
+fi
+
+if sf probe 1 27000000 || sf probe 1 27000000 ; then
+  echo "probed SPI ROM" ;
+else
+  echo "Error initializing EEPROM"
+  exit
+fi
+
+small=1
+if sf read ${a_uImage2} 0x80400 0x400 ; then
+  if sf read ${a_uImage1} 0x400 0x400 ; then
+    if cmp.b ${a_uImage1} ${a_uImage2} 0x400 ; then
+    else
+      small=0;
+    fi
+  fi
+fi
+if itest.l ${small} != 0 ; then
+  rev="rev0_"
+  erase_size=0x7e000
+  echo "small spi-nor chip, erase size changed to 0x7e000"
+fi
+
+if itest.l *0x83fd9008 < 0 ; then
+  size_str="512m"
+else
+  size_str="256m"
+fi
+
+if itest.s "${uboot_defconfig}_" == "_" ; then
+  uboot_defconfig="nitrogen51_e_${rev}${size_str}"
+fi
+
+echo "check U-Boot with u-boot.${uboot_defconfig}" ;
+
+mw.b ${a_uImage1} 0xff ${erase_size}
+
+if fatload mmc 0 ${a_uImage1} u-boot.${uboot_defconfig} ; then
+else
+  echo "File u-boot.${uboot_defconfig} not found on SD card" ;
+  exit
+fi
+echo "read $filesize bytes from SD card" ;
+if sf read ${a_uImage2} ${offset} ${filesize} ; then
+else
+  echo "Error reading boot loader from EEPROM" ;
+  exit
+fi
+
+if cmp.b ${a_uImage1} ${a_uImage2} ${filesize} ; then
+  echo "------- U-Boot versions match" ;
+  echo "------- upgrade not needed" ;
+  if itest.s "${next}_" != "_" ; then
+    if fatload mmc 0 ${a_script} ${next} ; then
+      source ${a_script}
+    else
+      echo "${next} not found on SD card"
+    fi
+  fi
+  exit
+fi
+
+echo "Need U-Boot upgrade" ;
+echo "Program in 5 seconds" ;
+for n in 5 4 3 2 1 ; do
+  echo $n ;
+  sleep 1 ;
+done
+echo "erasing" ;
+sf erase 0 ${erase_size} ;
+
+# two steps to prevent bricking
+echo "programming" ;
+a1=0x92000800
+o1=0x800
+s1=${filesize}
+sf write ${a1} ${o1} ${s1} ;
+sf write ${a_uImage1} $offset 0x400 ;
+
+
+echo "verifying" ;
+if sf read ${a_uImage2} $offset $filesize ; then
+else
+  echo "Error re-reading EEPROM" ;
+  exit
+fi
+if cmp.b ${a_uImage1} ${a_uImage2} $filesize ; then
+else
+  echo "Read verification error" ;
+  exit
+fi
+
+if itest.s "${next}_" != "_" ; then
+  if fatload mmc 0 ${a_script} ${next} ; then
+    source ${a_script}
+  else
+    echo "${next} not found on mmc 0"
+  fi
+fi
+
+while echo "---- U-Boot upgraded. reset" ; do
+  sleep 120
+done
diff --git a/configs/nitrogen51_e_256m_defconfig b/configs/nitrogen51_e_256m_defconfig
new file mode 100644
index 00000000000..a30aefe6dd3
--- /dev/null
+++ b/configs/nitrogen51_e_256m_defconfig
@@ -0,0 +1,70 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX5=y
+CONFIG_SYS_TEXT_BASE=0x97800000
+CONFIG_TARGET_NITROGEN51_E=y
+# CONFIG_CMD_BMODE is not set
+CONFIG_ENV_VARS_UBOOT_CONFIG=y
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/boundary/nitrogen51_e/nitrogen51_e.cfg,MX51,DDR_MB=256,DEFCONFIG=\"nitrogen51_e_256m\""
+CONFIG_BOOTDELAY=3
+CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y
+CONFIG_SUPPORT_RAW_INITRD=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_MEMTEST=y
+CONFIG_SYS_ALT_MEMTEST=y
+CONFIG_CMD_DFU=y
+# CONFIG_CMD_FLASH is not set
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_GPT=y
+# CONFIG_RANDOM_UUID is not set
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_PART=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_PARTITION_TYPE_GUID=y
+CONFIG_ENV_IS_IN_SPI_FLASH=y
+CONFIG_USB_FUNCTION_FASTBOOT=y
+CONFIG_FASTBOOT_BUF_ADDR=0x92000000
+CONFIG_FASTBOOT_BUF_SIZE=0x26000000
+CONFIG_FASTBOOT_FLASH=y
+CONFIG_FASTBOOT_FLASH_MMC_DEV=0
+CONFIG_FSL_ESDHC=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_GIGADEVICE=y
+CONFIG_SPI_FLASH_SPANSION=y
+CONFIG_SPI_FLASH_SST=y
+CONFIG_PHYLIB=y
+CONFIG_NETDEVICES=y
+CONFIG_FEC_MXC=y
+CONFIG_SPI=y
+CONFIG_MXC_SPI=y
+CONFIG_USB=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_KEYBOARD=y
+CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_MANUFACTURER="Boundary"
+CONFIG_USB_GADGET_VENDOR_NUM=0x0525
+CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
+CONFIG_CI_UDC=y
+CONFIG_USB_ETHER=y
+CONFIG_USB_ETH_CDC=y
+CONFIG_USB_HOST_ETHER=y
+CONFIG_USB_ETHER_ASIX=y
+CONFIG_USB_ETHER_MCS7830=y
+CONFIG_USB_ETHER_SMSC95XX=y
+CONFIG_VIDEO=y
+# CONFIG_VIDEO_SW_CURSOR is not set
+CONFIG_OF_LIBFDT=y
diff --git a/configs/nitrogen51_e_512m_defconfig b/configs/nitrogen51_e_512m_defconfig
new file mode 100644
index 00000000000..17b21d56551
--- /dev/null
+++ b/configs/nitrogen51_e_512m_defconfig
@@ -0,0 +1,70 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX5=y
+CONFIG_SYS_TEXT_BASE=0x97800000
+CONFIG_TARGET_NITROGEN51_E=y
+# CONFIG_CMD_BMODE is not set
+CONFIG_ENV_VARS_UBOOT_CONFIG=y
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/boundary/nitrogen51_e/nitrogen51_e.cfg,MX51,DDR_MB=512,DEFCONFIG=\"nitrogen51_e_512m\""
+CONFIG_BOOTDELAY=3
+CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y
+CONFIG_SUPPORT_RAW_INITRD=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_MEMTEST=y
+CONFIG_SYS_ALT_MEMTEST=y
+CONFIG_CMD_DFU=y
+# CONFIG_CMD_FLASH is not set
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_GPT=y
+# CONFIG_RANDOM_UUID is not set
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_PART=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_PARTITION_TYPE_GUID=y
+CONFIG_ENV_IS_IN_SPI_FLASH=y
+CONFIG_USB_FUNCTION_FASTBOOT=y
+CONFIG_FASTBOOT_BUF_ADDR=0x92000000
+CONFIG_FASTBOOT_BUF_SIZE=0x26000000
+CONFIG_FASTBOOT_FLASH=y
+CONFIG_FASTBOOT_FLASH_MMC_DEV=0
+CONFIG_FSL_ESDHC=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_GIGADEVICE=y
+CONFIG_SPI_FLASH_SPANSION=y
+CONFIG_SPI_FLASH_SST=y
+CONFIG_PHYLIB=y
+CONFIG_NETDEVICES=y
+CONFIG_FEC_MXC=y
+CONFIG_SPI=y
+CONFIG_MXC_SPI=y
+CONFIG_USB=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_KEYBOARD=y
+CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_MANUFACTURER="Boundary"
+CONFIG_USB_GADGET_VENDOR_NUM=0x0525
+CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
+CONFIG_CI_UDC=y
+CONFIG_USB_ETHER=y
+CONFIG_USB_ETH_CDC=y
+CONFIG_USB_HOST_ETHER=y
+CONFIG_USB_ETHER_ASIX=y
+CONFIG_USB_ETHER_MCS7830=y
+CONFIG_USB_ETHER_SMSC95XX=y
+CONFIG_VIDEO=y
+# CONFIG_VIDEO_SW_CURSOR is not set
+CONFIG_OF_LIBFDT=y
diff --git a/configs/nitrogen51_e_rev0_256m_defconfig b/configs/nitrogen51_e_rev0_256m_defconfig
new file mode 100644
index 00000000000..9c652775d6a
--- /dev/null
+++ b/configs/nitrogen51_e_rev0_256m_defconfig
@@ -0,0 +1,68 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX5=y
+CONFIG_SYS_TEXT_BASE=0x97800000
+CONFIG_TARGET_NITROGEN51_E=y
+# CONFIG_CMD_BMODE is not set
+CONFIG_ENV_VARS_UBOOT_CONFIG=y
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/boundary/nitrogen51_e/nitrogen51_e.cfg,MX51,DDR_MB=256,DEFCONFIG=\"nitrogen51_e_rev0_256m\""
+CONFIG_BOOTDELAY=3
+CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y
+CONFIG_SUPPORT_RAW_INITRD=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_MEMTEST=y
+CONFIG_SYS_ALT_MEMTEST=y
+CONFIG_CMD_DFU=y
+# CONFIG_CMD_FLASH is not set
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_GPT=y
+# CONFIG_RANDOM_UUID is not set
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_PART=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_PARTITION_TYPE_GUID=y
+CONFIG_ENV_IS_IN_SPI_FLASH=y
+CONFIG_USB_FUNCTION_FASTBOOT=y
+CONFIG_FASTBOOT_BUF_ADDR=0x92000000
+CONFIG_FASTBOOT_BUF_SIZE=0x26000000
+CONFIG_FASTBOOT_FLASH=y
+CONFIG_FASTBOOT_FLASH_MMC_DEV=0
+CONFIG_FSL_ESDHC=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_ATMEL=y
+CONFIG_PHYLIB=y
+CONFIG_NETDEVICES=y
+CONFIG_FEC_MXC=y
+CONFIG_SPI=y
+CONFIG_MXC_SPI=y
+CONFIG_USB=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_KEYBOARD=y
+CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_MANUFACTURER="Boundary"
+CONFIG_USB_GADGET_VENDOR_NUM=0x0525
+CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
+CONFIG_CI_UDC=y
+CONFIG_USB_ETHER=y
+CONFIG_USB_ETH_CDC=y
+CONFIG_USB_HOST_ETHER=y
+CONFIG_USB_ETHER_ASIX=y
+CONFIG_USB_ETHER_MCS7830=y
+CONFIG_USB_ETHER_SMSC95XX=y
+CONFIG_VIDEO=y
+# CONFIG_VIDEO_SW_CURSOR is not set
+CONFIG_OF_LIBFDT=y
diff --git a/configs/nitrogen51_e_rev0_512m_defconfig b/configs/nitrogen51_e_rev0_512m_defconfig
new file mode 100644
index 00000000000..cc4e975b6a9
--- /dev/null
+++ b/configs/nitrogen51_e_rev0_512m_defconfig
@@ -0,0 +1,68 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX5=y
+CONFIG_SYS_TEXT_BASE=0x97800000
+CONFIG_TARGET_NITROGEN51_E=y
+# CONFIG_CMD_BMODE is not set
+CONFIG_ENV_VARS_UBOOT_CONFIG=y
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/boundary/nitrogen51_e/nitrogen51_e.cfg,MX51,DDR_MB=512,DEFCONFIG=\"nitrogen51_e_rev0_512m\""
+CONFIG_BOOTDELAY=3
+CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y
+CONFIG_SUPPORT_RAW_INITRD=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_MEMTEST=y
+CONFIG_SYS_ALT_MEMTEST=y
+CONFIG_CMD_DFU=y
+# CONFIG_CMD_FLASH is not set
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_GPT=y
+# CONFIG_RANDOM_UUID is not set
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_PART=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_PARTITION_TYPE_GUID=y
+CONFIG_ENV_IS_IN_SPI_FLASH=y
+CONFIG_USB_FUNCTION_FASTBOOT=y
+CONFIG_FASTBOOT_BUF_ADDR=0x92000000
+CONFIG_FASTBOOT_BUF_SIZE=0x26000000
+CONFIG_FASTBOOT_FLASH=y
+CONFIG_FASTBOOT_FLASH_MMC_DEV=0
+CONFIG_FSL_ESDHC=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_ATMEL=y
+CONFIG_PHYLIB=y
+CONFIG_NETDEVICES=y
+CONFIG_FEC_MXC=y
+CONFIG_SPI=y
+CONFIG_MXC_SPI=y
+CONFIG_USB=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_KEYBOARD=y
+CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_MANUFACTURER="Boundary"
+CONFIG_USB_GADGET_VENDOR_NUM=0x0525
+CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
+CONFIG_CI_UDC=y
+CONFIG_USB_ETHER=y
+CONFIG_USB_ETH_CDC=y
+CONFIG_USB_HOST_ETHER=y
+CONFIG_USB_ETHER_ASIX=y
+CONFIG_USB_ETHER_MCS7830=y
+CONFIG_USB_ETHER_SMSC95XX=y
+CONFIG_VIDEO=y
+# CONFIG_VIDEO_SW_CURSOR is not set
+CONFIG_OF_LIBFDT=y
diff --git a/include/configs/nitrogen51_e.h b/include/configs/nitrogen51_e.h
new file mode 100644
index 00000000000..e7833df4261
--- /dev/null
+++ b/include/configs/nitrogen51_e.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2018 Boundary Devices, Inc.
+ *
+ * Configuration settings for the Boundary Devices nitrogen51_e
+ * board.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/***********************************/
+
+#define CONFIG_SYS_BOOTM_LEN	0x1000000
+
+#include <linux/sizes.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/mach-imx/gpio.h>
+
+#define CONFIG_SYS_FSL_CLK
+
+/* ATAGs */
+#define CONFIG_CMDLINE_TAG
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_INITRD_TAG
+#define CONFIG_REVISION_TAG
+
+#define CONFIG_LOADADDR		0x92000000
+#define CONFIG_SYS_TEXT_BASE	0x97800000
+#define CONFIG_SYS_LOAD_ADDR	CONFIG_LOADADDR
+
+#ifndef CONFIG_BOOTDELAY
+#define CONFIG_BOOTDELAY        3
+#endif
+
+/* allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+#define CONFIG_CONS_INDEX       1
+#define CONFIG_BAUDRATE         115200
+
+/* Miscellaneous configurable options */
+#undef CONFIG_CMD_IMLS
+#define CONFIG_SYS_CBSIZE       512
+#define CONFIG_SYS_MAXARGS      32
+#define CONFIG_SYS_BARGSIZE     CONFIG_SYS_CBSIZE
+
+/* MMC */
+#define CONFIG_BOUNCE_BUFFER
+#define ESDHCI_QUIRK_BROKEN_TIMEOUT_VALUE
+#define CONFIG_SYS_FSL_ESDHC_ADDR	MMC_SDHC1_BASE_ADDR
+#define CONFIG_SYS_FSL_ESDHC_NUM	1
+
+/* Fuses */
+#define CONFIG_CMD_FUSE
+/************************************/
+#define CONFIG_FSL_IIM
+
+#define CONFIG_SYS_DDR_CLKSEL	0
+
+#define IMX_FEC_BASE		FEC_BASE_ADDR
+#define CONFIG_MII
+#if 1
+#define CONFIG_MXC_USB_PORT	1
+#define CONFIG_MXC_USB_PORTSC	PORT_PTS_ULPI
+#define CONFIG_MXC_USB_FLAGS	MXC_EHCI_POWER_PINS_ENABLED
+#define CONFIG_USB_MAX_CONTROLLER_COUNT 1
+#endif
+#define CONFIG_SYS_CLKTL_CBCDR	0x59E35100
+
+#define CONFIG_MACH_TYPE	3169
+
+/* Size of malloc() pool */
+#define CONFIG_SYS_MALLOC_LEN		(40 * 1024 * 1024)
+#define CONFIG_MXC_UART_BASE		UART1_BASE
+#define CONFIG_SYS_ARM_PODF		0
+#define CONFIG_FSL_PMIC_BUS		0
+#define CONFIG_FSL_PMIC_CS		0
+#define CONFIG_FSL_PMIC_CLK		2500000
+#define CONFIG_FSL_PMIC_MODE		(SPI_MODE_0 | SPI_CS_HIGH)
+#define CONFIG_FSL_PMIC_BITLEN		32
+
+#define CONFIG_FEC_MXC_PHYADDR		5
+#define ETH_PHY_MASK			(0xf << 4)
+
+/* PMIC Configs */
+#define CONFIG_POWER
+#define CONFIG_POWER_SPI
+#define CONFIG_POWER_FSL
+#define CONFIG_FSL_PMIC_BUS   0
+#define CONFIG_FSL_PMIC_CS    0
+#define CONFIG_SF_DEFAULT_CS   1
+
+#define CONFIG_FSL_PMIC_CLK   2500000
+#define CONFIG_FSL_PMIC_MODE  (SPI_MODE_0 | SPI_CS_HIGH)
+#define CONFIG_FSL_PMIC_BITLEN        32
+
+#define CONFIG_POWER_FSL_MC13892
+#define CONFIG_RTC_MC13XXX
+#if 0
+#define CONFIG_MMC_TRACE
+#define CONFIG_SYS_MMC_MAX_BLK_COUNT 1
+#endif
+
+#if 1
+#define CONFIG_VIDEO_LOGO
+#endif
+#define BD_I2C_MASK	3
+#define BD_CONSOLE "ttymxc0"
+#define BD_MMC_DISKS "0"
+#define BD_LOG_LEVEL	"7"
+#define BD_CMA		"2M"
+
+#ifdef CONFIG_SPI_FLASH_ATMEL
+/* only rev0 needs this for the small 512K at45db041d spi-nor */
+#define CONFIG_ENV_OFFSET		0x7e000
+#else
+/* default to no console */
+#define BD_CONSOLE_STR	""
+#endif
+
+
+#include "boundary.h"
+
+#define CONFIG_EXTRA_ENV_SETTINGS BD_BOUNDARY_ENV_SETTINGS \
+	"fb_lcd=off\0" \
+	"fb_lcd2=off\0" \
+
+#endif	       /* __CONFIG_H */
-- 
GitLab