summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJose Miguel Sanchez Sanabria <jsanabria@iseebcn.com>2018-06-19 18:37:00 +0200
committerJose Miguel Sanchez Sanabria <jsanabria@iseebcn.com>2018-06-19 18:37:00 +0200
commitd6c556b7335a6459a88329e9cd3058cf5e13db61 (patch)
tree5276cb289689127b087505ba321db3d354a06abe
parentfe1ef8a9246515f5a7007427e82cc20f1fbded53 (diff)
downloadu-boot-imx-d6c556b7335a6459a88329e9cd3058cf5e13db61.zip
u-boot-imx-d6c556b7335a6459a88329e9cd3058cf5e13db61.tar.gz
u-boot-imx-d6c556b7335a6459a88329e9cd3058cf5e13db61.tar.bz2
IGEP0146: Add Support for Peripherials
SD I2C eMMC Tuned DRAM EĀ²PROM Ethernet Fix using Hysteresis in MUX along with other pad control options Signed-off-by: Jose Miguel Sanchez Sanabria <jsanabria@iseebcn.com>
-rw-r--r--board/isee/igep0046/Kconfig11
-rw-r--r--board/isee/igep0146/Kconfig2
-rw-r--r--board/isee/igep0146/MAINTAINERS3
-rw-r--r--board/isee/igep0146/Makefile1
-rw-r--r--board/isee/igep0146/igep0146.c412
-rw-r--r--board/isee/igep0146/mx6ul_igep0146_1x128_nt.cfg173
-rw-r--r--board/isee/igep0146/mx6ul_igep0146_1x512.cfg203
-rw-r--r--board/isee/igep0146/mx6ul_igep0146_1x512_nt.cfg177
-rw-r--r--board/isee/igep0146/mxul_igep0146_prcarlos.cfg146
-rw-r--r--configs/igep0146_imx6ul_512M_defconfig12
-rw-r--r--configs/igep0146_imx6ul_512M_spl_defconfig28
-rw-r--r--include/configs/igep0146.h201
12 files changed, 841 insertions, 528 deletions
diff --git a/board/isee/igep0046/Kconfig b/board/isee/igep0046/Kconfig
index c932c91..0e6820e 100644
--- a/board/isee/igep0046/Kconfig
+++ b/board/isee/igep0046/Kconfig
@@ -9,17 +9,8 @@ config SYS_VENDOR
config SYS_CONFIG_NAME
default "igep0046"
-choice
- prompt "Carrier Board"
- default BASE0040
- optional
-
config BASE0040
- bool "Carrier board base0040"
- help
- This is the igep base0040 carrier board.
-
-endchoice
+ bool "base0040"
config WITH_SPL_SUPPORT
bool "Build i.MX6 with SPL support"
diff --git a/board/isee/igep0146/Kconfig b/board/isee/igep0146/Kconfig
index 69496fd..661f355 100644
--- a/board/isee/igep0146/Kconfig
+++ b/board/isee/igep0146/Kconfig
@@ -9,4 +9,6 @@ config SYS_VENDOR
config SYS_CONFIG_NAME
default "igep0146"
+config BASE0040
+ bool "base0040"
endif
diff --git a/board/isee/igep0146/MAINTAINERS b/board/isee/igep0146/MAINTAINERS
index 4f06e15..4ba667e 100644
--- a/board/isee/igep0146/MAINTAINERS
+++ b/board/isee/igep0146/MAINTAINERS
@@ -1,6 +1,7 @@
-IGEP0046 BOARD
+IGEP0146 BOARD
M: Jose Miguel Sanchez Sanabria <jsanabria@iseebcn.com>
S: Maintained
F: board/isee/igep0146/igep0146.c
F: include/configs/igep0146.h
+F: board/isee/igep0146/mx6ul_igep0146_1x512.cfg
F: configs/mx6ul_igep0146_512M_defconfig
diff --git a/board/isee/igep0146/Makefile b/board/isee/igep0146/Makefile
index 7cab156..f8f19af 100644
--- a/board/isee/igep0146/Makefile
+++ b/board/isee/igep0146/Makefile
@@ -6,4 +6,5 @@
# SPDX-License-Identifier: GPL-2.0+
#
+obj-y += igep0146_eeprom.o
obj-y += igep0146.o
diff --git a/board/isee/igep0146/igep0146.c b/board/isee/igep0146/igep0146.c
index da7a348..35c5432 100644
--- a/board/isee/igep0146/igep0146.c
+++ b/board/isee/igep0146/igep0146.c
@@ -1,7 +1,7 @@
/*
* Copyright (C) 2016 ISEE 2007 SL - http://www.isee.biz
*
- * Source file for IGEP0046 board
+ * Source file for IGEP0146 board
*
* Author: Jose Miguel Sanchez Sanabria <jsanabria@iseebcn.com>
*
@@ -26,6 +26,19 @@
#include <asm/io.h>
#include "../common/igep_common.h"
+#include <mmc.h>
+#include <fsl_esdhc.h>
+
+/*
+#include <usb.h>
+#include <usb/ehci-ci.h>
+*/
+
+#include <netdev.h>
+#include <miiphy.h>
+#include <i2c.h>
+#include "igep0146_eeprom.h"
+
DECLARE_GLOBAL_DATA_PTR;
/* MACRO MUX defines */
@@ -38,6 +51,35 @@ DECLARE_GLOBAL_DATA_PTR;
PAD_CTL_SPEED_LOW | PAD_CTL_DSE_40ohm | \
PAD_CTL_SRE_FAST )
+#define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \
+ PAD_CTL_SPEED_HIGH | \
+ PAD_CTL_DSE_48ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
+
+#define ENET_TR_CTRL ( PAD_CTL_PUS_47K_UP | PAD_CTL_PUE | PAD_CTL_SPEED_HIGH | \
+ PAD_CTL_DSE_48ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
+
+#define ENET_CLK_PAD_CTRL (PAD_CTL_DSE_DISABLE | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
+
+#define MDIO_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \
+ PAD_CTL_DSE_48ohm | PAD_CTL_SRE_FAST | PAD_CTL_ODE)
+
+#define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
+ PAD_CTL_PUS_22K_UP | PAD_CTL_SPEED_LOW | \
+ PAD_CTL_DSE_80ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
+
+#ifdef CONFIG_SYS_I2C_MXC
+#define I2C_PAD_CTRL ( PAD_CTL_PUS_22K_UP | PAD_CTL_ODE | PAD_CTL_SPEED_MED | \
+ PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
+#define I2C_PAD MUX_PAD_CTRL(I2C_PAD_CTRL)
+#endif
+
+/* Audio reset */
+#define AUDIO_RESET IMX_GPIO_NR(4, 17)
+/* Ethernet Phy 1 reset */
+#define ETH_PHY_RESET IMX_GPIO_NR(1, 10)
+/* eMMC reset */
+#define USDHC2_PWR_GPIO IMX_GPIO_NR(4, 10)
+
int dram_init(void)
{
gd->ram_size = imx_ddr_size();
@@ -50,7 +92,7 @@ void dram_init_banksize(void)
gd->bd->bi_dram[0].size = imx_ddr_size();
}
-/* UART MUX */
+/* uart */
static iomux_v3_cfg_t const uart3_pads[] =
{
MX6_PAD_UART3_TX_DATA__UART3_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
@@ -59,9 +101,114 @@ static iomux_v3_cfg_t const uart3_pads[] =
static iomux_v3_cfg_t const led_pads[] = {
MX6_PAD_GPIO1_IO08__GPIO1_IO08 | MUX_PAD_CTRL(GPIO_LED_PAD_CTRL),
+ /* Warning This GPIO actually controls if we select SD or WiFi through a MUX */
MX6_PAD_GPIO1_IO09__GPIO1_IO09 | MUX_PAD_CTRL(GPIO_LED_PAD_CTRL),
+
+};
+
+#ifdef CONFIG_FEC_MXC
+/* ethernet */
+static iomux_v3_cfg_t const enet1_pads[] = {
+
+ MX6_PAD_GPIO1_IO06__ENET1_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),
+ MX6_PAD_GPIO1_IO07__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
+
+ MX6_PAD_ENET1_TX_EN__ENET1_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
+ MX6_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 | MUX_PAD_CTRL(ENET_CLK_PAD_CTRL),
+
+ MX6_PAD_ENET1_TX_DATA0__ENET1_TDATA00 | MUX_PAD_CTRL(ENET_TR_CTRL),
+ MX6_PAD_ENET1_TX_DATA1__ENET1_TDATA01 | MUX_PAD_CTRL(ENET_TR_CTRL),
+
+ MX6_PAD_ENET1_RX_DATA0__ENET1_RDATA00 | MUX_PAD_CTRL(ENET_TR_CTRL),
+ MX6_PAD_ENET1_RX_DATA1__ENET1_RDATA01 | MUX_PAD_CTRL(ENET_TR_CTRL),
+
+ MX6_PAD_ENET1_RX_ER__ENET1_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),
+ MX6_PAD_ENET1_RX_EN__ENET1_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
+
+ /* ethernet reset */
+ MX6_PAD_JTAG_MOD__GPIO1_IO10 | MUX_PAD_CTRL(NO_PAD_CTRL),
+
+};
+#endif
+
+/* sd 1 */
+static iomux_v3_cfg_t const usdhc1_pads[] = {
+ MX6_PAD_SD1_CLK__USDHC1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_SD1_CMD__USDHC1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_SD1_DATA0__USDHC1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_SD1_DATA1__USDHC1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_SD1_DATA2__USDHC1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_SD1_DATA3__USDHC1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+
+};
+
+/* emmc */
+static iomux_v3_cfg_t const usdhc2_pads[] = {
+
+ MX6_PAD_NAND_ALE__GPIO4_IO10 | MUX_PAD_CTRL(NO_PAD_CTRL),
+ MX6_PAD_NAND_RE_B__USDHC2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_NAND_WE_B__USDHC2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_NAND_DATA00__USDHC2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_NAND_DATA01__USDHC2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_NAND_DATA02__USDHC2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_NAND_DATA03__USDHC2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_NAND_DATA04__USDHC2_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_NAND_DATA05__USDHC2_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_NAND_DATA06__USDHC2_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+ MX6_PAD_NAND_DATA07__USDHC2_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+
+ /* emmc Reset */
+ MX6_PAD_NAND_ALE__GPIO4_IO10 | MUX_PAD_CTRL(NO_PAD_CTRL),
+};
+
+/* gpio misc */
+static iomux_v3_cfg_t const init_pads[] =
+{
+ /* TLV320AIC3106 Audio codec Reset*/
+ MX6_PAD_CSI_MCLK__GPIO4_IO17 | MUX_PAD_CTRL(NO_PAD_CTRL),
+};
+
+const uchar igep_mac0 [6] = { 0x02, 0x00, 0x00, 0x00, 0x00, 0xff };
+//const uchar igep_mac0 [6] = { 0xb0, 0xd5, 0xcc, 0xb2, 0xa5, 0xb9 };
+
+static int igep_eeprom_valid = 0;
+static struct igep_mf_setup igep0046_eeprom_config;
+
+/* i2c */
+#ifdef CONFIG_SYS_I2C_MXC
+static struct i2c_pads_info i2c_pad_info1 =
+{
+ .scl =
+ {
+ .i2c_mode = MX6_PAD_UART4_TX_DATA__I2C1_SCL | I2C_PAD,
+ .gpio_mode = MX6_PAD_UART4_TX_DATA__GPIO1_IO28 | I2C_PAD,
+ .gp = IMX_GPIO_NR(1, 28)
+ },
+ .sda =
+ {
+ .i2c_mode = MX6_PAD_UART4_RX_DATA__I2C1_SDA | I2C_PAD,
+ .gpio_mode = MX6_PAD_UART4_RX_DATA__GPIO1_IO29 | I2C_PAD,
+ .gp = IMX_GPIO_NR(1, 29)
+ }
};
+static struct i2c_pads_info i2c_pad_info2 =
+{
+ .scl =
+ {
+ .i2c_mode = MX6_PAD_UART5_TX_DATA__I2C2_SCL | I2C_PAD,
+ .gpio_mode = MX6_PAD_UART5_TX_DATA__GPIO1_IO30 | I2C_PAD,
+ .gp = IMX_GPIO_NR(1, 30)
+ },
+ .sda =
+ {
+ .i2c_mode = MX6_PAD_UART5_RX_DATA__I2C2_SDA | I2C_PAD,
+ .gpio_mode = MX6_PAD_UART5_RX_DATA__GPIO1_IO31 | I2C_PAD,
+ .gp = IMX_GPIO_NR(1, 31)
+ }
+};
+#endif
+
static void setup_iomux_uart(void)
{
@@ -73,6 +220,161 @@ static void setup_iomux_leds(void)
imx_iomux_v3_setup_multiple_pads(led_pads, ARRAY_SIZE(led_pads));
}
+/*
+static void setup_iomux_usdhc(void)
+{
+ imx_iomux_v3_setup_multiple_pads(usdhc1_pads, ARRAY_SIZE(usdhc1_pads));
+ imx_iomux_v3_setup_multiple_pads(usdhc2_pads, ARRAY_SIZE(usdhc2_pads));
+
+}
+*/
+
+static void setup_iomux_enet(void)
+{
+ imx_iomux_v3_setup_multiple_pads(enet1_pads, ARRAY_SIZE(enet1_pads));
+}
+
+static void setup_iomux_misc(void)
+{
+ imx_iomux_v3_setup_multiple_pads(init_pads, ARRAY_SIZE(init_pads));
+}
+
+
+const uchar* get_mac_address (void)
+{
+ if(igep_eeprom_valid)
+ return igep0046_eeprom_config.bmac0;
+ return igep_mac0;
+}
+
+#ifdef CONFIG_BASE0040
+static void reset_audio(void)
+{
+ /* Audio Reset */
+ gpio_direction_output(AUDIO_RESET, 0);
+ mdelay(5);
+}
+#endif
+
+#ifdef CONFIG_FEC_MXC
+
+#ifdef CONFIG_RESET_PHY_R
+void reset_phy(void)
+{
+}
+#endif /* CONFIG_RESET_PHY_R */
+
+void mu_reset_phy(void)
+{
+ /* Reset LAN8720 PHY */
+ gpio_request(ETH_PHY_RESET, "LAN8720 PHY RST");
+ gpio_direction_output(ETH_PHY_RESET , 0);
+ mdelay(2);
+ gpio_set_value(ETH_PHY_RESET, 1);
+ mdelay(2);
+
+}
+
+static int setup_phy(void)
+{
+ struct iomuxc *iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR;
+
+ /* clear gpr1[17], set gpr1[13] to select external anatop clock for ENET1 (actually provided by PHY) */
+ clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC1_CLOCK_MUX1_SEL_MASK, IOMUX_GPR1_FEC1_CLOCK_MUX2_SEL_MASK);
+
+ /* clear gpr1[17], set gpr1[14] to select external anatop clock for ENET2 (actually provided by PHY) */
+ clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC2_CLOCK_MUX1_SEL_MASK, IOMUX_GPR1_FEC2_CLOCK_MUX2_SEL_MASK);
+
+ //enable_fec_anatop_clock(0, ENET_50MHZ);
+ //enable_enet_clk(1);
+
+ return 0;
+
+}
+
+int board_eth_init(bd_t *bis)
+{
+
+ int ret = 0 ;
+ eth_setenv_enetaddr("ethaddr", get_mac_address());
+ setup_iomux_enet();
+ setup_phy();
+ mu_reset_phy();
+
+ ret = fecmxc_initialize_multi(bis, 0, CONFIG_FEC_MXC_PHYADDR, IMX_FEC_BASE);
+ if (ret)
+ printf("FEC%d MXC: %s:failed\n", 0, __func__);
+
+ return 0;
+}
+
+#endif
+
+static struct fsl_esdhc_cfg usdhc_cfg[2] = {
+ {USDHC1_BASE_ADDR, 0, 4},
+ {USDHC2_BASE_ADDR, 0, 8},
+};
+
+int board_mmc_getcd(struct mmc *mmc)
+{
+
+ /* we will consider at the moment that SD1 / eMMC are always present */
+ struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
+ int ret = 0;
+
+ switch (cfg->esdhc_base) {
+ case USDHC1_BASE_ADDR:
+ /* SD case */
+ ret = 1;
+ /* WiFi case */
+ break;
+ case USDHC2_BASE_ADDR:
+ /* eMMC case */
+ /* Nand case */
+ /* QPSI case */
+ /* SD2 case */
+ ret = 1;
+ break;
+ }
+
+ return ret;
+
+}
+int board_mmc_init(bd_t *bis)
+{
+ int i, ret;
+
+ /*
+ * According to the board_mmc_init() the following map is done:
+ * (U-boot device node) (Physical Port)
+ * mmc0 USDHC1 --> SD1 / Wifi
+ * mmc1 USDHC2 --> eMMC / NAND / QSPI / SD2
+ */
+ for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) {
+ switch (i) {
+ case 0:
+ imx_iomux_v3_setup_multiple_pads(
+ usdhc1_pads, ARRAY_SIZE(usdhc1_pads));
+ /* USDHC1 Clock */
+ usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
+
+ break;
+ case 1:
+ imx_iomux_v3_setup_multiple_pads(
+ usdhc2_pads, ARRAY_SIZE(usdhc2_pads));
+ /* USDHC2 Clock */
+ usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
+ break;
+ }
+ ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]);
+ if (ret) {
+ printf("Warning: failed to initialize mmc dev %d\n", i);
+ }
+ }
+ return 0;
+}
+
+
int checkboard(void)
{
@@ -83,17 +385,44 @@ int board_early_init_f(void)
{
setup_iomux_uart();
setup_iomux_leds();
-
- /* configure LEDS */
- gpio_direction_output(IMX_GPIO_NR(1, 8), 1);
- gpio_direction_output(IMX_GPIO_NR(1, 9), 0);
-
+ setup_iomux_misc();
return 0;
}
int board_init(void)
{
+ u32 crc_value = 0;
+ u32 crc_save_value = 0;
+
+#ifdef CONFIG_BASE0040
+ reset_audio();
+#endif
+
+#ifdef CONFIG_SYS_I2C_MXC
+ setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);
+ setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2);
+ mdelay(1);
+#endif
+
+ if(check_eeprom() != 0){
+ printf("EEPROM: not found\n");
+ }else{
+ /* Read configuration from eeprom */
+ if(eeprom46_read_setup(0, (char*) &igep0046_eeprom_config, sizeof(struct igep_mf_setup)))
+ printf("EEPROM: read fail\n");
+ /* Verify crc32 */
+ crc_save_value = igep0046_eeprom_config.crc32;
+ igep0046_eeprom_config.crc32 = 0;
+ crc_value = crc32(0, (const unsigned char*) &igep0046_eeprom_config, sizeof(struct igep_mf_setup));
+ if(crc_save_value != crc_value){
+ printf("EEPROM: CRC32 failed. Loading default MAC\n");
+ }else{
+ printf("EEPROM: CRC32 OK! Loading MAC from eeprom\n");
+ igep_eeprom_valid = 1;
+ }
+ }
+
return 0;
}
@@ -101,7 +430,6 @@ int board_init(void)
int board_late_init(void)
{
checkboard();
- puts("\n");
return 0;
}
@@ -111,4 +439,70 @@ void ldo_mode_set(int ldo_bypass)
{
return;
}
-#endif \ No newline at end of file
+#endif
+
+/* Configure for SPL BUILD */
+
+#ifdef CONFIG_SPL_BUILD
+#include <libfdt.h>
+#include <spl.h>
+#include <asm/arch/mx6-ddr.h>
+
+/* ENTIRE RAM CALIBRATION STRUCTURES MISSING */
+
+static void ccgr_init(void)
+{
+ struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
+
+ writel(0xFFFFFFFF, &ccm->CCGR0);
+ writel(0xFFFFFFFF, &ccm->CCGR1);
+ writel(0xFFFFFFFF, &ccm->CCGR2);
+ writel(0xFFFFFFFF, &ccm->CCGR3);
+ writel(0xFFFFFFFF, &ccm->CCGR4);
+ writel(0xFFFFFFFF, &ccm->CCGR5);
+ writel(0xFFFFFFFF, &ccm->CCGR6);
+ writel(0xFFFFFFFF, &ccm->CCGR7);
+}
+
+static void spl_dram_init(void)
+{
+ /* COMMENTED UNTIL VALID RAM CONFIGURATION FOUND */
+ /*
+ mx6ul_dram_iocfg(mem_ddr.width, &mx6_ddr_ioregs, &mx6_grp_ioregs);
+ mx6_dram_cfg(&ddr_sysinfo, &mx6_mmcd_calib, &mem_ddr);
+ */
+}
+
+/* called from board_init_r after gd setup if CONFIG_SPL_BOARD_INIT defined */
+/* its our chance to print info about boot device */
+void spl_board_init(void)
+{
+
+}
+
+void board_init_f(ulong dummy)
+{
+ ccgr_init();
+
+ /* setup AIPS and disable watchdog */
+ arch_cpu_init();
+
+ /* iomux of uart and leds */
+ board_early_init_f();
+
+ /* setup GP timer */
+ timer_init();
+
+ /* UART clocks enabled and gd valid - init serial console */
+ preloader_console_init();
+
+ /* DDR initialization */
+ spl_dram_init();
+
+ /* Clear the BSS. */
+ memset(__bss_start, 0, __bss_end - __bss_start);
+
+ /* load/boot image from boot device */
+ board_init_r(NULL, 0);
+}
+#endif
diff --git a/board/isee/igep0146/mx6ul_igep0146_1x128_nt.cfg b/board/isee/igep0146/mx6ul_igep0146_1x128_nt.cfg
deleted file mode 100644
index e36084c..0000000
--- a/board/isee/igep0146/mx6ul_igep0146_1x128_nt.cfg
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2016 ISEE 2007 SL - http://www.isee.biz
- *
- * 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
- */
-
-/* image version */
-
-IMAGE_VERSION 2
-
-/*
- * Boot Device : one of
- * spi, sd (the board has no nand neither onenand)
- */
-
-BOOT_FROM sd
-
-/*
- * 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
- */
-
-/* New DDR type MT41K64M16TW-107 */
-
-//=============================================================================
-// Enable all clocks (they are disabled by ROM code)
-//=============================================================================
-
-DATA 4 0x020c4068 0xffffffff // CCM_CCGR0
-DATA 4 0x020c406c 0xffffffff // CCM_CCGR1
-DATA 4 0x020c4070 0xffffffff // CCM_CCGR2
-DATA 4 0x020c4074 0xffffffff // CCM_CCGR3
-DATA 4 0x020c4078 0xffffffff // CCM_CCGR4
-DATA 4 0x020c407c 0xffffffff // CCM_CCGR5
-DATA 4 0x020c4080 0xffffffff // CCM_CCGR6
-
-//=============================================================================
-// IOMUX IMX6UL - MCIMX6G3CV
-//=============================================================================
-
-//DDR IO TYPE:
-DATA 4 0x020E04B4 0x000C0000 // IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE
-DATA 4 0x020E04AC 0x00000000 // IOMUXC_SW_PAD_CTL_GRP_DDRPKE
-
-//CLOCK:
-DATA 4 0x020E027C 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK0_P
-
-//ADDRESS:
-DATA 4 0x020E0250 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS_B
-DATA 4 0x020E024C 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS_B
-DATA 4 0x020E0490 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_ADDDS
-
-//Control:
-DATA 4 0x020E0288 0x000C0030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET
-DATA 4 0x020E0270 0x00000000 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2
-DATA 4 0x020E0260 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_ODT0
-DATA 4 0x020E0264 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_ODT1
-DATA 4 0x020E04A0 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_CTLDS
-
-//Data Strobes:
-DATA 4 0x020E0494 0x00020000 // IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL
-DATA 4 0x020E0280 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0_P
-DATA 4 0x020E0284 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1_P
-
-//Data:
-DATA 4 0x020E04B0 0x00020000 // IOMUXC_SW_PAD_CTL_GRP_DDRMODE
-DATA 4 0x020E0498 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B0DS
-DATA 4 0x020E04A4 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B1DS
-
-DATA 4 0x020E0244 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0
-DATA 4 0x020E0248 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1
-
-//=============================================================================
-// DDR Controller Registers
-//=============================================================================
-// Manufacturer: Micron
-// Device Part Number: MT41K64M16TW-107
-// Clock Freq.: 933 MHz IMX6UL ensures data capture margin up to 400 Mhz
-// Density per CS in Gb: 1 Gb
-// Chip Selects used: 1
-// Number of Banks: 8
-// Row address: 13
-// Column address: 10
-// Data bus width 16
-//=============================================================================
-
-DATA 4 0x021B001C 0x00008000 // MMDC0_MDSCR Set the Configuration request bit during MMDC set up
-
-//=============================================================================
-// Calibration setup. REVISAR
-//=============================================================================
-
-DATA 4 0x021B0800 0xA1390003 // MMDC_MPZQHWCTRL Enable both one-time & periodic HW ZQ calibration.
-
-// For target board, may need to run write leveling calibration to fine tune these settings.
-DATA 4 0x021B080C 0x00000000 // MMDC_MPWLDECTRL0
-
-// Read DQS Gating calibration
-DATA 4 0x021B083C 0x415C015C // MMDC_MPDGCTRL0
-
-// Read Calibration
-DATA 4 0x021B0848 0x40404040 // MMDC_MPRDDLCTL 0x40404244
-
-// Write Calibration
-DATA 4 0x021B0850 0x40404040 // MMDC_MPWRDLCTL 0x40405A58
-
-// Read Data bit delay
-DATA 4 0x021B081C 0x33333333 // MMDC_MPRDDQBY0DL
-DATA 4 0x021B0820 0x33333333 // MMDC_MPRDDQBY1DL
-DATA 4 0x021B082C 0xf3333333 // MMDC_MPWRDQBY0DL
-DATA 4 0x021B0830 0xf3333333 // MMDC_MPWRDQBY1DL
-
-// Control Duty Cicle DQS of and primary clock CK0
-DATA 4 0x021B08C0 0x24922492 // MMDC_MPDCCR 0x00921012 24922492 0x00921012
-
-// Complete Calibration by Forced Measurement
-DATA 4 0x021B08b8 0x00008000 // MMDC_MPMUR0
-
-//=============================================================================
-// Calibration setup end
-//=============================================================================
-
-// MMCD Init
-DATA 4 0x021B0004 0x00020036 // MMDC_MDPDC
-DATA 4 0x021B0008 0x1B333030 // MMDC_MDOTC
-DATA 4 0x021B000C 0x676B52F3 // MMDC_MDCFG0
-DATA 4 0x021B0010 0xB66D0B63 // MMDC_MDCFG1
-DATA 4 0x021B0014 0x01FF00DB // MMDC_MDCFG2
-
-//MDMISC: RALAT kept to the high level of 5.
-//MDMISC: consider reducing RALAT if your 528MHz board design allow that. Lower RALAT benefits:
-//a. better operation at low frequency, for LPDDR2 freq < 100MHz, change RALAT to 3
-//b. Small performence improvment
-DATA 4 0x021B0018 0x00201740 // MMDC_MDMISC
-DATA 4 0x021B001C 0x00000800 // MMDC_MDSCR
-DATA 4 0x021B002C 0x000026D2 // MMDC_MDRWD
-DATA 4 0x021B0030 0x006B1023 // MMDC_MDOR
-DATA 4 0x021B0040 0x0000004F // MMDC_MDASP Initial value 3f = 0 Mb, increments of 256 Mb
-DATA 4 0x021B0000 0x82180000 // MMDC_MDCTL
-
-// ????
-DATA 4 0x021B0890 0x00400000 // MMDC_MPPDCMPR2 DDR2 Only ???
-
-// Mode Register writes
-// MT41K64M16TW-107 is a DDR3 memory so there is no need to configure CS1, CS1 only used for LPDDR2 ??
-DATA 4 0x021B001C 0x02008032 // MMDC0_MDSCR, MR2 write, CS0
-DATA 4 0x021B001C 0x00008033 // MMDC0_MDSCR, MR3 write, CS0
-DATA 4 0x021B001C 0x00048031 // MMDC0_MDSCR, MR1 write, CS0
-DATA 4 0x021B001C 0x15208030 // MMDC0_MDSCR, MR0write, CS0
-DATA 4 0x021B001C 0x04008040 // MMDC0_MDSCR, ZQ calibration command sent to device on CS0
-
-
-DATA 4 0x021B0020 0x00000800 // MMDC0_MDREF
-
-DATA 4 0x021B0818 0x00000227 // DDR_PHY_P0_MPODTCTRL
-
-DATA 4 0x021B0004 0x0002552D // MMDC0_MDPDC
-
-DATA 4 0x021B0404 0x00011006 // MMDC0_MAPSR
-
-DATA 4 0x021B001C 0x00000000 // MMDC0_MDSCR
diff --git a/board/isee/igep0146/mx6ul_igep0146_1x512.cfg b/board/isee/igep0146/mx6ul_igep0146_1x512.cfg
new file mode 100644
index 0000000..fc3b76c
--- /dev/null
+++ b/board/isee/igep0146/mx6ul_igep0146_1x512.cfg
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2016 ISEE 2007 SL - http://www.isee.biz
+ *
+ * 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
+ */
+
+/* image version */
+
+IMAGE_VERSION 2
+
+/*
+ * Boot Device : one of
+ * spi, sd (the board has no nand neither onenand)
+ */
+
+BOOT_FROM sd
+
+#ifdef CONFIG_SECURE_BOOT
+CSF CONFIG_CSF_SIZE
+#endif
+
+/*
+ * 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
+ */
+
+/* DDR type MT41K256M16TW-107 */
+
+//=============================================================================
+// Enable all clocks (they are disabled by ROM code)
+//=============================================================================
+DATA 4 0x020c4068 0xffffffff
+DATA 4 0x020c406c 0xffffffff
+DATA 4 0x020c4070 0xffffffff
+DATA 4 0x020c4074 0xffffffff
+DATA 4 0x020c4078 0xffffffff
+DATA 4 0x020c407c 0xffffffff
+DATA 4 0x020c4080 0xffffffff
+
+
+//=============================================================================
+// IOMUX
+//=============================================================================
+//DDR IO TYPE:
+DATA 4 0x020e04b4 0x000C0000 // IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE -- tipo DDR3 (0x000C0000)
+DATA 4 0x020e04ac 0x00000000 // IOMUXC_SW_PAD_CTL_GRP_DDRPKE -- Pull keeper enable / disbale (enable = 0x00001000)
+
+//CLOCK:
+DATA 4 0x020e027c 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 -- (R0/6)
+
+//ADDRESS:
+DATA 4 0x020e0250 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS
+DATA 4 0x020e024c 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS
+DATA 4 0x020e0490 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_ADDDS
+
+//Control:
+DATA 4 0x020e0288 0x000C0030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET -- DRAM_RST: DDR3 SEL + pull down 100k (0x000C0030)
+DATA 4 0x020e0270 0x00000000 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 - DSE can be configured using Group Control Register: IOMUXC_SW_PAD_CTL_GRP_CTLDS
+DATA 4 0x020e0260 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0
+DATA 4 0x020e0264 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1
+DATA 4 0x020e04a0 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_CTLDS
+
+//Data Strobes:
+DATA 4 0x020e0494 0x00020000 // IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL
+DATA 4 0x020e0280 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0
+DATA 4 0x020e0284 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1
+
+//Data:
+DATA 4 0x020e04b0 0x00020000 // IOMUXC_SW_PAD_CTL_GRP_DDRMODE
+DATA 4 0x020e0498 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B0DS
+DATA 4 0x020e04a4 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B1DS
+
+DATA 4 0x020e0244 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0
+DATA 4 0x020e0248 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1
+
+
+//=============================================================================
+// DDR Controller Registers
+//=============================================================================
+// Manufacturer: Micron
+// Device Part Number: MT41K256M16TW-107
+// Clock Freq.: 400MHz
+// Density per CS in Gb: 4
+// Chip Selects used: 1
+// Number of Banks: 8
+// Row address: 15
+// Column address: 10
+// Data bus width 16
+//=============================================================================
+DATA 4 0x021b001c 0x00008000 // MMDC0_MDSCR, set the Configuration request bit during MMDC set up
+
+//=============================================================================
+// Calibration setup.
+//=============================================================================
+DATA 4 0x021b0800 0xA1390003 // DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic HW ZQ calibration.
+
+// For target board, may need to run write leveling calibration to fine tune these settings.
+DATA 4 0x021b080c 0x00000000
+
+//Read DQS Gating calibration
+DATA 4 0x021b083c 0x014C0150 // 0x415C015C MPDGCTRL0 PHY0
+
+//Read calibration
+DATA 4 0x021b0848 0x4040464E // 0x40404244 MPRDDLCTL PHY0
+
+//Write calibration
+DATA 4 0x021b0850 0x4040564E // 0x40405A58 MPWRDLCTL PHY0
+
+//read data bit delay: (3 is the reccommended default value, although out of reset value is 0)
+DATA 4 0x021b081c 0x33333333 // MMDC_MPRDDQBY0DL
+DATA 4 0x021b0820 0x33333333 // MMDC_MPRDDQBY1DL
+
+//write data bit delay:
+DATA 4 0x021b082c 0xF3333333 // MMDC_MPWRDQBY0DL
+DATA 4 0x021b0830 0xF3333333 // MMDC_MPWRDQBY1DL
+
+//DQS&CLK Duty Cycle
+DATA 4 0x021b08c0 0x00921012 // [MMDC_MPDCCR] MMDC Duty Cycle Control Register
+
+// Complete calibration by forced measurement:
+DATA 4 0x021b08b8 0x00000800 // DDR_PHY_P0_MPMUR0, frc_msr
+//=============================================================================
+// Calibration setup end
+//=============================================================================
+
+//MMDC init:
+DATA 4 0x021b0004 0x0002002D // MMDC0_MDPDC
+DATA 4 0x021b0008 0x1B333030 // MMDC0_MDOTC
+DATA 4 0x021b000c 0x676B52F3 // MMDC0_MDCFG0
+DATA 4 0x021b0010 0xB66D0B63 // MMDC0_MDCFG1
+DATA 4 0x021b0014 0x01FF00DB // MMDC0_MDCFG2
+
+//MDMISC: RALAT kept to the high level of 5.
+//MDMISC: consider reducing RALAT if your 528MHz board design allow that. Lower RALAT benefits:
+//a. better operation at low frequency, for LPDDR2 freq < 100MHz, change RALAT to 3
+//b. Small performence improvment
+DATA 4 0x021b0018 0x00201740 // MMDC0_MDMISC
+DATA 4 0x021b001c 0x00008000 // MMDC0_MDSCR, set the Configuration request bit during MMDC set up
+DATA 4 0x021b002c 0x000026D2 // MMDC0_MDRWD
+DATA 4 0x021b0030 0x006B1023 // MMDC0_MDOR
+DATA 4 0x021b0040 0x0000004F // Chan0 CS0_END
+DATA 4 0x021b0000 0x84180000 // MMDC0_MDCTL
+
+DATA 4 0x021b0890 0x00400000 // MPPDCMPR2
+
+//Mode register writes
+DATA 4 0x021b001c 0x02008032 // MMDC0_MDSCR, MR2 write, CS0
+DATA 4 0x021b001c 0x00008033 // MMDC0_MDSCR, MR3 write, CS0
+DATA 4 0x021b001c 0x00048031 // MMDC0_MDSCR, MR1 write, CS0
+DATA 4 0x021b001c 0x15208030 // MMDC0_MDSCR, MR0write, CS0
+DATA 4 0x021b001c 0x04008040 // MMDC0_MDSCR, ZQ calibration command sent to device on CS0
+
+//DATA 4 0x021b001c 0x0200803A // MMDC0_MDSCR, MR2 write, CS1
+//DATA 4 0x021b001c 0x0000803B // MMDC0_MDSCR, MR3 write, CS1
+//DATA 4 0x021b001c 0x00448039 // MMDC0_MDSCR, MR1 write, CS1
+//DATA 4 0x021b001c 0x15208038 // MMDC0_MDSCR, MR0write, CS1
+//DATA 4 0x021b001c 0x04008048 // MMDC0_MDSCR, ZQ calibration command sent to device on CS1
+
+DATA 4 0x021b0020 0x00000800 // MMDC0_MDREF
+
+DATA 4 0x021b0818 0x00000227 // DDR_PHY_P0_MPODTCTRL
+
+DATA 4 0x021b0004 0x0002552D // MMDC0_MDPDC now SDCTL power down enabled
+
+DATA 4 0x021b0404 0x00011006 // MMDC0_MAPSR ADOPT power down enabled, MMDC will enter automatically to self-refresh while the number of idle cycle reached.
+
+DATA 4 0x021b001c 0x00000000 // MMDC0_MDSCR, clear this register (especially the configuration bit as initialization is complete)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/board/isee/igep0146/mx6ul_igep0146_1x512_nt.cfg b/board/isee/igep0146/mx6ul_igep0146_1x512_nt.cfg
deleted file mode 100644
index aff2a2e..0000000
--- a/board/isee/igep0146/mx6ul_igep0146_1x512_nt.cfg
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (C) 2016 ISEE 2007 SL - http://www.isee.biz
- *
- * 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
- */
-
-/* image version */
-
-IMAGE_VERSION 2
-
-/*
- * Boot Device : one of
- * spi, sd (the board has no nand neither onenand)
- */
-
-BOOT_FROM sd
-
-#ifdef CONFIG_SECURE_BOOT
-CSF CONFIG_CSF_SIZE
-#endif
-
-/*
- * 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
- */
-
-/* DDR type MT41K256M16TW-107 */
-
-//=============================================================================
-// Enable all clocks (they are disabled by ROM code)
-//=============================================================================
-
-DATA 4 0x020c4068 0xffffffff // CCM_CCGR0
-DATA 4 0x020c406c 0xffffffff // CCM_CCGR1
-DATA 4 0x020c4070 0xffffffff // CCM_CCGR2
-DATA 4 0x020c4074 0xffffffff // CCM_CCGR3
-DATA 4 0x020c4078 0xffffffff // CCM_CCGR4
-DATA 4 0x020c407c 0xffffffff // CCM_CCGR5
-DATA 4 0x020c4080 0xffffffff // CCM_CCGR6
-
-//=============================================================================
-// IOMUX IMX6UL - MCIMX6G3CV
-//=============================================================================
-
-//DDR IO TYPE:
-DATA 4 0x020E04B4 0x000C0000 // IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE
-DATA 4 0x020E04AC 0x00000000 // IOMUXC_SW_PAD_CTL_GRP_DDRPKE
-
-//CLOCK:
-DATA 4 0x020E027C 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK0_P
-
-//ADDRESS:
-DATA 4 0x020E0250 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS_B
-DATA 4 0x020E024C 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS_B
-DATA 4 0x020E0490 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_ADDDS
-
-//Control:
-DATA 4 0x020E0288 0x000C0030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET
-DATA 4 0x020E0270 0x00000000 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2
-DATA 4 0x020E0260 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_ODT0
-DATA 4 0x020E0264 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_ODT1
-DATA 4 0x020E04A0 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_CTLDS
-
-//Data Strobes:
-DATA 4 0x020E0494 0x00020000 // IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL
-DATA 4 0x020E0280 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0_P
-DATA 4 0x020E0284 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1_P
-
-//Data:
-DATA 4 0x020E04B0 0x00020000 // IOMUXC_SW_PAD_CTL_GRP_DDRMODE
-DATA 4 0x020E0498 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B0DS
-DATA 4 0x020E04A4 0x00000030 // IOMUXC_SW_PAD_CTL_GRP_B1DS
-
-DATA 4 0x020E0244 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0
-DATA 4 0x020E0248 0x00000030 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1
-
-//=============================================================================
-// DDR Controller Registers
-//=============================================================================
-// Manufacturer: Micron
-// Device Part Number: MT41K256M16TW-107
-// Clock Freq.: 933 MHz IMX6UL ensures data capture margin up to 400 Mhz
-// Density per CS in Gb: 4 Gb
-// Chip Selects used: 1
-// Number of Banks: 8
-// Row address: 15
-// Column address: 10
-// Data bus width 16
-//=============================================================================
-
-DATA 4 0x021B001C 0x00008000 // MMDC0_MDSCR Set the Configuration request bit during MMDC set up
-
-//=============================================================================
-// Calibration setup. REVISAR
-//=============================================================================
-
-DATA 4 0x021B0800 0xA1390003 // MMDC_MPZQHWCTRL Enable both one-time & periodic HW ZQ calibration.
-
-// For target board, may need to run write leveling calibration to fine tune these settings.
-DATA 4 0x021B080C 0x00000000 // MMDC_MPWLDECTRL0
-
-// Read DQS Gating calibration
-DATA 4 0x021B083C 0x00000000 // MMDC_MPDGCTRL0
-
-// Read Calibration
-DATA 4 0x021B0848 0x40404040 // MMDC_MPRDDLCTL 0x40404244
-
-// Write Calibration
-DATA 4 0x021B0850 0x40404040 // MMDC_MPWRDLCTL 0x40405A58
-
-// Read Data bit delay
-DATA 4 0x021B081C 0x33333333 // MMDC_MPRDDQBY0DL
-DATA 4 0x021B0820 0x33333333 // MMDC_MPRDDQBY1DL
-DATA 4 0x021B082C 0xf3333333 // MMDC_MPWRDQBY0DL
-DATA 4 0x021B0830 0xf3333333 // MMDC_MPWRDQBY1DL
-
-// Control Duty Cicle DQS of and primary clock CK0
-DATA 4 0x021B08C0 0x24922492 // MMDC_MPDCCR 0x00921012 24922492 0x00921012
-
-// Complete Calibration by Forced Measurement
-DATA 4 0x021B08b8 0x00008000 // MMDC_MPMUR0
-
-//=============================================================================
-// Calibration setup end
-//=============================================================================
-
-// MMCD Init
-DATA 4 0x021B0004 0x00020036 // MMDC_MDPDC
-DATA 4 0x021B0008 0x00333030 // MMDC_MDOTC
-DATA 4 0x021B000C 0x676B52F3 // MMDC_MDCFG0
-DATA 4 0x021B0010 0xB66D0B63 // MMDC_MDCFG1
-DATA 4 0x021B0014 0x01FF00DB // MMDC_MDCFG2
-
-//MDMISC: RALAT kept to the high level of 5.
-//MDMISC: consider reducing RALAT if your 528MHz board design allow that. Lower RALAT benefits:
-//a. better operation at low frequency, for LPDDR2 freq < 100MHz, change RALAT to 3
-//b. Small performence improvment
-DATA 4 0x021B0018 0x00201740 // MMDC_MDMISC
-DATA 4 0x021B001C 0x00000800 // MMDC_MDSCR
-DATA 4 0x021B002C 0x000026D2 // MMDC_MDRWD
-DATA 4 0x021B0030 0x006B1023 // MMDC_MDOR
-DATA 4 0x021B0040 0x0000003F // MMDC_MDASP Initial value 3f = 0 Mb, increments of 256 Mb
-DATA 4 0x021B0000 0x84180000 // MMDC_MDCTL
-
-// ????
-DATA 4 0x021B0890 0x00400000 // MMDC_MPPDCMPR2 DDR2 Only ???
-
-// Mode Register writes
-// MT41K64M16TW-107 is a DDR3 memory so there is no need to configure CS1, CS1 only used for LPDDR2 ??
-DATA 4 0x021B001C 0x02008032 // MMDC0_MDSCR, MR2 write, CS0
-DATA 4 0x021B001C 0x00008033 // MMDC0_MDSCR, MR3 write, CS0
-DATA 4 0x021B001C 0x00048031 // MMDC0_MDSCR, MR1 write, CS0
-DATA 4 0x021B001C 0x15208030 // MMDC0_MDSCR, MR0write, CS0
-DATA 4 0x021B001C 0x04008040 // MMDC0_MDSCR, ZQ calibration command sent to device on CS0
-
-
-DATA 4 0x021B0020 0x00000800 // MMDC0_MDREF
-
-DATA 4 0x021B0818 0x00000227 // DDR_PHY_P0_MPODTCTRL
-
-DATA 4 0x021B0004 0x0002556D // MMDC0_MDPDC
-
-DATA 4 0x021B0404 0x00011006 // MMDC0_MAPSR
-
-DATA 4 0x021B001C 0x00000000 // MMDC0_MDSCR
diff --git a/board/isee/igep0146/mxul_igep0146_prcarlos.cfg b/board/isee/igep0146/mxul_igep0146_prcarlos.cfg
deleted file mode 100644
index 0ae8b0b..0000000
--- a/board/isee/igep0146/mxul_igep0146_prcarlos.cfg
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (C) 2014-2016 Freescale Semiconductor, Inc.
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-
-#define __ASSEMBLY__
-#include <config.h>
-
-/* image version */
-
-IMAGE_VERSION 2
-
-/*
- * Boot Device : one of
- * spi/sd/nand/onenand, qspi/nor
- */
-
-#ifdef CONFIG_QSPI_BOOT
-BOOT_FROM qspi
-#else
-BOOT_FROM sd
-#endif
-
-#ifdef CONFIG_USE_IMXIMG_PLUGIN
-/*PLUGIN plugin-binary-file IRAM_FREE_START_ADDR*/
-PLUGIN board/freescale/mx6sxsabresd/plugin.bin 0x00907000
-#else
-
-#ifdef CONFIG_SECURE_BOOT
-CSF CONFIG_CSF_SIZE
-#endif
-
-/*
- * 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
- */
-
-/* Enable all clocks */
-DATA 4 0x020c4068 0xffffffff
-DATA 4 0x020c406c 0xffffffff
-DATA 4 0x020c4070 0xffffffff
-DATA 4 0x020c4074 0xffffffff
-DATA 4 0x020c4078 0xffffffff
-DATA 4 0x020c407c 0xffffffff
-DATA 4 0x020c4080 0xffffffff
-DATA 4 0x020c4084 0xffffffff
-
-/* IOMUX - DDR IO Type */
-DATA 4 0x020e0618 0x000c0000
-DATA 4 0x020e05fc 0x00000000
-
-/* Clock */
-DATA 4 0x020e032c 0x00000030
-
-/* Address */
-DATA 4 0x020e0300 0x00000020
-DATA 4 0x020e02fc 0x00000020
-DATA 4 0x020e05f4 0x00000020
-
-/* Control */
-DATA 4 0x020e0340 0x00000020
-
-DATA 4 0x020e0320 0x00000000
-DATA 4 0x020e0310 0x00000020
-DATA 4 0x020e0314 0x00000020
-DATA 4 0x020e0614 0x00000020
-
-/* Data Strobe */
-DATA 4 0x020e05f8 0x00020000
-DATA 4 0x020e0330 0x00000028
-DATA 4 0x020e0334 0x00000028
-DATA 4 0x020e0338 0x00000028
-DATA 4 0x020e033c 0x00000028
-
-/* Data */
-DATA 4 0x020e0608 0x00020000
-DATA 4 0x020e060c 0x00000028
-DATA 4 0x020e0610 0x00000028
-DATA 4 0x020e061c 0x00000028
-DATA 4 0x020e0620 0x00000028
-DATA 4 0x020e02ec 0x00000028
-DATA 4 0x020e02f0 0x00000028
-DATA 4 0x020e02f4 0x00000028
-DATA 4 0x020e02f8 0x00000028
-
-/* Calibrations - ZQ */
-DATA 4 0x021b0800 0xa1390003
-
-/* Write leveling */
-DATA 4 0x021b080c 0x00290025
-DATA 4 0x021b0810 0x00220022
-
-/* DQS Read Gate */
-DATA 4 0x021b083c 0x41480144
-DATA 4 0x021b0840 0x01340130
-
-/* Read/Write Delay */
-DATA 4 0x021b0848 0x3C3E4244
-DATA 4 0x021b0850 0x34363638
-
-/* Read data bit delay */
-DATA 4 0x021b081c 0x33333333
-DATA 4 0x021b0820 0x33333333
-DATA 4 0x021b0824 0x33333333
-DATA 4 0x021b0828 0x33333333
-
-/* Complete calibration by forced measurement */
-DATA 4 0x021b08b8 0x00000800
-
-/* MMDC init - DDR3, 64-bit mode, only MMDC0 is initiated */
-DATA 4 0x021b0004 0x0002002d
-DATA 4 0x021b0008 0x00333030
-DATA 4 0x021b000c 0x676b52f3
-DATA 4 0x021b0010 0xb66d8b63
-DATA 4 0x021b0014 0x01ff00db
-DATA 4 0x021b0018 0x00011740
-DATA 4 0x021b001c 0x00008000
-DATA 4 0x021b002c 0x000026d2
-DATA 4 0x021b0030 0x006b1023
-DATA 4 0x021b0040 0x0000005f
-DATA 4 0x021b0000 0x84190000
-
-/* Initialize MT41K256M16HA-125 - MR2 */
-DATA 4 0x021b001c 0x04008032
-/* MR3 */
-DATA 4 0x021b001c 0x00008033
-/* MR1 */
-DATA 4 0x021b001c 0x00048031
-/* MR0 */
-DATA 4 0x021b001c 0x05208030
-/* DDR device ZQ calibration */
-DATA 4 0x021b001c 0x04008040
-
-/* Final DDR setup, before operation start */
-DATA 4 0x021b0020 0x00000800
-DATA 4 0x021b0818 0x00011117
-DATA 4 0x021b001c 0x00000000
-#endif
diff --git a/configs/igep0146_imx6ul_512M_defconfig b/configs/igep0146_imx6ul_512M_defconfig
index d3f6b9e..9df7c91 100644
--- a/configs/igep0146_imx6ul_512M_defconfig
+++ b/configs/igep0146_imx6ul_512M_defconfig
@@ -1,4 +1,4 @@
-CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/isee/igep0146/mx6ul_igep0146_1x512_nt.cfg,MX6UL"
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/isee/igep0146/mx6ul_igep0146_1x512.cfg,MX6UL"
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_MX6UL=y
@@ -13,4 +13,12 @@ CONFIG_CMD_CACHE=y
CONFIG_OF_LIBFDT=y
CONFIG_DM=y
CONFIG_DM_THERMAL=y
-CONFIG_DISPLAY_BOARDINFO=y \ No newline at end of file
+CONFIG_DISPLAY_BOARDINFO=y
+CONFIG_DEFAULT_FDT_FILE="imx6ul-igep-base0040rd102.dtb"
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
diff --git a/configs/igep0146_imx6ul_512M_spl_defconfig b/configs/igep0146_imx6ul_512M_spl_defconfig
new file mode 100644
index 0000000..e0fa901
--- /dev/null
+++ b/configs/igep0146_imx6ul_512M_spl_defconfig
@@ -0,0 +1,28 @@
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/isee/igep0146/mx6ul_igep0146_1x512_nt.cfg,MX6UL"
+CONFIG_ARM=y
+CONFIG_ARCH_MX6=y
+CONFIG_MX6UL=y
+CONFIG_TARGET_IGEP0146=y
+CONFIG_BOOTDELAY=3
+CONFIG_BOARD_EARLY_INIT_F=y
+# CONFIG_CMD_IMLS is not set
+CONFIG_CMD_MEMTEST=y
+# CONFIG_CMD_FLASH is not set
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_CACHE=y
+CONFIG_OF_LIBFDT=y
+CONFIG_DM=y
+CONFIG_DM_THERMAL=y
+CONFIG_DISPLAY_BOARDINFO=y
+
+CONFIG_SPL=y
+CONFIG_SPL_BUILD=y
+CONFIG_SPL_GPIO_SUPPORT=y
+CONFIG_SPL_LIBCOMMON_SUPPORT=y
+CONFIG_SPL_LIBGENERIC_SUPPORT=y
+CONFIG_SPL_EXT_SUPPORT=y
+CONFIG_SPL_I2C_SUPPORT=y
+CONFIG_SPL_LIBDISK_SUPPORT=y
+CONFIG_SPL_MMC_SUPPORT=y
+CONFIG_SPL_SERIAL_SUPPORT=y
+CONFIG_SPL_WATCHDOG_SUPPORT=y
diff --git a/include/configs/igep0146.h b/include/configs/igep0146.h
index 2819086..5638c00 100644
--- a/include/configs/igep0146.h
+++ b/include/configs/igep0146.h
@@ -14,15 +14,14 @@
#include "mx6_common.h"
-#define CONFIG_SECURE_BOOT
#ifdef CONFIG_SECURE_BOOT
#ifndef CONFIG_CSF_SIZE
#define CONFIG_CSF_SIZE 0x4000
+#define CONFIG_SYS_FSL_SEC_COMPAT 4 /* HAB version */
+#define CONFIG_FSL_CAAM
#endif
#endif
-#define CONFIG_SYS_FSL_SEC_COMPAT 4 /* HAB version */
-#define CONFIG_FSL_CAAM
/* Falcon Mode */
#ifdef CONFIG_SPL
@@ -51,7 +50,7 @@
/* UART Configs */
#define CONFIG_MXC_UART
#define CONFIG_MXC_UART_BASE UART3_BASE
-#define CONSOLE_DEV "ttymxc1"
+#define CONSOLE_DEV "ttymxc2"
#define CONFIG_BAUDRATE 115200
#define CONFIG_SYS_BAUDRATE_TABLE {9600, 19200, 38400, 57600, 115200}
@@ -79,7 +78,7 @@
/* Miscellaneous configurable options */
-#define CONFIG_AUTOBOOT_KEYED
+/*#define CONFIG_AUTOBOOT_KEYED*/
#define CONFIG_AUTOBOOT_PROMPT "Press ESC to abort autoboot in %d seconds\n"
#define CONFIG_AUTOBOOT_STOP_STR "\x1b"
#define CONFIG_SYS_LONGHELP
@@ -88,20 +87,47 @@
#define CONFIG_CMDLINE_EDITING
#define CONFIG_STACKSIZE (128 * 1024)
+/* I2C Configs */
+#define CONFIG_CMD_I2C
+#define CONFIG_SYS_I2C
+#define CONFIG_SYS_I2C_MXC
+#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */
+#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */
+#define CONFIG_SYS_I2C_SPEED 100000
+
+/* EEPROM Configs */
+#define CONFIG_SYS_I2C_EEPROM_BUS 1
+#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50
+
/* MMC Configs */
#define CONFIG_MMCROOT "/dev/mmcblk0p2"
#define CONFIG_FSL_ESDHC
#define CONFIG_FSL_USDHC
-#define CONFIG_SYS_FSL_ESDHC_ADDR 0
+#define CONFIG_SYS_FSL_ESDHC_ADDR USDHC2_BASE_ADDR
#define CONFIG_SYS_FSL_USDHC_NUM 2
-#define CONFIG_DOS_PARTITION
+#define CONFIG_SUPPORT_EMMC_BOOT /* eMMC specific */
#define CONFIG_BOUNCE_BUFFER
#define CONFIG_FAT_WRITE
+/* Network */
+#define CONFIG_FEC_MXC
+#define CONFIG_MII
+
+#define IMX_FEC_BASE ENET_BASE_ADDR
+#define CONFIG_FEC_MXC_PHYADDR 0x1
+
+#define CONFIG_FEC_XCV_TYPE RMII
+#define CONFIG_ETHPRIME "FEC"
+
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_MII
+
+#define CONFIG_PHYLIB
+#define CONFIG_PHY_SMSC
+#define CONFIG_RESET_PHY_R /* Software Reset of PHY */
-/* NET Configs */
-#define CONFIG_ENV_OVERWRITE /* To allow write MAC into ethaddr variable */
/* Environment */
#define CONFIG_ENV_SIZE (128 * 1024)
@@ -109,13 +135,168 @@
#define CONFIG_SYS_MMC_ENV_DEV 0
/* Commands */
+#define CONFIG_CMD_BOOTZ
#undef CONFIG_CMD_IMLS
#define EMMC_ENV ""
#define VIDEO_ARGS ""
#define VIDEO_ARGS_SCRIPT ""
+#define EMMC_ENV ""
+
+#ifndef VIDEO_ARGS
+#define VIDEO_ARGS ""
+#endif
+
+#ifndef VIDEO_ARGS_SCRIPT
+#define VIDEO_ARGS_SCRIPT ""
+#endif
-#endif /* __IGEP0046_CONFIG_H */
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "bootenv=uEnv.txt\0" \
+ "image=zImage\0" \
+ "fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
+ "fdt_addr=0x83000000\0" \
+ "boot_fdt=try\0" \
+ "ipaddr=192.168.2.110\0" \
+ "ip_dyn=no\0" \
+ "console=" CONSOLE_DEV "\0" \
+ "fdt_high=0xffffffff\0" \
+ "initrd_high=0xffffffff\0" \
+ "mmcdev=0\0" \
+ "mmcpart=1\0" \
+ "mmcroot="CONFIG_MMCROOT " rootwait rw\0" \
+ "emmcroot=/dev/mmcblk2p2 rootwait rw\0" \
+ "sataroot=/dev/sda2 rw rootwait\0" \
+ "emmcdevconf=setenv mmcdev ${emmcdev}\0" \
+ "emmcrootconf=setenv mmcroot ${emmcroot}\0" \
+ "update_sd_firmware=" \
+ "if test ${ip_dyn} = yes; then " \
+ "setenv get_cmd dhcp; " \
+ "else " \
+ "setenv get_cmd tftp; " \
+ "fi; " \
+ "if mmc dev ${mmcdev}; then " \
+ "if ${get_cmd} ${update_sd_firmware_filename}; then " \
+ "setexpr fw_sz ${filesize} / 0x200; " \
+ "setexpr fw_sz ${fw_sz} + 1; " \
+ "mmc write ${loadaddr} 0x2 ${fw_sz}; " \
+ "fi; " \
+ "fi\0" \
+ EMMC_ENV \
+ "video_args_hdmi=setenv video_args $video_args " \
+ "video=mxcfb${fb}:dev=hdmi,1920x1080M@60,if=RGB24\0" \
+ "video_args_lvds=setenv video_args $video_args " \
+ "video=mxcfb${fb}:dev=ldb,1280x720M@60,if=RGB24\0" \
+ "fb=0\0" \
+ "video_interfaces=hdmi lvds\0" \
+ "video_args_script=" \
+ "for v in ${video_interfaces}; do " \
+ "run video_args_${v}; " \
+ "setexpr fb $fb + 1; " \
+ "done\0" \
+ "mmcargs=setenv bootargs console=${console},${baudrate} " \
+ "root=${mmcroot} " \
+ VIDEO_ARGS "\0" \
+ "loadbootenv=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${bootenv}\0" \
+ "importbootenv=echo Importing environment from mmc ...; " \
+ "env import -t ${loadaddr} ${filesize}\0" \
+ "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
+ "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
+ "mmcboot=echo Booting from mmc ...; " \
+ VIDEO_ARGS_SCRIPT \
+ "run mmcargs; " \
+ "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
+ "if run loadfdt; then " \
+ "bootz ${loadaddr} - ${fdt_addr}; " \
+ "else " \
+ "if test ${boot_fdt} = try; then " \
+ "bootz; " \
+ "else " \
+ "echo WARN: Cannot load the DT; " \
+ "fi; " \
+ "fi; " \
+ "else " \
+ "bootz; " \
+ "fi;\0" \
+ "sataargs=setenv bootargs console=${console},${baudrate} " \
+ "root=${sataroot} " \
+ VIDEO_ARGS "\0" \
+ "loadimagesata=fatload sata 0:1 ${loadaddr} ${image}\0" \
+ "loadfdtsata=fatload sata 0:1 ${fdt_addr} ${fdt_file}\0" \
+ "sataboot=echo Booting from sata ...; " \
+ VIDEO_ARGS_SCRIPT \
+ "run sataargs; " \
+ "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
+ "if run loadfdtsata; then " \
+ "bootz ${loadaddr} - ${fdt_addr}; " \
+ "else " \
+ "if run loadfdtsata; then " \
+ "bootz ${loadaddr} - ${fdt_addr}; " \
+ "else " \
+ "if test ${boot_fdt} = try; then " \
+ "bootz; " \
+ "else " \
+ "echo WARN: Cannot load the DT; " \
+ "fi; " \
+ "fi; " \
+ "fi; " \
+ "else " \
+ "bootz; " \
+ "fi;\0" \
+ "netargs=setenv bootargs console=${console},${baudrate} " \
+ "root=/dev/nfs " \
+ "ip=dhcp nfsroot=${serverip}:${rootnfs},v3,tcp\0" \
+ "netboot=echo Booting from net ...; " \
+ "run netargs; " \
+ "ping ${serverip}; " \
+ "if test ${ip_dyn} = yes; then " \
+ "setenv get_cmd dhcp; " \
+ "else " \
+ "setenv get_cmd tftp; " \
+ "fi; " \
+ "${get_cmd} ${image}; " \
+ "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
+ "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
+ "bootz ${loadaddr} - ${fdt_addr}; " \
+ "else " \
+ "if test ${boot_fdt} = try; then " \
+ "bootz; " \
+ "else " \
+ "echo WARN: Cannot load the DT; " \
+ "fi; " \
+ "fi; " \
+ "else " \
+ "bootz; " \
+ "fi;\0"
+
+#define CONFIG_BOOTCOMMAND \
+ "echo Try first mmc (SD)...; " \
+ "mmc dev ${mmcdev};" \
+ "if mmc rescan; then " \
+ "if run loadbootenv; then " \
+ "echo Loaded environment from ${bootenv};" \
+ "run importbootenv;" \
+ "fi;" \
+ "if run loadimage; then " \
+ "run mmcboot; " \
+ "fi; " \
+ "fi; " \
+ "echo Try second mmc (eMMC)...; " \
+ "run emmcdevconf;" \
+ "run emmcrootconf;" \
+ "mmc dev ${mmcdev};" \
+ "if mmc rescan; then " \
+ "if run loadbootenv; then " \
+ "echo Loaded environment from ${bootenv};" \
+ "run importbootenv;" \
+ "fi;" \
+ "if run loadimage; then " \
+ "run mmcboot; " \
+ "fi; " \
+ "fi; " \
+ "run netboot;"
+
+#endif /* __IGEP0146_CONFIG_H */