]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge branch 'u-boot-imx/master' into 'u-boot-arm/master'
authorAlbert ARIBAUD <albert.u.boot@aribaud.net>
Sat, 8 Jun 2013 12:35:10 +0000 (14:35 +0200)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Sat, 8 Jun 2013 12:35:10 +0000 (14:35 +0200)
Conflicts:
drivers/serial/Makefile

49 files changed:
MAINTAINERS
Makefile
arch/arm/cpu/arm926ejs/mxs/mxs.c
arch/arm/cpu/armv7/vf610/Makefile [new file with mode: 0644]
arch/arm/cpu/armv7/vf610/generic.c [new file with mode: 0644]
arch/arm/cpu/armv7/vf610/timer.c [new file with mode: 0644]
arch/arm/imx-common/Makefile
arch/arm/imx-common/iomux-v3.c
arch/arm/include/asm/arch-vf610/clock.h [new file with mode: 0644]
arch/arm/include/asm/arch-vf610/crm_regs.h [new file with mode: 0644]
arch/arm/include/asm/arch-vf610/imx-regs.h [new file with mode: 0644]
arch/arm/include/asm/arch-vf610/iomux-vf610.h [new file with mode: 0644]
arch/arm/include/asm/imx-common/iomux-v3.h
board/boundary/nitrogen6x/nitrogen6x.c
board/congatec/cgtqmx6eval/Makefile [new file with mode: 0644]
board/congatec/cgtqmx6eval/README [new file with mode: 0644]
board/congatec/cgtqmx6eval/cgtqmx6eval.c [new file with mode: 0644]
board/freescale/mx23evk/mx23evk.c
board/freescale/mx23evk/spl_boot.c
board/freescale/mx28evk/iomux.c
board/freescale/mx28evk/mx28evk.c
board/freescale/mx6qsabreauto/mx6qsabreauto.c
board/freescale/mx6qsabrelite/mx6qsabrelite.c
board/freescale/vf610twr/Makefile [new file with mode: 0644]
board/freescale/vf610twr/imximage.cfg [new file with mode: 0644]
board/freescale/vf610twr/vf610twr.c [new file with mode: 0644]
board/wandboard/README
board/wandboard/wandboard.c
boards.cfg
doc/README.mxc_ocotp
doc/README.vf610 [new file with mode: 0644]
drivers/net/fec_mxc.c
drivers/serial/Makefile
drivers/serial/serial_lpuart.c [new file with mode: 0644]
drivers/video/mxsfb.c
drivers/watchdog/Makefile
include/configs/cgtqmx6eval.h [new file with mode: 0644]
include/configs/mx23evk.h
include/configs/mx28evk.h
include/configs/mx53ard.h
include/configs/mx6qsabre_common.h
include/configs/mx6qsabreauto.h
include/configs/mx6qsabresd.h
include/configs/mx6slevk.h
include/configs/vf610twr.h [new file with mode: 0644]
include/configs/wandboard.h
spl/Makefile
tools/Makefile
tools/logos/wandboard.bmp [new file with mode: 0644]

index 14075afae484998a5bbb12dd14c3eaf41f5337c8..21b498bb7fb5cf29ab5a1ed566ccccc58ed03b93 100644 (file)
@@ -897,6 +897,10 @@ Steve Sakoman <sakoman@gmail.com>
 
        omap3_overo     ARM ARMV7 (OMAP3xx SoC)
 
+Leo Sartre <lsartre@adeneo-embedded.com>
+
+       cgtqmx6qeval            i.MX6Q
+
 Jens Scharsig <esw@bus-elektronik.de>
 
        eb_cpux9k2      ARM920T (AT91RM9200 SoC)
@@ -1066,6 +1070,10 @@ Eric Nelson <eric.nelson@boundarydevices.com>
        nitrogen6s              i.MX6S          512MB
        nitrogen6s1g            i.MX6S          1GB
 
+Alison Wang <b18965@freescale.com>
+
+       vf610twr        VF610
+
 -------------------------------------------------------------------------
 
 Unknown / orphaned boards:
index ef154aa57cc0c73e5f87549e797e9c9d72c74d21..af4c3c0a98daac04d010a165cfb83e6023fde088 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -341,7 +341,7 @@ ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX)$(C
 LIBS-y += $(CPUDIR)/omap-common/libomap-common.o
 endif
 
-ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35 mxs))
+ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35 mxs vf610))
 LIBS-y += arch/$(ARCH)/imx-common/libimx-common.o
 endif
 
index a5e388b5add4d6c02beb83ef1e602edf55c61c4e..45667bd8fb5fc9caba596560d6dfffa90d5dfa82 100644 (file)
@@ -76,13 +76,32 @@ void enable_caches(void)
 #endif
 }
 
+/*
+ * This function will craft a jumptable at 0x0 which will redirect interrupt
+ * vectoring to proper location of U-Boot in RAM.
+ *
+ * The structure of the jumptable will be as follows:
+ *  ldr pc, [pc, #0x18] ..... for each vector, thus repeated 8 times
+ *  <destination address> ... for each previous ldr, thus also repeated 8 times
+ *
+ * The "ldr pc, [pc, #0x18]" instruction above loads address from memory at
+ * offset 0x18 from current value of PC register. Note that PC is already
+ * incremented by 4 when computing the offset, so the effective offset is
+ * actually 0x20, this the associated <destination address>. Loading the PC
+ * register with an address performs a jump to that address.
+ */
 void mx28_fixup_vt(uint32_t start_addr)
 {
-       uint32_t *vt = (uint32_t *)0x20;
+       /* ldr pc, [pc, #0x18] */
+       const uint32_t ldr_pc = 0xe59ff018;
+       /* Jumptable location is 0x0 */
+       uint32_t *vt = (uint32_t *)0x0;
        int i;
 
-       for (i = 0; i < 8; i++)
-               vt[i] = start_addr + (4 * i);
+       for (i = 0; i < 8; i++) {
+               vt[i] = ldr_pc;
+               vt[i + 8] = start_addr + (4 * i);
+       }
 }
 
 #ifdef CONFIG_ARCH_MISC_INIT
diff --git a/arch/arm/cpu/armv7/vf610/Makefile b/arch/arm/cpu/armv7/vf610/Makefile
new file mode 100644 (file)
index 0000000..9232cd4
--- /dev/null
@@ -0,0 +1,42 @@
+#
+# Copyright 2013 Freescale Semiconductor, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(SOC).o
+
+COBJS  += generic.o
+COBJS  += timer.o
+
+SRCS   := $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+
+all:   $(obj).depend $(LIB)
+
+$(LIB):        $(OBJS)
+       $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/arch/arm/cpu/armv7/vf610/generic.c b/arch/arm/cpu/armv7/vf610/generic.c
new file mode 100644 (file)
index 0000000..87f2a86
--- /dev/null
@@ -0,0 +1,324 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/crm_regs.h>
+#include <netdev.h>
+#ifdef CONFIG_FSL_ESDHC
+#include <fsl_esdhc.h>
+#endif
+
+#ifdef CONFIG_FSL_ESDHC
+DECLARE_GLOBAL_DATA_PTR;
+#endif
+
+#ifdef CONFIG_MXC_OCOTP
+void enable_ocotp_clk(unsigned char enable)
+{
+       struct ccm_reg *ccm = (struct ccm_reg *)CCM_BASE_ADDR;
+       u32 reg;
+
+       reg = readl(&ccm->ccgr6);
+       if (enable)
+               reg |= CCM_CCGR6_OCOTP_CTRL_MASK;
+       else
+               reg &= ~CCM_CCGR6_OCOTP_CTRL_MASK;
+       writel(reg, &ccm->ccgr6);
+}
+#endif
+
+static u32 get_mcu_main_clk(void)
+{
+       struct ccm_reg *ccm = (struct ccm_reg *)CCM_BASE_ADDR;
+       u32 ccm_ccsr, ccm_cacrr, armclk_div;
+       u32 sysclk_sel, pll_pfd_sel = 0;
+       u32 freq = 0;
+
+       ccm_ccsr = readl(&ccm->ccsr);
+       sysclk_sel = ccm_ccsr & CCM_CCSR_SYS_CLK_SEL_MASK;
+       sysclk_sel >>= CCM_CCSR_SYS_CLK_SEL_OFFSET;
+
+       ccm_cacrr = readl(&ccm->cacrr);
+       armclk_div = ccm_cacrr & CCM_CACRR_ARM_CLK_DIV_MASK;
+       armclk_div >>= CCM_CACRR_ARM_CLK_DIV_OFFSET;
+       armclk_div += 1;
+
+       switch (sysclk_sel) {
+       case 0:
+               freq = FASE_CLK_FREQ;
+               break;
+       case 1:
+               freq = SLOW_CLK_FREQ;
+               break;
+       case 2:
+               pll_pfd_sel = ccm_ccsr & CCM_CCSR_PLL2_PFD_CLK_SEL_MASK;
+               pll_pfd_sel >>= CCM_CCSR_PLL2_PFD_CLK_SEL_OFFSET;
+               if (pll_pfd_sel == 0)
+                       freq = PLL2_MAIN_FREQ;
+               else if (pll_pfd_sel == 1)
+                       freq = PLL2_PFD1_FREQ;
+               else if (pll_pfd_sel == 2)
+                       freq = PLL2_PFD2_FREQ;
+               else if (pll_pfd_sel == 3)
+                       freq = PLL2_PFD3_FREQ;
+               else if (pll_pfd_sel == 4)
+                       freq = PLL2_PFD4_FREQ;
+               break;
+       case 3:
+               freq = PLL2_MAIN_FREQ;
+               break;
+       case 4:
+               pll_pfd_sel = ccm_ccsr & CCM_CCSR_PLL1_PFD_CLK_SEL_MASK;
+               pll_pfd_sel >>= CCM_CCSR_PLL1_PFD_CLK_SEL_OFFSET;
+               if (pll_pfd_sel == 0)
+                       freq = PLL1_MAIN_FREQ;
+               else if (pll_pfd_sel == 1)
+                       freq = PLL1_PFD1_FREQ;
+               else if (pll_pfd_sel == 2)
+                       freq = PLL1_PFD2_FREQ;
+               else if (pll_pfd_sel == 3)
+                       freq = PLL1_PFD3_FREQ;
+               else if (pll_pfd_sel == 4)
+                       freq = PLL1_PFD4_FREQ;
+               break;
+       case 5:
+               freq = PLL3_MAIN_FREQ;
+               break;
+       default:
+               printf("unsupported system clock select\n");
+       }
+
+       return freq / armclk_div;
+}
+
+static u32 get_bus_clk(void)
+{
+       struct ccm_reg *ccm = (struct ccm_reg *)CCM_BASE_ADDR;
+       u32 ccm_cacrr, busclk_div;
+
+       ccm_cacrr = readl(&ccm->cacrr);
+
+       busclk_div = ccm_cacrr & CCM_CACRR_BUS_CLK_DIV_MASK;
+       busclk_div >>= CCM_CACRR_BUS_CLK_DIV_OFFSET;
+       busclk_div += 1;
+
+       return get_mcu_main_clk() / busclk_div;
+}
+
+static u32 get_ipg_clk(void)
+{
+       struct ccm_reg *ccm = (struct ccm_reg *)CCM_BASE_ADDR;
+       u32 ccm_cacrr, ipgclk_div;
+
+       ccm_cacrr = readl(&ccm->cacrr);
+
+       ipgclk_div = ccm_cacrr & CCM_CACRR_IPG_CLK_DIV_MASK;
+       ipgclk_div >>= CCM_CACRR_IPG_CLK_DIV_OFFSET;
+       ipgclk_div += 1;
+
+       return get_bus_clk() / ipgclk_div;
+}
+
+static u32 get_uart_clk(void)
+{
+       return get_ipg_clk();
+}
+
+static u32 get_sdhc_clk(void)
+{
+       struct ccm_reg *ccm = (struct ccm_reg *)CCM_BASE_ADDR;
+       u32 ccm_cscmr1, ccm_cscdr2, sdhc_clk_sel, sdhc_clk_div;
+       u32 freq = 0;
+
+       ccm_cscmr1 = readl(&ccm->cscmr1);
+       sdhc_clk_sel = ccm_cscmr1 & CCM_CSCMR1_ESDHC1_CLK_SEL_MASK;
+       sdhc_clk_sel >>= CCM_CSCMR1_ESDHC1_CLK_SEL_OFFSET;
+
+       ccm_cscdr2 = readl(&ccm->cscdr2);
+       sdhc_clk_div = ccm_cscdr2 & CCM_CSCDR2_ESDHC1_CLK_DIV_MASK;
+       sdhc_clk_div >>= CCM_CSCDR2_ESDHC1_CLK_DIV_OFFSET;
+       sdhc_clk_div += 1;
+
+       switch (sdhc_clk_sel) {
+       case 0:
+               freq = PLL3_MAIN_FREQ;
+               break;
+       case 1:
+               freq = PLL3_PFD3_FREQ;
+               break;
+       case 2:
+               freq = PLL1_PFD3_FREQ;
+               break;
+       case 3:
+               freq = get_bus_clk();
+               break;
+       }
+
+       return freq / sdhc_clk_div;
+}
+
+u32 get_fec_clk(void)
+{
+       struct ccm_reg *ccm = (struct ccm_reg *)CCM_BASE_ADDR;
+       u32 ccm_cscmr2, rmii_clk_sel;
+       u32 freq = 0;
+
+       ccm_cscmr2 = readl(&ccm->cscmr2);
+       rmii_clk_sel = ccm_cscmr2 & CCM_CSCMR2_RMII_CLK_SEL_MASK;
+       rmii_clk_sel >>= CCM_CSCMR2_RMII_CLK_SEL_OFFSET;
+
+       switch (rmii_clk_sel) {
+       case 0:
+               freq = ENET_EXTERNAL_CLK;
+               break;
+       case 1:
+               freq = AUDIO_EXTERNAL_CLK;
+               break;
+       case 2:
+               freq = PLL5_MAIN_FREQ;
+               break;
+       case 3:
+               freq = PLL5_MAIN_FREQ / 2;
+               break;
+       }
+
+       return freq;
+}
+
+unsigned int mxc_get_clock(enum mxc_clock clk)
+{
+       switch (clk) {
+       case MXC_ARM_CLK:
+               return get_mcu_main_clk();
+       case MXC_BUS_CLK:
+               return get_bus_clk();
+       case MXC_IPG_CLK:
+               return get_ipg_clk();
+       case MXC_UART_CLK:
+               return get_uart_clk();
+       case MXC_ESDHC_CLK:
+               return get_sdhc_clk();
+       case MXC_FEC_CLK:
+               return get_fec_clk();
+       default:
+               break;
+       }
+       return -1;
+}
+
+/* Dump some core clocks */
+int do_vf610_showclocks(cmd_tbl_t *cmdtp, int flag, int argc,
+                        char * const argv[])
+{
+       printf("\n");
+       printf("cpu clock : %8d MHz\n", mxc_get_clock(MXC_ARM_CLK) / 1000000);
+       printf("bus clock : %8d MHz\n", mxc_get_clock(MXC_BUS_CLK) / 1000000);
+       printf("ipg clock : %8d MHz\n", mxc_get_clock(MXC_IPG_CLK) / 1000000);
+
+       return 0;
+}
+
+U_BOOT_CMD(
+       clocks, CONFIG_SYS_MAXARGS, 1, do_vf610_showclocks,
+       "display clocks",
+       ""
+);
+
+#ifdef CONFIG_FEC_MXC
+void imx_get_mac_from_fuse(int dev_id, unsigned char *mac)
+{
+       struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
+       struct fuse_bank *bank = &ocotp->bank[4];
+       struct fuse_bank4_regs *fuse =
+               (struct fuse_bank4_regs *)bank->fuse_regs;
+
+       u32 value = readl(&fuse->mac_addr0);
+       mac[0] = (value >> 8);
+       mac[1] = value;
+
+       value = readl(&fuse->mac_addr1);
+       mac[2] = value >> 24;
+       mac[3] = value >> 16;
+       mac[4] = value >> 8;
+       mac[5] = value;
+}
+#endif
+
+#if defined(CONFIG_DISPLAY_CPUINFO)
+static char *get_reset_cause(void)
+{
+       u32 cause;
+       struct src *src_regs = (struct src *)SRC_BASE_ADDR;
+
+       cause = readl(&src_regs->srsr);
+       writel(cause, &src_regs->srsr);
+       cause &= 0xff;
+
+       switch (cause) {
+       case 0x08:
+               return "WDOG";
+       case 0x20:
+               return "JTAG HIGH-Z";
+       case 0x80:
+               return "EXTERNAL RESET";
+       case 0xfd:
+               return "POR";
+       default:
+               return "unknown reset";
+       }
+}
+
+int print_cpuinfo(void)
+{
+       printf("CPU:   Freescale Vybrid VF610 at %d MHz\n",
+               mxc_get_clock(MXC_ARM_CLK) / 1000000);
+       printf("Reset cause: %s\n", get_reset_cause());
+
+       return 0;
+}
+#endif
+
+int cpu_eth_init(bd_t *bis)
+{
+       int rc = -ENODEV;
+
+#if defined(CONFIG_FEC_MXC)
+       rc = fecmxc_initialize(bis);
+#endif
+
+       return rc;
+}
+
+#ifdef CONFIG_FSL_ESDHC
+int cpu_mmc_init(bd_t *bis)
+{
+       return fsl_esdhc_mmc_init(bis);
+}
+#endif
+
+int get_clocks(void)
+{
+#ifdef CONFIG_FSL_ESDHC
+       gd->arch.sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
+#endif
+       return 0;
+}
diff --git a/arch/arm/cpu/armv7/vf610/timer.c b/arch/arm/cpu/armv7/vf610/timer.c
new file mode 100644 (file)
index 0000000..f8fbed7
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <div64.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/clock.h>
+
+static struct pit_reg *cur_pit = (struct pit_reg *)PIT_BASE_ADDR;
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define TIMER_LOAD_VAL 0xffffffff
+
+static inline unsigned long long tick_to_time(unsigned long long tick)
+{
+       tick *= CONFIG_SYS_HZ;
+       do_div(tick, mxc_get_clock(MXC_IPG_CLK));
+
+       return tick;
+}
+
+static inline unsigned long long us_to_tick(unsigned long long usec)
+{
+       usec = usec * mxc_get_clock(MXC_IPG_CLK)  + 999999;
+       do_div(usec, 1000000);
+
+       return usec;
+}
+
+int timer_init(void)
+{
+       __raw_writel(0, &cur_pit->mcr);
+
+       __raw_writel(TIMER_LOAD_VAL, &cur_pit->ldval1);
+       __raw_writel(0, &cur_pit->tctrl1);
+       __raw_writel(1, &cur_pit->tctrl1);
+
+       gd->arch.tbl = 0;
+       gd->arch.tbu = 0;
+
+       return 0;
+}
+
+unsigned long long get_ticks(void)
+{
+       ulong now = TIMER_LOAD_VAL - __raw_readl(&cur_pit->cval1);
+
+       /* increment tbu if tbl has rolled over */
+       if (now < gd->arch.tbl)
+               gd->arch.tbu++;
+       gd->arch.tbl = now;
+
+       return (((unsigned long long)gd->arch.tbu) << 32) | gd->arch.tbl;
+}
+
+ulong get_timer_masked(void)
+{
+       return tick_to_time(get_ticks());
+}
+
+ulong get_timer(ulong base)
+{
+       return get_timer_masked() - base;
+}
+
+/* delay x useconds AND preserve advance timstamp value */
+void __udelay(unsigned long usec)
+{
+       unsigned long long start;
+       ulong tmo;
+
+       start = get_ticks();                    /* get current timestamp */
+       tmo = us_to_tick(usec);                 /* convert usecs to ticks */
+       while ((get_ticks() - start) < tmo)
+               ;                               /* loop till time has passed */
+}
+
+/*
+ * This function is derived from PowerPC code (timebase clock frequency).
+ * On ARM it returns the number of timer ticks per second.
+ */
+ulong get_tbclk(void)
+{
+       return mxc_get_clock(MXC_IPG_CLK);
+}
index 8bba8a57bf4ac870c88b1095efef846c47547e4b..949232661500f517d25d131486a1b58d28fe43f1 100644 (file)
@@ -27,7 +27,7 @@ include $(TOPDIR)/config.mk
 
 LIB     = $(obj)libimx-common.o
 
-ifeq ($(SOC),$(filter $(SOC),mx25 mx35 mx5 mx6))
+ifeq ($(SOC),$(filter $(SOC),mx25 mx35 mx5 mx6 vf610))
 COBJS-y        = iomux-v3.o
 endif
 ifeq ($(SOC),$(filter $(SOC),mx5 mx6))
index 7fe5ce7ce554e487e5cdfa720957579b144b0912..35880c7a7ceb6d7219e28757c53299fd459b736d 100644 (file)
@@ -48,8 +48,14 @@ void imx_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
        if (sel_input_ofs)
                __raw_writel(sel_input, base + sel_input_ofs);
 
+#ifdef CONFIG_IOMUX_SHARE_CONF_REG
+       if (!(pad_ctrl & NO_PAD_CTRL))
+               __raw_writel((mux_mode << PAD_MUX_MODE_SHIFT) | pad_ctrl,
+                       base + pad_ctrl_ofs);
+#else
        if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs)
                __raw_writel(pad_ctrl, base + pad_ctrl_ofs);
+#endif
 }
 
 void imx_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t const *pad_list,
diff --git a/arch/arm/include/asm/arch-vf610/clock.h b/arch/arm/include/asm/arch-vf610/clock.h
new file mode 100644 (file)
index 0000000..04e418c
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __ASM_ARCH_CLOCK_H
+#define __ASM_ARCH_CLOCK_H
+
+#include <common.h>
+
+enum mxc_clock {
+       MXC_ARM_CLK = 0,
+       MXC_BUS_CLK,
+       MXC_IPG_CLK,
+       MXC_UART_CLK,
+       MXC_ESDHC_CLK,
+       MXC_FEC_CLK,
+};
+
+void enable_ocotp_clk(unsigned char enable);
+unsigned int mxc_get_clock(enum mxc_clock clk);
+
+#define imx_get_fecclk() mxc_get_clock(MXC_FEC_CLK)
+
+#endif /* __ASM_ARCH_CLOCK_H */
diff --git a/arch/arm/include/asm/arch-vf610/crm_regs.h b/arch/arm/include/asm/arch-vf610/crm_regs.h
new file mode 100644 (file)
index 0000000..e3f703d
--- /dev/null
@@ -0,0 +1,225 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __ARCH_ARM_MACH_VF610_CCM_REGS_H__
+#define __ARCH_ARM_MACH_VF610_CCM_REGS_H__
+
+#ifndef __ASSEMBLY__
+
+/* Clock Controller Module (CCM) */
+struct ccm_reg {
+       u32 ccr;
+       u32 csr;
+       u32 ccsr;
+       u32 cacrr;
+       u32 cscmr1;
+       u32 cscdr1;
+       u32 cscdr2;
+       u32 cscdr3;
+       u32 cscmr2;
+       u32 cscdr4;
+       u32 ctor;
+       u32 clpcr;
+       u32 cisr;
+       u32 cimr;
+       u32 ccosr;
+       u32 cgpr;
+       u32 ccgr0;
+       u32 ccgr1;
+       u32 ccgr2;
+       u32 ccgr3;
+       u32 ccgr4;
+       u32 ccgr5;
+       u32 ccgr6;
+       u32 ccgr7;
+       u32 ccgr8;
+       u32 ccgr9;
+       u32 ccgr10;
+       u32 ccgr11;
+       u32 cmeor0;
+       u32 cmeor1;
+       u32 cmeor2;
+       u32 cmeor3;
+       u32 cmeor4;
+       u32 cmeor5;
+       u32 cppdsr;
+       u32 ccowr;
+       u32 ccpgr0;
+       u32 ccpgr1;
+       u32 ccpgr2;
+       u32 ccpgr3;
+};
+
+/* Analog components control digital interface (ANADIG) */
+struct anadig_reg {
+       u32 pll3_ctrl;
+       u32 resv0[3];
+       u32 pll7_ctrl;
+       u32 resv1[3];
+       u32 pll2_ctrl;
+       u32 resv2[3];
+       u32 pll2_ss;
+       u32 resv3[3];
+       u32 pll2_num;
+       u32 resv4[3];
+       u32 pll2_denom;
+       u32 resv5[3];
+       u32 pll4_ctrl;
+       u32 resv6[3];
+       u32 pll4_num;
+       u32 resv7[3];
+       u32 pll4_denom;
+       u32 pll6_ctrl;
+       u32 resv8[3];
+       u32 pll6_num;
+       u32 resv9[3];
+       u32 pll6_denom;
+       u32 resv10[3];
+       u32 pll5_ctrl;
+       u32 resv11[3];
+       u32 pll3_pfd;
+       u32 resv12[3];
+       u32 pll2_pfd;
+       u32 resv13[3];
+       u32 reg_1p1;
+       u32 resv14[3];
+       u32 reg_3p0;
+       u32 resv15[3];
+       u32 reg_2p5;
+       u32 resv16[7];
+       u32 ana_misc0;
+       u32 resv17[3];
+       u32 ana_misc1;
+       u32 resv18[63];
+       u32 anadig_digprog;
+       u32 resv19[3];
+       u32 pll1_ctrl;
+       u32 resv20[3];
+       u32 pll1_ss;
+       u32 resv21[3];
+       u32 pll1_num;
+       u32 resv22[3];
+       u32 pll1_denom;
+       u32 resv23[3];
+       u32 pll1_pdf;
+       u32 resv24[3];
+       u32 pll_lock;
+};
+#endif
+
+#define CCM_CCR_FIRC_EN                                (1 << 16)
+#define CCM_CCR_OSCNT_MASK                     0xff
+#define CCM_CCR_OSCNT(v)                       ((v) & 0xff)
+
+#define CCM_CCSR_PLL2_PFD_CLK_SEL_OFFSET       19
+#define CCM_CCSR_PLL2_PFD_CLK_SEL_MASK         (0x7 << 19)
+#define CCM_CCSR_PLL2_PFD_CLK_SEL(v)           (((v) & 0x7) << 19)
+
+#define CCM_CCSR_PLL1_PFD_CLK_SEL_OFFSET       16
+#define CCM_CCSR_PLL1_PFD_CLK_SEL_MASK         (0x7 << 16)
+#define CCM_CCSR_PLL1_PFD_CLK_SEL(v)           (((v) & 0x7) << 16)
+
+#define CCM_CCSR_PLL2_PFD4_EN                  (1 << 15)
+#define CCM_CCSR_PLL2_PFD3_EN                  (1 << 14)
+#define CCM_CCSR_PLL2_PFD2_EN                  (1 << 13)
+#define CCM_CCSR_PLL2_PFD1_EN                  (1 << 12)
+#define CCM_CCSR_PLL1_PFD4_EN                  (1 << 11)
+#define CCM_CCSR_PLL1_PFD3_EN                  (1 << 10)
+#define CCM_CCSR_PLL1_PFD2_EN                  (1 << 9)
+#define CCM_CCSR_PLL1_PFD1_EN                  (1 << 8)
+
+#define CCM_CCSR_DDRC_CLK_SEL(v)               ((v) << 6)
+#define CCM_CCSR_FAST_CLK_SEL(v)               ((v) << 5)
+
+#define CCM_CCSR_SYS_CLK_SEL_OFFSET            0
+#define CCM_CCSR_SYS_CLK_SEL_MASK              0x7
+#define CCM_CCSR_SYS_CLK_SEL(v)                        ((v) & 0x7)
+
+#define CCM_CACRR_IPG_CLK_DIV_OFFSET           11
+#define CCM_CACRR_IPG_CLK_DIV_MASK             (0x3 << 11)
+#define CCM_CACRR_IPG_CLK_DIV(v)               (((v) & 0x3) << 11)
+#define CCM_CACRR_BUS_CLK_DIV_OFFSET           3
+#define CCM_CACRR_BUS_CLK_DIV_MASK             (0x7 << 3)
+#define CCM_CACRR_BUS_CLK_DIV(v)               (((v) & 0x7) << 3)
+#define CCM_CACRR_ARM_CLK_DIV_OFFSET           0
+#define CCM_CACRR_ARM_CLK_DIV_MASK             0x7
+#define CCM_CACRR_ARM_CLK_DIV(v)               ((v) & 0x7)
+
+#define CCM_CSCMR1_ESDHC1_CLK_SEL_OFFSET       18
+#define CCM_CSCMR1_ESDHC1_CLK_SEL_MASK         (0x3 << 18)
+#define CCM_CSCMR1_ESDHC1_CLK_SEL(v)           (((v) & 0x3) << 18)
+
+#define CCM_CSCDR1_RMII_CLK_EN                 (1 << 24)
+
+#define CCM_CSCDR2_ESDHC1_EN                   (1 << 29)
+#define CCM_CSCDR2_ESDHC1_CLK_DIV_OFFSET       20
+#define CCM_CSCDR2_ESDHC1_CLK_DIV_MASK         (0xf << 20)
+#define CCM_CSCDR2_ESDHC1_CLK_DIV(v)           (((v) & 0xf) << 20)
+
+#define CCM_CSCMR2_RMII_CLK_SEL_OFFSET         4
+#define CCM_CSCMR2_RMII_CLK_SEL_MASK           (0x3 << 4)
+#define CCM_CSCMR2_RMII_CLK_SEL(v)             (((v) & 0x3) << 4)
+
+#define CCM_REG_CTRL_MASK                      0xffffffff
+#define CCM_CCGR0_UART1_CTRL_MASK              (0x3 << 16)
+#define CCM_CCGR1_PIT_CTRL_MASK                        (0x3 << 14)
+#define CCM_CCGR1_WDOGA5_CTRL_MASK             (0x3 << 28)
+#define CCM_CCGR2_IOMUXC_CTRL_MASK             (0x3 << 16)
+#define CCM_CCGR2_PORTA_CTRL_MASK              (0x3 << 18)
+#define CCM_CCGR2_PORTB_CTRL_MASK              (0x3 << 20)
+#define CCM_CCGR2_PORTC_CTRL_MASK              (0x3 << 22)
+#define CCM_CCGR2_PORTD_CTRL_MASK              (0x3 << 24)
+#define CCM_CCGR2_PORTE_CTRL_MASK              (0x3 << 26)
+#define CCM_CCGR3_ANADIG_CTRL_MASK             0x3
+#define CCM_CCGR4_WKUP_CTRL_MASK               (0x3 << 20)
+#define CCM_CCGR4_CCM_CTRL_MASK                        (0x3 << 22)
+#define CCM_CCGR4_GPC_CTRL_MASK                        (0x3 << 24)
+#define CCM_CCGR6_OCOTP_CTRL_MASK              (0x3 << 10)
+#define CCM_CCGR6_DDRMC_CTRL_MASK              (0x3 << 28)
+#define CCM_CCGR7_SDHC1_CTRL_MASK              (0x3 << 4)
+#define CCM_CCGR9_FEC0_CTRL_MASK               0x3
+#define CCM_CCGR9_FEC1_CTRL_MASK               (0x3 << 2)
+
+#define ANADIG_PLL2_CTRL_ENABLE                        (1 << 13)
+#define ANADIG_PLL2_CTRL_POWERDOWN             (1 << 12)
+#define ANADIG_PLL2_CTRL_DIV_SELECT            1
+#define ANADIG_PLL1_CTRL_ENABLE                        (1 << 13)
+#define ANADIG_PLL1_CTRL_POWERDOWN             (1 << 12)
+#define ANADIG_PLL1_CTRL_DIV_SELECT            1
+
+#define FASE_CLK_FREQ          24000000
+#define SLOW_CLK_FREQ          32000
+#define PLL1_PFD1_FREQ         500000000
+#define PLL1_PFD2_FREQ         452000000
+#define PLL1_PFD3_FREQ         396000000
+#define PLL1_PFD4_FREQ         528000000
+#define PLL1_MAIN_FREQ         528000000
+#define PLL2_PFD1_FREQ         500000000
+#define PLL2_PFD2_FREQ         396000000
+#define PLL2_PFD3_FREQ         339000000
+#define PLL2_PFD4_FREQ         413000000
+#define PLL2_MAIN_FREQ         528000000
+#define PLL3_MAIN_FREQ         480000000
+#define PLL3_PFD3_FREQ         298000000
+#define PLL5_MAIN_FREQ         500000000
+
+#define ENET_EXTERNAL_CLK      50000000
+#define AUDIO_EXTERNAL_CLK     24576000
+
+#endif /*__ARCH_ARM_MACH_VF610_CCM_REGS_H__ */
diff --git a/arch/arm/include/asm/arch-vf610/imx-regs.h b/arch/arm/include/asm/arch-vf610/imx-regs.h
new file mode 100644 (file)
index 0000000..c9df32a
--- /dev/null
@@ -0,0 +1,419 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __ASM_ARCH_IMX_REGS_H__
+#define __ASM_ARCH_IMX_REGS_H__
+
+#define ARCH_MXC
+
+#define IRAM_BASE_ADDR         0x3F000000      /* internal ram */
+#define IRAM_SIZE              0x00080000      /* 512 KB */
+
+#define AIPS0_BASE_ADDR                0x40000000
+#define AIPS1_BASE_ADDR                0x40080000
+
+/* AIPS 0 */
+#define MSCM_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00001000)
+#define MSCM_IR_BASE_ADDR      (AIPS0_BASE_ADDR + 0x00001800)
+#define CA5SCU_BASE_ADDR       (AIPS0_BASE_ADDR + 0x00002000)
+#define CA5_INTD_BASE_ADDR     (AIPS0_BASE_ADDR + 0x00003000)
+#define CA5_L2C_BASE_ADDR      (AIPS0_BASE_ADDR + 0x00006000)
+#define NIC0_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00008000)
+#define NIC1_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00009000)
+#define NIC2_BASE_ADDR         (AIPS0_BASE_ADDR + 0x0000A000)
+#define NIC3_BASE_ADDR         (AIPS0_BASE_ADDR + 0x0000B000)
+#define NIC4_BASE_ADDR         (AIPS0_BASE_ADDR + 0x0000C000)
+#define NIC5_BASE_ADDR         (AIPS0_BASE_ADDR + 0x0000D000)
+#define NIC6_BASE_ADDR         (AIPS0_BASE_ADDR + 0x0000E000)
+#define NIC7_BASE_ADDR         (AIPS0_BASE_ADDR + 0x0000F000)
+#define AHBTZASC_BASE_ADDR     (AIPS0_BASE_ADDR + 0x00010000)
+#define TZASC_SYS0_BASE_ADDR   (AIPS0_BASE_ADDR + 0x00011000)
+#define TZASC_SYS1_BASE_ADDR   (AIPS0_BASE_ADDR + 0x00012000)
+#define TZASC_GFX_BASE_ADDR    (AIPS0_BASE_ADDR + 0x00013000)
+#define TZASC_DDR0_BASE_ADDR   (AIPS0_BASE_ADDR + 0x00014000)
+#define TZASC_DDR1_BASE_ADDR   (AIPS0_BASE_ADDR + 0x00015000)
+#define CSU_BASE_ADDR          (AIPS0_BASE_ADDR + 0x00017000)
+#define DMA0_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00018000)
+#define DMA0_TCD_BASE_ADDR     (AIPS0_BASE_ADDR + 0x00019000)
+#define SEMA4_BASE_ADDR                (AIPS0_BASE_ADDR + 0x0001D000)
+#define FB_BASE_ADDR           (AIPS0_BASE_ADDR + 0x0001E000)
+#define DMA_MUX0_BASE_ADDR     (AIPS0_BASE_ADDR + 0x00024000)
+#define UART0_BASE             (AIPS0_BASE_ADDR + 0x00027000)
+#define UART1_BASE             (AIPS0_BASE_ADDR + 0x00028000)
+#define UART2_BASE             (AIPS0_BASE_ADDR + 0x00029000)
+#define UART3_BASE             (AIPS0_BASE_ADDR + 0x0002A000)
+#define SPI0_BASE_ADDR         (AIPS0_BASE_ADDR + 0x0002C000)
+#define SPI1_BASE_ADDR         (AIPS0_BASE_ADDR + 0x0002D000)
+#define SAI0_BASE_ADDR         (AIPS0_BASE_ADDR + 0x0002F000)
+#define SAI1_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00030000)
+#define SAI2_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00031000)
+#define SAI3_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00032000)
+#define CRC_BASE_ADDR          (AIPS0_BASE_ADDR + 0x00033000)
+#define PDB_BASE_ADDR          (AIPS0_BASE_ADDR + 0x00036000)
+#define PIT_BASE_ADDR          (AIPS0_BASE_ADDR + 0x00037000)
+#define FTM0_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00038000)
+#define FTM1_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00039000)
+#define ADC_BASE_ADDR          (AIPS0_BASE_ADDR + 0x0003B000)
+#define TCON0_BASE_ADDR                (AIPS0_BASE_ADDR + 0x0003D000)
+#define WDOG1_BASE_ADDR                (AIPS0_BASE_ADDR + 0x0003E000)
+#define LPTMR_BASE_ADDR                (AIPS0_BASE_ADDR + 0x00040000)
+#define RLE_BASE_ADDR          (AIPS0_BASE_ADDR + 0x00042000)
+#define MLB_BASE_ADDR          (AIPS0_BASE_ADDR + 0x00043000)
+#define QSPI0_BASE_ADDR                (AIPS0_BASE_ADDR + 0x00044000)
+#define IOMUXC_BASE_ADDR       (AIPS0_BASE_ADDR + 0x00048000)
+#define ANADIG_BASE_ADDR       (AIPS0_BASE_ADDR + 0x00050000)
+#define SCSCM_BASE_ADDR                (AIPS0_BASE_ADDR + 0x00052000)
+#define ASRC_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00060000)
+#define SPDIF_BASE_ADDR                (AIPS0_BASE_ADDR + 0x00061000)
+#define ESAI_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00062000)
+#define ESAI_FIFO_BASE_ADDR    (AIPS0_BASE_ADDR + 0x00063000)
+#define WDOG_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00065000)
+#define I2C0_BASE_ADDR         (AIPS0_BASE_ADDR + 0x00066000)
+#define WKUP_BASE_ADDR         (AIPS0_BASE_ADDR + 0x0006A000)
+#define CCM_BASE_ADDR          (AIPS0_BASE_ADDR + 0x0006B000)
+#define GPC_BASE_ADDR          (AIPS0_BASE_ADDR + 0x0006C000)
+#define VREG_DIG_BASE_ADDR     (AIPS0_BASE_ADDR + 0x0006D000)
+#define SRC_BASE_ADDR          (AIPS0_BASE_ADDR + 0x0006E000)
+#define CMU_BASE_ADDR          (AIPS0_BASE_ADDR + 0x0006F000)
+
+/* AIPS 1 */
+#define OCOTP_BASE_ADDR                (AIPS1_BASE_ADDR + 0x00025000)
+#define DDR_BASE_ADDR          (AIPS1_BASE_ADDR + 0x0002E000)
+#define ESDHC0_BASE_ADDR       (AIPS1_BASE_ADDR + 0x00031000)
+#define ESDHC1_BASE_ADDR       (AIPS1_BASE_ADDR + 0x00032000)
+#define ENET_BASE_ADDR         (AIPS1_BASE_ADDR + 0x00050000)
+
+/* MUX mode and PAD ctrl are in one register */
+#define CONFIG_IOMUX_SHARE_CONF_REG
+
+#define FEC_QUIRK_ENET_MAC
+
+/* MSCM interrupt rounter */
+#define MSCM_IRSPRC_CP0_EN                             1
+#define MSCM_IRSPRC_NUM                                        112
+
+/* DDRMC */
+#define DDRMC_PHY_DQ_TIMING                            0x00002613
+#define DDRMC_PHY_DQS_TIMING                           0x00002615
+#define DDRMC_PHY_CTRL                                 0x01210080
+#define DDRMC_PHY_MASTER_CTRL                          0x0001012a
+#define DDRMC_PHY_SLAVE_CTRL                           0x00012020
+
+#define DDRMC_PHY50_DDR3_MODE                          (1 << 12)
+#define DDRMC_PHY50_EN_SW_HALF_CYCLE                   (1 << 8)
+
+#define DDRMC_CR00_DRAM_CLASS_DDR3                     (0x6 << 8)
+#define DDRMC_CR00_DRAM_CLASS_LPDDR2                   (0x5 << 8)
+#define DDRMC_CR00_START                               1
+#define DDRMC_CR02_DRAM_TINIT(v)                       ((v) & 0xffffff)
+#define DDRMC_CR10_TRST_PWRON(v)                       (v)
+#define DDRMC_CR11_CKE_INACTIVE(v)                     (v)
+#define DDRMC_CR12_WRLAT(v)                            (((v) & 0x1f) << 8)
+#define DDRMC_CR12_CASLAT_LIN(v)                       ((v) & 0x3f)
+#define DDRMC_CR13_TRC(v)                              (((v) & 0xff) << 24)
+#define DDRMC_CR13_TRRD(v)                             (((v) & 0xff) << 16)
+#define DDRMC_CR13_TCCD(v)                             (((v) & 0x1f) << 8)
+#define DDRMC_CR13_TBST_INT_INTERVAL(v)                        ((v) & 0x7)
+#define DDRMC_CR14_TFAW(v)                             (((v) & 0x3f) << 24)
+#define DDRMC_CR14_TRP(v)                              (((v) & 0x1f) << 16)
+#define DDRMC_CR14_TWTR(v)                             (((v) & 0xf) << 8)
+#define DDRMC_CR14_TRAS_MIN(v)                         ((v) & 0xff)
+#define DDRMC_CR16_TMRD(v)                             (((v) & 0x1f) << 24)
+#define DDRMC_CR16_TRTP(v)                             (((v) & 0xf) << 16)
+#define DDRMC_CR17_TRAS_MAX(v)                         (((v) & 0x1ffff) << 8)
+#define DDRMC_CR17_TMOD(v)                             ((v) & 0xff)
+#define DDRMC_CR18_TCKESR(v)                           (((v) & 0x1f) << 8)
+#define DDRMC_CR18_TCKE(v)                             ((v) & 0x7)
+#define DDRMC_CR20_AP_EN                               (1 << 24)
+#define DDRMC_CR21_TRCD_INT(v)                         (((v) & 0xff) << 16)
+#define DDRMC_CR21_TRAS_LOCKOUT                                (1 << 8)
+#define DDRMC_CR21_CCMAP_EN                            1
+#define DDRMC_CR22_TDAL(v)                             (((v) & 0x3f) << 16)
+#define DDRMC_CR23_BSTLEN(v)                           (((v) & 0x7) << 24)
+#define DDRMC_CR23_TDLL(v)                             ((v) & 0xff)
+#define DDRMC_CR24_TRP_AB(v)                           ((v) & 0x1f)
+#define DDRMC_CR25_TREF_EN                             (1 << 16)
+#define DDRMC_CR26_TREF(v)                             (((v) & 0xffff) << 16)
+#define DDRMC_CR26_TRFC(v)                             ((v) & 0x3ff)
+#define DDRMC_CR28_TREF_INT(v)                         ((v) & 0xffff)
+#define DDRMC_CR29_TPDEX(v)                            ((v) & 0xffff)
+#define DDRMC_CR30_TXPDLL(v)                           ((v) & 0xffff)
+#define DDRMC_CR31_TXSNR(v)                            (((v) & 0xffff) << 16)
+#define DDRMC_CR31_TXSR(v)                             ((v) & 0xffff)
+#define DDRMC_CR33_EN_QK_SREF                          (1 << 16)
+#define DDRMC_CR34_CKSRX(v)                            (((v) & 0xf) << 16)
+#define DDRMC_CR34_CKSRE(v)                            (((v) & 0xf) << 8)
+#define DDRMC_CR38_FREQ_CHG_EN                         (1 << 8)
+#define DDRMC_CR39_PHY_INI_COM(v)                      (((v) & 0xffff) << 16)
+#define DDRMC_CR39_PHY_INI_STA(v)                      (((v) & 0xff) << 8)
+#define DDRMC_CR39_FRQ_CH_DLLOFF(v)                    ((v) & 0x3)
+#define DDRMC_CR41_PHY_INI_STRT_INI_DIS                        1
+#define DDRMC_CR48_MR1_DA_0(v)                         (((v) & 0xffff) << 16)
+#define DDRMC_CR48_MR0_DA_0(v)                         ((v) & 0xffff)
+#define DDRMC_CR66_ZQCL(v)                             (((v) & 0xfff) << 16)
+#define DDRMC_CR66_ZQINIT(v)                           ((v) & 0xfff)
+#define DDRMC_CR67_ZQCS(v)                             ((v) & 0xfff)
+#define DDRMC_CR69_ZQ_ON_SREF_EX(v)                    (((v) & 0xf) << 8)
+#define DDRMC_CR70_REF_PER_ZQ(v)                       (v)
+#define DDRMC_CR72_ZQCS_ROTATE                         (1 << 24)
+#define DDRMC_CR73_APREBIT(v)                          (((v) & 0xf) << 24)
+#define DDRMC_CR73_COL_DIFF(v)                         (((v) & 0x7) << 16)
+#define DDRMC_CR73_ROW_DIFF(v)                         (((v) & 0x3) << 8)
+#define DDRMC_CR74_BANKSPLT_EN                         (1 << 24)
+#define DDRMC_CR74_ADDR_CMP_EN                         (1 << 16)
+#define DDRMC_CR74_CMD_AGE_CNT(v)                      (((v) & 0xff) << 8)
+#define DDRMC_CR74_AGE_CNT(v)                          ((v) & 0xff)
+#define DDRMC_CR75_RW_PG_EN                            (1 << 24)
+#define DDRMC_CR75_RW_EN                               (1 << 16)
+#define DDRMC_CR75_PRI_EN                              (1 << 8)
+#define DDRMC_CR75_PLEN                                        1
+#define DDRMC_CR76_NQENT_ACTDIS(v)                     (((v) & 0x7) << 24)
+#define DDRMC_CR76_D_RW_G_BKCN(v)                      (((v) & 0x3) << 16)
+#define DDRMC_CR76_W2R_SPLT_EN                         (1 << 8)
+#define DDRMC_CR76_CS_EN                               1
+#define DDRMC_CR77_CS_MAP                              (1 << 24)
+#define DDRMC_CR77_DI_RD_INTLEAVE                      (1 << 8)
+#define DDRMC_CR77_SWAP_EN                             1
+#define DDRMC_CR78_BUR_ON_FLY_BIT(v)                   ((v) & 0xf)
+#define DDRMC_CR79_CTLUPD_AREF                         (1 << 24)
+#define DDRMC_CR82_INT_MASK                            0x1fffffff
+#define DDRMC_CR87_ODT_WR_MAPCS0                       (1 << 24)
+#define DDRMC_CR87_ODT_RD_MAPCS0                       (1 << 16)
+#define DDRMC_CR88_TODTL_CMD(v)                                (((v) & 0x1f) << 16)
+#define DDRMC_CR89_AODT_RWSMCS(v)                      ((v) & 0xf)
+#define DDRMC_CR91_R2W_SMCSDL(v)                       (((v) & 0x7) << 16)
+#define DDRMC_CR96_WLMRD(v)                            (((v) & 0x3f) << 8)
+#define DDRMC_CR96_WLDQSEN(v)                          ((v) & 0x3f)
+#define DDRMC_CR105_RDLVL_DL_0(v)                      (((v) & 0xff) << 8)
+#define DDRMC_CR110_RDLVL_DL_1(v)                      ((v) & 0xff)
+#define DDRMC_CR114_RDLVL_GTDL_2(v)                    (((v) & 0xffff) << 8)
+#define DDRMC_CR117_AXI0_W_PRI(v)                      (((v) & 0x3) << 8)
+#define DDRMC_CR117_AXI0_R_PRI(v)                      ((v) & 0x3)
+#define DDRMC_CR118_AXI1_W_PRI(v)                      (((v) & 0x3) << 24)
+#define DDRMC_CR118_AXI1_R_PRI(v)                      (((v) & 0x3) << 16)
+#define DDRMC_CR120_AXI0_PRI1_RPRI(v)                  (((v) & 0xf) << 24)
+#define DDRMC_CR120_AXI0_PRI0_RPRI(v)                  (((v) & 0xf) << 16)
+#define DDRMC_CR121_AXI0_PRI3_RPRI(v)                  (((v) & 0xf) << 8)
+#define DDRMC_CR121_AXI0_PRI2_RPRI(v)                  ((v) & 0xf)
+#define DDRMC_CR122_AXI1_PRI1_RPRI(v)                  (((v) & 0xf) << 24)
+#define DDRMC_CR122_AXI1_PRI0_RPRI(v)                  (((v) & 0xf) << 16)
+#define DDRMC_CR122_AXI0_PRIRLX(v)                     ((v) & 0x3ff)
+#define DDRMC_CR123_AXI1_PRI3_RPRI(v)                  (((v) & 0xf) << 8)
+#define DDRMC_CR123_AXI1_PRI2_RPRI(v)                  ((v) & 0xf)
+#define DDRMC_CR124_AXI1_PRIRLX(v)                     ((v) & 0x3ff)
+#define DDRMC_CR126_PHY_RDLAT(v)                       (((v) & 0x3f) << 8)
+#define DDRMC_CR132_WRLAT_ADJ(v)                       (((v) & 0x1f) << 8)
+#define DDRMC_CR132_RDLAT_ADJ(v)                       ((v) & 0x3f)
+#define DDRMC_CR139_PHY_WRLV_RESPLAT(v)                        (((v) & 0xff) << 24)
+#define DDRMC_CR139_PHY_WRLV_LOAD(v)                   (((v) & 0xff) << 16)
+#define DDRMC_CR139_PHY_WRLV_DLL(v)                    (((v) & 0xff) << 8)
+#define DDRMC_CR139_PHY_WRLV_EN(v)                     ((v) & 0xff)
+#define DDRMC_CR154_PAD_ZQ_EARLY_CMP_EN_TIMER(v)       (((v) & 0x1f) << 27)
+#define DDRMC_CR154_PAD_ZQ_MODE(v)                     (((v) & 0x3) << 21)
+#define DDRMC_CR155_AXI0_AWCACHE                       (1 << 10)
+#define DDRMC_CR155_PAD_ODT_BYTE1(v)                   ((v) & 0x7)
+#define DDRMC_CR158_TWR(v)                             ((v) & 0x3f)
+
+#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
+#include <asm/types.h>
+
+/* System Reset Controller (SRC) */
+struct src {
+       u32 scr;
+       u32 sbmr1;
+       u32 srsr;
+       u32 secr;
+       u32 gpsr;
+       u32 sicr;
+       u32 simr;
+       u32 sbmr2;
+       u32 gpr0;
+       u32 gpr1;
+       u32 gpr2;
+       u32 gpr3;
+       u32 gpr4;
+       u32 hab0;
+       u32 hab1;
+       u32 hab2;
+       u32 hab3;
+       u32 hab4;
+       u32 hab5;
+       u32 misc0;
+       u32 misc1;
+       u32 misc2;
+       u32 misc3;
+};
+
+/* Periodic Interrupt Timer (PIT) */
+struct pit_reg {
+       u32 mcr;
+       u32 recv0[55];
+       u32 ltmr64h;
+       u32 ltmr64l;
+       u32 recv1[6];
+       u32 ldval0;
+       u32 cval0;
+       u32 tctrl0;
+       u32 tflg0;
+       u32 ldval1;
+       u32 cval1;
+       u32 tctrl1;
+       u32 tflg1;
+       u32 ldval2;
+       u32 cval2;
+       u32 tctrl2;
+       u32 tflg2;
+       u32 ldval3;
+       u32 cval3;
+       u32 tctrl3;
+       u32 tflg3;
+       u32 ldval4;
+       u32 cval4;
+       u32 tctrl4;
+       u32 tflg4;
+       u32 ldval5;
+       u32 cval5;
+       u32 tctrl5;
+       u32 tflg5;
+       u32 ldval6;
+       u32 cval6;
+       u32 tctrl6;
+       u32 tflg6;
+       u32 ldval7;
+       u32 cval7;
+       u32 tctrl7;
+       u32 tflg7;
+};
+
+/* Watchdog Timer (WDOG) */
+struct wdog_regs {
+       u16 wcr;
+       u16 wsr;
+       u16 wrsr;
+       u16 wicr;
+       u16 wmcr;
+};
+
+/* LPDDR2/DDR3 SDRAM Memory Controller (DDRMC) */
+struct ddrmr_regs {
+       u32 cr[162];
+       u32 rsvd[94];
+       u32 phy[53];
+};
+
+/* On-Chip One Time Programmable Controller (OCOTP) */
+struct ocotp_regs {
+       u32 ctrl;
+       u32 ctrl_set;
+       u32 ctrl_clr;
+       u32 ctrl_tog;
+       u32 timing;
+       u32 rsvd0[3];
+       u32 data;
+       u32 rsvd1[3];
+       u32 read_ctrl;
+       u32 rsvd2[3];
+       u32 read_fuse_data;
+       u32 rsvd3[7];
+       u32 scs;
+       u32 scs_set;
+       u32 scs_clr;
+       u32 scs_tog;
+       u32 crc_addr;
+       u32 rsvd4[3];
+       u32 crc_value;
+       u32 rsvd5[3];
+       u32 version;
+       u32 rsvd6[0xdb];
+
+       struct fuse_bank {
+               u32 fuse_regs[0x20];
+       } bank[16];
+};
+
+struct fuse_bank0_regs {
+       u32 lock;
+       u32 rsvd0[3];
+       u32 uid_low;
+       u32 rsvd1[3];
+       u32 uid_high;
+       u32 rsvd2[0x17];
+};
+
+struct fuse_bank4_regs {
+       u32 sjc_resp0;
+       u32 rsvd0[3];
+       u32 sjc_resp1;
+       u32 rsvd1[3];
+       u32 mac_addr0;
+       u32 rsvd2[3];
+       u32 mac_addr1;
+       u32 rsvd3[3];
+       u32 mac_addr2;
+       u32 rsvd4[3];
+       u32 mac_addr3;
+       u32 rsvd5[3];
+       u32 gp1;
+       u32 rsvd6[3];
+       u32 gp2;
+       u32 rsvd7[3];
+};
+
+/* UART */
+struct lpuart_fsl {
+       u8 ubdh;
+       u8 ubdl;
+       u8 uc1;
+       u8 uc2;
+       u8 us1;
+       u8 us2;
+       u8 uc3;
+       u8 ud;
+       u8 uma1;
+       u8 uma2;
+       u8 uc4;
+       u8 uc5;
+       u8 ued;
+       u8 umodem;
+       u8 uir;
+       u8 reserved;
+       u8 upfifo;
+       u8 ucfifo;
+       u8 usfifo;
+       u8 utwfifo;
+       u8 utcfifo;
+       u8 urwfifo;
+       u8 urcfifo;
+       u8 rsvd[28];
+};
+
+/* MSCM Interrupt Router */
+struct mscm_ir {
+       u32 ircp0ir;
+       u32 ircp1ir;
+       u32 rsvd1[6];
+       u32 ircpgir;
+       u32 rsvd2[23];
+       u16 irsprc[112];
+       u16 rsvd3[848];
+};
+
+#endif /* __ASSEMBLER__*/
+
+#endif /* __ASM_ARCH_IMX_REGS_H__ */
diff --git a/arch/arm/include/asm/arch-vf610/iomux-vf610.h b/arch/arm/include/asm/arch-vf610/iomux-vf610.h
new file mode 100644 (file)
index 0000000..1c728fa
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __IOMUX_VF610_H__
+#define __IOMUX_VF610_H__
+
+#include <asm/imx-common/iomux-v3.h>
+
+/* Pad control groupings */
+#define VF610_UART_PAD_CTRL    (PAD_CTL_PUS_100K_UP | PAD_CTL_DSE_25ohm | \
+                               PAD_CTL_OBE_IBE_ENABLE)
+#define VF610_SDHC_PAD_CTRL    (PAD_CTL_PUS_100K_UP | PAD_CTL_DSE_20ohm | \
+                               PAD_CTL_OBE_IBE_ENABLE)
+#define VF610_ENET_PAD_CTRL    (PAD_CTL_PUS_47K_UP | PAD_CTL_DSE_50ohm | \
+                               PAD_CTL_OBE_IBE_ENABLE)
+#define VF610_DDR_PAD_CTRL     PAD_CTL_DSE_25ohm
+
+enum {
+       VF610_PAD_PTA6__RMII0_CLKIN             = IOMUX_PAD(0x0000, 0x0000, 2, __NA_, 0, VF610_ENET_PAD_CTRL),
+       VF610_PAD_PTB4__UART1_TX                = IOMUX_PAD(0x0068, 0x0068, 2, 0x0380, 0, VF610_UART_PAD_CTRL),
+       VF610_PAD_PTB5__UART1_RX                = IOMUX_PAD(0x006c, 0x006c, 2, 0x037c, 0, VF610_UART_PAD_CTRL),
+       VF610_PAD_PTC1__RMII0_MDIO              = IOMUX_PAD(0x00b8, 0x00b8, 1, __NA_, 0, VF610_ENET_PAD_CTRL),
+       VF610_PAD_PTC0__RMII0_MDC               = IOMUX_PAD(0x00b4, 0x00b4, 1, __NA_, 0, VF610_ENET_PAD_CTRL),
+       VF610_PAD_PTC2__RMII0_CRS_DV            = IOMUX_PAD(0x00bc, 0x00bc, 1, __NA_, 0, VF610_ENET_PAD_CTRL),
+       VF610_PAD_PTC3__RMII0_RD1               = IOMUX_PAD(0x00c0, 0x00c0, 1, __NA_, 0, VF610_ENET_PAD_CTRL),
+       VF610_PAD_PTC4__RMII0_RD0               = IOMUX_PAD(0x00c4, 0x00c4, 1, __NA_, 0, VF610_ENET_PAD_CTRL),
+       VF610_PAD_PTC5__RMII0_RXER              = IOMUX_PAD(0x00c8, 0x00c8, 1, __NA_, 0, VF610_ENET_PAD_CTRL),
+       VF610_PAD_PTC6__RMII0_TD1               = IOMUX_PAD(0x00cc, 0x00cc, 1, __NA_, 0, VF610_ENET_PAD_CTRL),
+       VF610_PAD_PTC7__RMII0_TD0               = IOMUX_PAD(0x00D0, 0x00D0, 1, __NA_, 0, VF610_ENET_PAD_CTRL),
+       VF610_PAD_PTC8__RMII0_TXEN              = IOMUX_PAD(0x00D4, 0x00D4, 1, __NA_, 0, VF610_ENET_PAD_CTRL),
+       VF610_PAD_PTA24__ESDHC1_CLK             = IOMUX_PAD(0x0038, 0x0038, 5, __NA_, 0, VF610_SDHC_PAD_CTRL),
+       VF610_PAD_PTA25__ESDHC1_CMD             = IOMUX_PAD(0x003c, 0x003c, 5, __NA_, 0, VF610_SDHC_PAD_CTRL),
+       VF610_PAD_PTA26__ESDHC1_DAT0            = IOMUX_PAD(0x0040, 0x0040, 5, __NA_, 0, VF610_SDHC_PAD_CTRL),
+       VF610_PAD_PTA27__ESDHC1_DAT1            = IOMUX_PAD(0x0044, 0x0044, 5, __NA_, 0, VF610_SDHC_PAD_CTRL),
+       VF610_PAD_PTA28__ESDHC1_DAT2            = IOMUX_PAD(0x0048, 0x0048, 5, __NA_, 0, VF610_SDHC_PAD_CTRL),
+       VF610_PAD_PTA29__ESDHC1_DAT3            = IOMUX_PAD(0x004c, 0x004c, 5, __NA_, 0, VF610_SDHC_PAD_CTRL),
+       VF610_PAD_DDR_A15__DDR_A_15             = IOMUX_PAD(0x0220, 0x0220, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A14__DDR_A_14             = IOMUX_PAD(0x0224, 0x0224, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A13__DDR_A_13             = IOMUX_PAD(0x0228, 0x0228, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A12__DDR_A_12             = IOMUX_PAD(0x022c, 0x022c, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A11__DDR_A_11             = IOMUX_PAD(0x0230, 0x0230, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A10__DDR_A_10             = IOMUX_PAD(0x0234, 0x0234, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A9__DDR_A_9               = IOMUX_PAD(0x0238, 0x0238, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A8__DDR_A_8               = IOMUX_PAD(0x023c, 0x023c, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A7__DDR_A_7               = IOMUX_PAD(0x0240, 0x0240, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A6__DDR_A_6               = IOMUX_PAD(0x0244, 0x0244, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A5__DDR_A_5               = IOMUX_PAD(0x0248, 0x0248, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A4__DDR_A_4               = IOMUX_PAD(0x024c, 0x024c, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A3__DDR_A_3               = IOMUX_PAD(0x0250, 0x0250, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A2__DDR_A_2               = IOMUX_PAD(0x0254, 0x0254, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_A1__DDR_A_1               = IOMUX_PAD(0x0258, 0x0258, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_BA2__DDR_BA_2             = IOMUX_PAD(0x0260, 0x0260, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_BA1__DDR_BA_1             = IOMUX_PAD(0x0264, 0x0264, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_BA0__DDR_BA_0             = IOMUX_PAD(0x0268, 0x0268, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_CAS__DDR_CAS_B            = IOMUX_PAD(0x026c, 0x026c, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_CKE__DDR_CKE_0            = IOMUX_PAD(0x0270, 0x0270, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_CLK__DDR_CLK_0            = IOMUX_PAD(0x0274, 0x0274, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_CS__DDR_CS_B_0            = IOMUX_PAD(0x0278, 0x0278, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D15__DDR_D_15             = IOMUX_PAD(0x027c, 0x027c, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D14__DDR_D_14             = IOMUX_PAD(0x0280, 0x0280, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D13__DDR_D_13             = IOMUX_PAD(0x0284, 0x0284, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D12__DDR_D_12             = IOMUX_PAD(0x0288, 0x0288, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D11__DDR_D_11             = IOMUX_PAD(0x028c, 0x028c, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D10__DDR_D_10             = IOMUX_PAD(0x0290, 0x0290, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D9__DDR_D_9               = IOMUX_PAD(0x0294, 0x0294, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D8__DDR_D_8               = IOMUX_PAD(0x0298, 0x0298, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D7__DDR_D_7               = IOMUX_PAD(0x029c, 0x029c, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D6__DDR_D_6               = IOMUX_PAD(0x02a0, 0x02a0, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D5__DDR_D_5               = IOMUX_PAD(0x02a4, 0x02a4, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D4__DDR_D_4               = IOMUX_PAD(0x02a8, 0x02a8, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D3__DDR_D_3               = IOMUX_PAD(0x02ac, 0x02ac, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D2__DDR_D_2               = IOMUX_PAD(0x02b0, 0x02b0, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D1__DDR_D_1               = IOMUX_PAD(0x02b4, 0x02b4, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_D0__DDR_D_0               = IOMUX_PAD(0x02b8, 0x02b8, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_DQM1__DDR_DQM_1           = IOMUX_PAD(0x02bc, 0x02bc, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_DQM0__DDR_DQM_0           = IOMUX_PAD(0x02c0, 0x02c0, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_DQS1__DDR_DQS_1           = IOMUX_PAD(0x02c4, 0x02c4, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_DQS0__DDR_DQS_0           = IOMUX_PAD(0x02c8, 0x02c8, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_RAS__DDR_RAS_B            = IOMUX_PAD(0x02cc, 0x02cc, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_WE__DDR_WE_B              = IOMUX_PAD(0x02d0, 0x02d0, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_ODT1__DDR_ODT_0           = IOMUX_PAD(0x02d4, 0x02d4, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+       VF610_PAD_DDR_ODT0__DDR_ODT_1           = IOMUX_PAD(0x02d8, 0x02d8, 0, __NA_, 0, VF610_DDR_PAD_CTRL),
+};
+
+#endif /* __IOMUX_VF610_H__ */
index 0b4e76333e456159599f656afed7c1c91c36b2d3..ebf54cf187a9dec38df0dc3058ddaed28968f2fe 100644 (file)
@@ -121,6 +121,24 @@ typedef u64 iomux_v3_cfg_t;
 #define PAD_CTL_DSE_40ohm      (6 << 3)
 #define PAD_CTL_DSE_34ohm      (7 << 3)
 
+#elif defined(CONFIG_VF610)
+
+#define PAD_MUX_MODE_SHIFT     20
+
+#define PAD_CTL_SPEED_MED      (1 << 12)
+#define PAD_CTL_SPEED_HIGH     (3 << 12)
+
+#define PAD_CTL_DSE_50ohm      (3 << 6)
+#define PAD_CTL_DSE_25ohm      (6 << 6)
+#define PAD_CTL_DSE_20ohm      (7 << 6)
+
+#define PAD_CTL_PUS_47K_UP     (1 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_100K_UP    (2 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PKE            (1 << 3)
+#define PAD_CTL_PUE            (1 << 2 | PAD_CTL_PKE)
+
+#define PAD_CTL_OBE_IBE_ENABLE (3 << 0)
+
 #else
 
 #define PAD_CTL_DVS            (1 << 13)
index e155556ce2d38d35f32e7bc4fd96a71e6341c0ab..8f0f9b8de2e8e77fcbf477728ea063a213941dd0 100644 (file)
@@ -336,7 +336,6 @@ iomux_v3_cfg_t const ecspi1_pads[] = {
 
 void setup_spi(void)
 {
-       gpio_direction_output(CONFIG_SF_DEFAULT_CS, 1);
        imx_iomux_v3_setup_multiple_pads(ecspi1_pads,
                                         ARRAY_SIZE(ecspi1_pads));
 }
diff --git a/board/congatec/cgtqmx6eval/Makefile b/board/congatec/cgtqmx6eval/Makefile
new file mode 100644 (file)
index 0000000..ac16c1f
--- /dev/null
@@ -0,0 +1,42 @@
+#
+# Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de>
+#
+# (C) Copyright 2011 Freescale Semiconductor, Inc.
+# (C) Copyright 2013 Adeneo Embedded <www.adeneo-embedded.com>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).o
+
+COBJS  := cgtqmx6eval.o
+
+SRCS   := $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/congatec/cgtqmx6eval/README b/board/congatec/cgtqmx6eval/README
new file mode 100644 (file)
index 0000000..bbf0f75
--- /dev/null
@@ -0,0 +1,29 @@
+U-Boot for the Congatec Conga-QEVAl Evaluation Carrier board with
+qmx6 quad module.
+
+This file contains information for the port of U-Boot to the Congatec
+Conga-QEVAl Evaluation Carrier board with qmx6 quad module.
+
+1. Boot source, boot from SD card
+---------------------------------
+
+This version of u-boot works only on the SD card. By default, the
+Congatec board can boot only from the SPI-NOR.
+But, with the u-boot version provided with the board you can write boot
+registers to force the board to reboot and boot from the SD slot. If
+"bmode" command is not available from your pre-installed u-boot, these
+instruction will produce the same effect:
+
+conga-QMX6 U-Boot > mw.l 0x20d8040 0x3850
+conga-QMX6 U-Boot > mw.l 0x020d8044 0x10000000
+conga-QMX6 U-Boot > reset
+resetting ...
+
+The the board will reboot and, if you have written your SD correctly
+the board will use u-boot that live into the SD
+
+To copy the resulting u-boot.imx to the SD card:
+
+ dd if=u-boot.imx of=/dev/xxx bs=512 seek=2
+
+Note: Replace xxx with the device representing the SD card in your system.
diff --git a/board/congatec/cgtqmx6eval/cgtqmx6eval.c b/board/congatec/cgtqmx6eval/cgtqmx6eval.c
new file mode 100644 (file)
index 0000000..f70f674
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2010-2011 Freescale Semiconductor, Inc.
+ * Based on mx6qsabrelite.c file
+ * Copyright (C) 2013, Adeneo Embedded <www.adeneo-embedded.com>
+ * Leo Sartre, <lsartre@adeneo-embedded.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/iomux.h>
+#include <asm/arch/mx6-pins.h>
+#include <asm/gpio.h>
+#include <asm/imx-common/iomux-v3.h>
+#include <asm/imx-common/boot_mode.h>
+#include <mmc.h>
+#include <fsl_esdhc.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |\
+       PAD_CTL_DSE_40ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
+
+#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP  | PAD_CTL_SPEED_LOW |\
+       PAD_CTL_DSE_80ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
+
+int dram_init(void)
+{
+       gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
+
+       return 0;
+}
+
+iomux_v3_cfg_t const uart2_pads[] = {
+       MX6_PAD_EIM_D26__UART2_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
+       MX6_PAD_EIM_D27__UART2_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
+};
+
+iomux_v3_cfg_t const usdhc2_pads[] = {
+       MX6_PAD_SD2_CLK__USDHC2_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD2_CMD__USDHC2_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD2_DAT0__USDHC2_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD2_DAT1__USDHC2_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD2_DAT2__USDHC2_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD2_DAT3__USDHC2_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_GPIO_4__GPIO_1_4      | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+};
+
+iomux_v3_cfg_t const usdhc4_pads[] = {
+       MX6_PAD_SD4_CLK__USDHC4_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD4_CMD__USDHC4_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD4_DAT0__USDHC4_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD4_DAT1__USDHC4_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD4_DAT2__USDHC4_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD4_DAT3__USDHC4_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD4_DAT4__USDHC4_DAT4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD4_DAT5__USDHC4_DAT5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD4_DAT6__USDHC4_DAT6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_SD4_DAT7__USDHC4_DAT7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX6_PAD_NANDF_D6__GPIO_2_6    | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
+};
+
+static void setup_iomux_uart(void)
+{
+       imx_iomux_v3_setup_multiple_pads(uart2_pads, ARRAY_SIZE(uart2_pads));
+}
+
+#ifdef CONFIG_FSL_ESDHC
+struct fsl_esdhc_cfg usdhc_cfg[] = {
+       {USDHC2_BASE_ADDR},
+       {USDHC4_BASE_ADDR},
+};
+
+int board_mmc_getcd(struct mmc *mmc)
+{
+       struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
+       int ret = 0;
+
+       switch (cfg->esdhc_base) {
+       case USDHC2_BASE_ADDR:
+               gpio_direction_input(IMX_GPIO_NR(1, 4));
+               ret = !gpio_get_value(IMX_GPIO_NR(1, 4));
+               break;
+       case USDHC4_BASE_ADDR:
+               gpio_direction_input(IMX_GPIO_NR(2, 6));
+               ret = !gpio_get_value(IMX_GPIO_NR(2, 6));
+               break;
+       default:
+               printf("Bad USDHC interface\n");
+       }
+
+       return ret;
+}
+
+int board_mmc_init(bd_t *bis)
+{
+       s32 status = 0;
+
+       usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
+       usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK);
+
+       imx_iomux_v3_setup_multiple_pads(
+                               usdhc2_pads, ARRAY_SIZE(usdhc2_pads));
+       imx_iomux_v3_setup_multiple_pads(
+                               usdhc4_pads, ARRAY_SIZE(usdhc4_pads));
+
+       status = fsl_esdhc_initialize(bis, &usdhc_cfg[0]) |
+                    fsl_esdhc_initialize(bis, &usdhc_cfg[1]);
+
+       return status;
+}
+#endif
+
+int board_early_init_f(void)
+{
+       setup_iomux_uart();
+
+       return 0;
+}
+
+int board_init(void)
+{
+       /* address of boot parameters */
+       gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
+
+       return 0;
+}
+
+int checkboard(void)
+{
+       puts("Board: Conga-QEVAL QMX6 Quad\n");
+
+       return 0;
+}
+
+#ifdef CONFIG_CMD_BMODE
+static const struct boot_mode board_boot_modes[] = {
+       /* 4 bit bus width */
+       {"mmc0",        MAKE_CFGVAL(0x50, 0x20, 0x00, 0x00)},
+       {"mmc1",        MAKE_CFGVAL(0x50, 0x38, 0x00, 0x00)},
+       {NULL,          0},
+};
+#endif
+
+int misc_init_r(void)
+{
+#ifdef CONFIG_CMD_BMODE
+       add_board_boot_modes(board_boot_modes);
+#endif
+       return 0;
+}
index 41ba303ec446570793750fa236d6d360eae3cbf0..d25e2b37ce2d1410154a8a21a174308195b6ad7c 100644 (file)
@@ -43,6 +43,12 @@ int board_early_init_f(void)
        /* SSP0 clock at 96MHz */
        mxs_set_sspclk(MXC_SSPCLK0, 96000, 0);
 
+       /* Power on LCD */
+       gpio_direction_output(MX23_PAD_LCD_RESET__GPIO_1_18, 1);
+
+       /* Set contrast to maximum */
+       gpio_direction_output(MX23_PAD_PWM2__GPIO_1_28, 1);
+
        return 0;
 }
 
index 6be8c8d9d0be6ab4cdea0e1804b0ebfbd53c0b6d..fd71f7dc1ba854756685ccf5bf2bce4481c34ab9 100644 (file)
@@ -27,6 +27,7 @@
 
 #define        MUX_CONFIG_SSP1 (MXS_PAD_8MA | MXS_PAD_PULLUP)
 #define        MUX_CONFIG_EMI  (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_PULLUP)
+#define        MUX_CONFIG_LCD  (MXS_PAD_4MA | MXS_PAD_NOPULL)
 
 const iomux_cfg_t iomux_setup[] = {
        /* DUART */
@@ -96,6 +97,37 @@ const iomux_cfg_t iomux_setup[] = {
        /* Slot Power Enable */
        MX23_PAD_PWM3__GPIO_1_29 |
                (MXS_PAD_4MA | MXS_PAD_3V3 | MXS_PAD_NOPULL),
+       /* LCD */
+       MX23_PAD_LCD_D00__LCD_D00 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D01__LCD_D01 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D02__LCD_D02 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D03__LCD_D03 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D04__LCD_D04 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D05__LCD_D05 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D06__LCD_D06 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D07__LCD_D07 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D08__LCD_D08 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D09__LCD_D09 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D10__LCD_D10 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D11__LCD_D11 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D12__LCD_D12 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D13__LCD_D13 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D14__LCD_D14 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D15__LCD_D15 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D16__LCD_D16 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_D17__LCD_D17 | MUX_CONFIG_LCD,
+       MX23_PAD_GPMI_D08__LCD_D18 | MUX_CONFIG_LCD,
+       MX23_PAD_GPMI_D09__LCD_D19 | MUX_CONFIG_LCD,
+       MX23_PAD_GPMI_D10__LCD_D20 | MUX_CONFIG_LCD,
+       MX23_PAD_GPMI_D11__LCD_D21 | MUX_CONFIG_LCD,
+       MX23_PAD_GPMI_D12__LCD_D22 | MUX_CONFIG_LCD,
+       MX23_PAD_GPMI_D13__LCD_D23 | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_DOTCK__LCD_DOTCK | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_ENABLE__LCD_ENABLE | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_HSYNC__LCD_HSYNC | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_VSYNC__LCD_VSYNC | MUX_CONFIG_LCD,
+       MX23_PAD_LCD_RESET__GPIO_1_18 | MUX_CONFIG_LCD, /* LCD power */
+       MX23_PAD_PWM2__GPIO_1_28 | MUX_CONFIG_LCD, /* LCD contrast */
 };
 
 #define HW_DRAM_CTL14  (0x38 >> 2)
index ae6eda343ed8f1fdb37a2ed14578e4e994c1d9e2..beae0e66e22fec9e1123fe4795acde67fc811011 100644 (file)
@@ -30,6 +30,7 @@
 #define        MUX_CONFIG_ENET (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP)
 #define        MUX_CONFIG_EMI  (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL)
 #define        MUX_CONFIG_SSP2 (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_PULLUP)
+#define        MUX_CONFIG_LCD  (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
 
 const iomux_cfg_t iomux_setup[] = {
        /* DUART */
@@ -162,6 +163,38 @@ const iomux_cfg_t iomux_setup[] = {
        /* I2C */
        MX28_PAD_I2C0_SCL__I2C0_SCL,
        MX28_PAD_I2C0_SDA__I2C0_SDA,
+
+       /* LCD */
+       MX28_PAD_LCD_D00__LCD_D0 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D01__LCD_D1 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D02__LCD_D2 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D03__LCD_D3 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D04__LCD_D4 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D05__LCD_D5 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D06__LCD_D6 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D07__LCD_D7 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D08__LCD_D8 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D09__LCD_D9 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D10__LCD_D10 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D11__LCD_D11 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D12__LCD_D12 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D13__LCD_D13 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D14__LCD_D14 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D15__LCD_D15 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D16__LCD_D16 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D17__LCD_D17 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D18__LCD_D18 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D19__LCD_D19 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D20__LCD_D20 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D21__LCD_D21 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D22__LCD_D22 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_D23__LCD_D23 | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_RD_E__LCD_VSYNC | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_WR_RWN__LCD_HSYNC | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_RS__LCD_DOTCLK | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_CS__LCD_ENABLE | MUX_CONFIG_LCD,
+       MX28_PAD_LCD_RESET__GPIO_3_30 | MUX_CONFIG_LCD, /* LCD power */
+       MX28_PAD_PWM2__GPIO_3_18 | MUX_CONFIG_LCD, /* LCD contrast */
 };
 
 #define HW_DRAM_CTL29  (0x74 >> 2)
index de7231bd10bde92e982aa4e81f79c59994f74ce4..4edd9f41932e403ed06f70483e95dafc288c2e53 100644 (file)
@@ -59,6 +59,12 @@ int board_early_init_f(void)
        gpio_direction_output(MX28_PAD_AUART2_RX__GPIO_3_8, 1);
 #endif
 
+       /* Power on LCD */
+       gpio_direction_output(MX28_PAD_LCD_RESET__GPIO_3_30, 1);
+
+       /* Set contrast to maximum */
+       gpio_direction_output(MX28_PAD_PWM2__GPIO_3_18, 1);
+
        return 0;
 }
 
index bfe4868e8a856da8144d808683dc23437ec84ebf..2a6e3a919225df42b68174e873e6767ef855c87a 100644 (file)
 #include <asm/errno.h>
 #include <asm/gpio.h>
 #include <asm/imx-common/iomux-v3.h>
+#include <asm/imx-common/mxc_i2c.h>
 #include <asm/imx-common/boot_mode.h>
 #include <mmc.h>
 #include <fsl_esdhc.h>
 #include <miiphy.h>
 #include <netdev.h>
 #include <asm/arch/sys_proto.h>
+#include <i2c.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -46,6 +48,12 @@ DECLARE_GLOBAL_DATA_PTR;
 #define ENET_PAD_CTRL  (PAD_CTL_PUS_100K_UP |                  \
        PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS)
 
+#define I2C_PAD_CTRL   (PAD_CTL_PUS_100K_UP |                  \
+       PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS |   \
+       PAD_CTL_ODE | PAD_CTL_SRE_FAST)
+
+#define PC MUX_PAD_CTRL(I2C_PAD_CTRL)
+
 int dram_init(void)
 {
        gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
@@ -76,6 +84,45 @@ iomux_v3_cfg_t const enet_pads[] = {
        MX6_PAD_RGMII_RX_CTL__RGMII_RX_CTL      | MUX_PAD_CTRL(ENET_PAD_CTRL),
 };
 
+/* I2C2 PMIC, iPod, Tuner, Codec, Touch, HDMI EDID, MIPI CSI2 card */
+struct i2c_pads_info i2c_pad_info1 = {
+       .scl = {
+               .i2c_mode = MX6_PAD_EIM_EB2__I2C2_SCL | PC,
+               .gpio_mode = MX6_PAD_EIM_EB2__GPIO_2_30 | PC,
+               .gp = IMX_GPIO_NR(2, 30)
+       },
+       .sda = {
+               .i2c_mode = MX6_PAD_KEY_ROW3__I2C2_SDA | PC,
+               .gpio_mode = MX6_PAD_KEY_ROW3__GPIO_4_13 | PC,
+               .gp = IMX_GPIO_NR(4, 13)
+       }
+};
+
+/*
+ * I2C3 MLB, Port Expanders (A, B, C), Video ADC, Light Sensor,
+ * Compass Sensor, Accelerometer, Res Touch
+ */
+struct i2c_pads_info i2c_pad_info2 = {
+       .scl = {
+               .i2c_mode = MX6_PAD_GPIO_3__I2C3_SCL | PC,
+               .gpio_mode = MX6_PAD_GPIO_3__GPIO_1_3 | PC,
+               .gp = IMX_GPIO_NR(1, 3)
+       },
+       .sda = {
+               .i2c_mode = MX6_PAD_EIM_D18__I2C3_SDA | PC,
+               .gpio_mode = MX6_PAD_EIM_D18__GPIO_3_18 | PC,
+               .gp = IMX_GPIO_NR(3, 18)
+       }
+};
+
+iomux_v3_cfg_t const i2c3_pads[] = {
+       MX6_PAD_EIM_A24__GPIO_5_4               | MUX_PAD_CTRL(NO_PAD_CTRL),
+};
+
+iomux_v3_cfg_t const port_exp[] = {
+       MX6_PAD_SD2_DAT0__GPIO_1_15             | MUX_PAD_CTRL(NO_PAD_CTRL),
+};
+
 static void setup_iomux_enet(void)
 {
        imx_iomux_v3_setup_multiple_pads(enet_pads, ARRAY_SIZE(enet_pads));
@@ -216,6 +263,16 @@ int board_init(void)
        /* address of boot parameters */
        gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
 
+       /* I2C 2 and 3 setup - I2C 3 hw mux with EIM */
+       setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);
+       /* I2C 3 Steer */
+       gpio_direction_output(IMX_GPIO_NR(5, 4), 1);
+       imx_iomux_v3_setup_multiple_pads(i2c3_pads, ARRAY_SIZE(i2c3_pads));
+       setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2);
+
+       gpio_direction_output(IMX_GPIO_NR(1, 15), 1);
+       imx_iomux_v3_setup_multiple_pads(port_exp, ARRAY_SIZE(port_exp));
+
        return 0;
 }
 
index 8ce054e42840a4a10a71a14c1df14387f1d3f771..862bc3099d1bdec201845634de63706e0944c34b 100644 (file)
@@ -308,7 +308,6 @@ iomux_v3_cfg_t const ecspi1_pads[] = {
 
 void setup_spi(void)
 {
-       gpio_direction_output(CONFIG_SF_DEFAULT_CS, 1);
        imx_iomux_v3_setup_multiple_pads(ecspi1_pads,
                                         ARRAY_SIZE(ecspi1_pads));
 }
diff --git a/board/freescale/vf610twr/Makefile b/board/freescale/vf610twr/Makefile
new file mode 100644 (file)
index 0000000..7416228
--- /dev/null
@@ -0,0 +1,39 @@
+#
+# Copyright 2013 Freescale Semiconductor, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).o
+
+COBJS  := $(BOARD).o
+
+SRCS   := $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/freescale/vf610twr/imximage.cfg b/board/freescale/vf610twr/imximage.cfg
new file mode 100644 (file)
index 0000000..b00d4c1
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not write to the Free Software
+ * Foundation Inc. 51 Franklin Street Fifth Floor Boston,
+ * MA 02110-1301 USA
+ *
+ * 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
+ */
+#include <asm/imx-common/imximage.cfg>
+
+/* image version */
+IMAGE_VERSION  2
+
+/* Boot Offset 0x400, valid for both SD and NAND boot */
+BOOT_OFFSET    FLASH_OFFSET_STANDARD
diff --git a/board/freescale/vf610twr/vf610twr.c b/board/freescale/vf610twr/vf610twr.c
new file mode 100644 (file)
index 0000000..f14df8b
--- /dev/null
@@ -0,0 +1,407 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/iomux-vf610.h>
+#include <asm/arch/crm_regs.h>
+#include <asm/arch/clock.h>
+#include <mmc.h>
+#include <fsl_esdhc.h>
+#include <miiphy.h>
+#include <netdev.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
+                       PAD_CTL_DSE_25ohm | PAD_CTL_OBE_IBE_ENABLE)
+
+#define ESDHC_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_HIGH | \
+                       PAD_CTL_DSE_20ohm | PAD_CTL_OBE_IBE_ENABLE)
+
+#define ENET_PAD_CTRL  (PAD_CTL_PUS_47K_UP | PAD_CTL_SPEED_HIGH | \
+                       PAD_CTL_DSE_50ohm | PAD_CTL_OBE_IBE_ENABLE)
+
+void setup_iomux_ddr(void)
+{
+       static const iomux_v3_cfg_t ddr_pads[] = {
+               VF610_PAD_DDR_A15__DDR_A_15,
+               VF610_PAD_DDR_A15__DDR_A_15,
+               VF610_PAD_DDR_A14__DDR_A_14,
+               VF610_PAD_DDR_A13__DDR_A_13,
+               VF610_PAD_DDR_A12__DDR_A_12,
+               VF610_PAD_DDR_A11__DDR_A_11,
+               VF610_PAD_DDR_A10__DDR_A_10,
+               VF610_PAD_DDR_A9__DDR_A_9,
+               VF610_PAD_DDR_A8__DDR_A_8,
+               VF610_PAD_DDR_A7__DDR_A_7,
+               VF610_PAD_DDR_A6__DDR_A_6,
+               VF610_PAD_DDR_A5__DDR_A_5,
+               VF610_PAD_DDR_A4__DDR_A_4,
+               VF610_PAD_DDR_A3__DDR_A_3,
+               VF610_PAD_DDR_A2__DDR_A_2,
+               VF610_PAD_DDR_A1__DDR_A_1,
+               VF610_PAD_DDR_BA2__DDR_BA_2,
+               VF610_PAD_DDR_BA1__DDR_BA_1,
+               VF610_PAD_DDR_BA0__DDR_BA_0,
+               VF610_PAD_DDR_CAS__DDR_CAS_B,
+               VF610_PAD_DDR_CKE__DDR_CKE_0,
+               VF610_PAD_DDR_CLK__DDR_CLK_0,
+               VF610_PAD_DDR_CS__DDR_CS_B_0,
+               VF610_PAD_DDR_D15__DDR_D_15,
+               VF610_PAD_DDR_D14__DDR_D_14,
+               VF610_PAD_DDR_D13__DDR_D_13,
+               VF610_PAD_DDR_D12__DDR_D_12,
+               VF610_PAD_DDR_D11__DDR_D_11,
+               VF610_PAD_DDR_D10__DDR_D_10,
+               VF610_PAD_DDR_D9__DDR_D_9,
+               VF610_PAD_DDR_D8__DDR_D_8,
+               VF610_PAD_DDR_D7__DDR_D_7,
+               VF610_PAD_DDR_D6__DDR_D_6,
+               VF610_PAD_DDR_D5__DDR_D_5,
+               VF610_PAD_DDR_D4__DDR_D_4,
+               VF610_PAD_DDR_D3__DDR_D_3,
+               VF610_PAD_DDR_D2__DDR_D_2,
+               VF610_PAD_DDR_D1__DDR_D_1,
+               VF610_PAD_DDR_D0__DDR_D_0,
+               VF610_PAD_DDR_DQM1__DDR_DQM_1,
+               VF610_PAD_DDR_DQM0__DDR_DQM_0,
+               VF610_PAD_DDR_DQS1__DDR_DQS_1,
+               VF610_PAD_DDR_DQS0__DDR_DQS_0,
+               VF610_PAD_DDR_RAS__DDR_RAS_B,
+               VF610_PAD_DDR_WE__DDR_WE_B,
+               VF610_PAD_DDR_ODT1__DDR_ODT_0,
+               VF610_PAD_DDR_ODT0__DDR_ODT_1,
+       };
+
+       imx_iomux_v3_setup_multiple_pads(ddr_pads, ARRAY_SIZE(ddr_pads));
+}
+
+void ddr_phy_init(void)
+{
+       struct ddrmr_regs *ddrmr = (struct ddrmr_regs *)DDR_BASE_ADDR;
+
+       writel(DDRMC_PHY_DQ_TIMING, &ddrmr->phy[0]);
+       writel(DDRMC_PHY_DQ_TIMING, &ddrmr->phy[16]);
+       writel(DDRMC_PHY_DQ_TIMING, &ddrmr->phy[32]);
+       writel(DDRMC_PHY_DQ_TIMING, &ddrmr->phy[48]);
+
+       writel(DDRMC_PHY_DQS_TIMING, &ddrmr->phy[1]);
+       writel(DDRMC_PHY_DQS_TIMING, &ddrmr->phy[17]);
+       writel(DDRMC_PHY_DQS_TIMING, &ddrmr->phy[33]);
+       writel(DDRMC_PHY_DQS_TIMING, &ddrmr->phy[49]);
+
+       writel(DDRMC_PHY_CTRL, &ddrmr->phy[2]);
+       writel(DDRMC_PHY_CTRL, &ddrmr->phy[18]);
+       writel(DDRMC_PHY_CTRL, &ddrmr->phy[34]);
+       writel(DDRMC_PHY_CTRL, &ddrmr->phy[50]);
+
+       writel(DDRMC_PHY_MASTER_CTRL, &ddrmr->phy[3]);
+       writel(DDRMC_PHY_MASTER_CTRL, &ddrmr->phy[19]);
+       writel(DDRMC_PHY_MASTER_CTRL, &ddrmr->phy[35]);
+       writel(DDRMC_PHY_MASTER_CTRL, &ddrmr->phy[51]);
+
+       writel(DDRMC_PHY_SLAVE_CTRL, &ddrmr->phy[4]);
+       writel(DDRMC_PHY_SLAVE_CTRL, &ddrmr->phy[20]);
+       writel(DDRMC_PHY_SLAVE_CTRL, &ddrmr->phy[36]);
+       writel(DDRMC_PHY_SLAVE_CTRL, &ddrmr->phy[52]);
+
+       writel(DDRMC_PHY50_DDR3_MODE | DDRMC_PHY50_EN_SW_HALF_CYCLE,
+               &ddrmr->phy[50]);
+}
+
+void ddr_ctrl_init(void)
+{
+       struct ddrmr_regs *ddrmr = (struct ddrmr_regs *)DDR_BASE_ADDR;
+
+       writel(DDRMC_CR00_DRAM_CLASS_DDR3, &ddrmr->cr[0]);
+       writel(DDRMC_CR02_DRAM_TINIT(32), &ddrmr->cr[2]);
+       writel(DDRMC_CR10_TRST_PWRON(124), &ddrmr->cr[10]);
+
+       writel(DDRMC_CR11_CKE_INACTIVE(80000), &ddrmr->cr[11]);
+       writel(DDRMC_CR12_WRLAT(5) | DDRMC_CR12_CASLAT_LIN(12), &ddrmr->cr[12]);
+       writel(DDRMC_CR13_TRC(21) | DDRMC_CR13_TRRD(4) | DDRMC_CR13_TCCD(4) |
+               DDRMC_CR13_TBST_INT_INTERVAL(4), &ddrmr->cr[13]);
+       writel(DDRMC_CR14_TFAW(20) | DDRMC_CR14_TRP(6) | DDRMC_CR14_TWTR(4) |
+               DDRMC_CR14_TRAS_MIN(15), &ddrmr->cr[14]);
+       writel(DDRMC_CR16_TMRD(4) | DDRMC_CR16_TRTP(4), &ddrmr->cr[16]);
+       writel(DDRMC_CR17_TRAS_MAX(28080) | DDRMC_CR17_TMOD(12),
+               &ddrmr->cr[17]);
+       writel(DDRMC_CR18_TCKESR(4) | DDRMC_CR18_TCKE(3), &ddrmr->cr[18]);
+
+       writel(DDRMC_CR20_AP_EN, &ddrmr->cr[20]);
+       writel(DDRMC_CR21_TRCD_INT(6) | DDRMC_CR21_TRAS_LOCKOUT |
+               DDRMC_CR21_CCMAP_EN, &ddrmr->cr[21]);
+
+       writel(DDRMC_CR22_TDAL(11), &ddrmr->cr[22]);
+       writel(DDRMC_CR23_BSTLEN(3) | DDRMC_CR23_TDLL(512), &ddrmr->cr[23]);
+       writel(DDRMC_CR24_TRP_AB(6), &ddrmr->cr[24]);
+
+       writel(DDRMC_CR25_TREF_EN, &ddrmr->cr[25]);
+       writel(DDRMC_CR26_TREF(3112) | DDRMC_CR26_TRFC(44), &ddrmr->cr[26]);
+       writel(DDRMC_CR28_TREF_INT(5), &ddrmr->cr[28]);
+       writel(DDRMC_CR29_TPDEX(3), &ddrmr->cr[29]);
+
+       writel(DDRMC_CR30_TXPDLL(10), &ddrmr->cr[30]);
+       writel(DDRMC_CR31_TXSNR(68) | DDRMC_CR31_TXSR(512), &ddrmr->cr[31]);
+       writel(DDRMC_CR33_EN_QK_SREF, &ddrmr->cr[33]);
+       writel(DDRMC_CR34_CKSRX(5) | DDRMC_CR34_CKSRE(5), &ddrmr->cr[34]);
+
+       writel(DDRMC_CR38_FREQ_CHG_EN, &ddrmr->cr[38]);
+       writel(DDRMC_CR39_PHY_INI_COM(1024) | DDRMC_CR39_PHY_INI_STA(16) |
+               DDRMC_CR39_FRQ_CH_DLLOFF(2), &ddrmr->cr[39]);
+
+       writel(DDRMC_CR41_PHY_INI_STRT_INI_DIS, &ddrmr->cr[41]);
+       writel(DDRMC_CR48_MR1_DA_0(70) | DDRMC_CR48_MR0_DA_0(1056),
+               &ddrmr->cr[48]);
+
+       writel(DDRMC_CR66_ZQCL(256) | DDRMC_CR66_ZQINIT(512), &ddrmr->cr[66]);
+       writel(DDRMC_CR67_ZQCS(64), &ddrmr->cr[67]);
+       writel(DDRMC_CR69_ZQ_ON_SREF_EX(2), &ddrmr->cr[69]);
+
+       writel(DDRMC_CR70_REF_PER_ZQ(64), &ddrmr->cr[70]);
+       writel(DDRMC_CR72_ZQCS_ROTATE, &ddrmr->cr[72]);
+
+       writel(DDRMC_CR73_APREBIT(10) | DDRMC_CR73_COL_DIFF(1) |
+               DDRMC_CR73_ROW_DIFF(3), &ddrmr->cr[73]);
+       writel(DDRMC_CR74_BANKSPLT_EN | DDRMC_CR74_ADDR_CMP_EN |
+               DDRMC_CR74_CMD_AGE_CNT(255) | DDRMC_CR74_AGE_CNT(255),
+               &ddrmr->cr[74]);
+       writel(DDRMC_CR75_RW_PG_EN | DDRMC_CR75_RW_EN | DDRMC_CR75_PRI_EN |
+               DDRMC_CR75_PLEN, &ddrmr->cr[75]);
+       writel(DDRMC_CR76_NQENT_ACTDIS(3) | DDRMC_CR76_D_RW_G_BKCN(3) |
+               DDRMC_CR76_W2R_SPLT_EN | DDRMC_CR76_CS_EN, &ddrmr->cr[76]);
+       writel(DDRMC_CR77_CS_MAP | DDRMC_CR77_DI_RD_INTLEAVE |
+               DDRMC_CR77_SWAP_EN, &ddrmr->cr[77]);
+       writel(DDRMC_CR78_BUR_ON_FLY_BIT(12), &ddrmr->cr[78]);
+       writel(DDRMC_CR79_CTLUPD_AREF, &ddrmr->cr[79]);
+
+       writel(DDRMC_CR82_INT_MASK, &ddrmr->cr[82]);
+
+       writel(DDRMC_CR87_ODT_WR_MAPCS0 | DDRMC_CR87_ODT_RD_MAPCS0,
+               &ddrmr->cr[87]);
+       writel(DDRMC_CR88_TODTL_CMD(4), &ddrmr->cr[88]);
+       writel(DDRMC_CR89_AODT_RWSMCS(2), &ddrmr->cr[89]);
+
+       writel(DDRMC_CR91_R2W_SMCSDL(2), &ddrmr->cr[91]);
+       writel(DDRMC_CR96_WLMRD(40) | DDRMC_CR96_WLDQSEN(25), &ddrmr->cr[96]);
+
+       writel(DDRMC_CR105_RDLVL_DL_0(32), &ddrmr->cr[105]);
+       writel(DDRMC_CR110_RDLVL_DL_1(32), &ddrmr->cr[110]);
+       writel(DDRMC_CR114_RDLVL_GTDL_2(8224), &ddrmr->cr[114]);
+
+       writel(DDRMC_CR117_AXI0_W_PRI(1) | DDRMC_CR117_AXI0_R_PRI(1),
+               &ddrmr->cr[117]);
+       writel(DDRMC_CR118_AXI1_W_PRI(1) | DDRMC_CR118_AXI1_R_PRI(1),
+               &ddrmr->cr[118]);
+
+       writel(DDRMC_CR120_AXI0_PRI1_RPRI(2) | DDRMC_CR120_AXI0_PRI0_RPRI(2),
+               &ddrmr->cr[120]);
+       writel(DDRMC_CR121_AXI0_PRI3_RPRI(2) | DDRMC_CR121_AXI0_PRI2_RPRI(2),
+               &ddrmr->cr[121]);
+       writel(DDRMC_CR122_AXI1_PRI1_RPRI(1) | DDRMC_CR122_AXI1_PRI0_RPRI(1) |
+               DDRMC_CR122_AXI0_PRIRLX(100), &ddrmr->cr[122]);
+       writel(DDRMC_CR123_AXI1_PRI3_RPRI(1) | DDRMC_CR123_AXI1_PRI2_RPRI(1),
+               &ddrmr->cr[123]);
+       writel(DDRMC_CR124_AXI1_PRIRLX(100), &ddrmr->cr[124]);
+
+       writel(DDRMC_CR126_PHY_RDLAT(11), &ddrmr->cr[126]);
+       writel(DDRMC_CR132_WRLAT_ADJ(5) | DDRMC_CR132_RDLAT_ADJ(6),
+               &ddrmr->cr[132]);
+       writel(DDRMC_CR139_PHY_WRLV_RESPLAT(4) | DDRMC_CR139_PHY_WRLV_LOAD(7) |
+               DDRMC_CR139_PHY_WRLV_DLL(3) | DDRMC_CR139_PHY_WRLV_EN(3),
+               &ddrmr->cr[139]);
+
+       writel(DDRMC_CR154_PAD_ZQ_EARLY_CMP_EN_TIMER(13) |
+               DDRMC_CR154_PAD_ZQ_MODE(1), &ddrmr->cr[154]);
+       writel(DDRMC_CR155_AXI0_AWCACHE | DDRMC_CR155_PAD_ODT_BYTE1(2),
+               &ddrmr->cr[155]);
+       writel(DDRMC_CR158_TWR(6), &ddrmr->cr[158]);
+
+       ddr_phy_init();
+
+       writel(DDRMC_CR00_DRAM_CLASS_DDR3 | DDRMC_CR00_START, &ddrmr->cr[0]);
+
+       udelay(200);
+}
+
+int dram_init(void)
+{
+       setup_iomux_ddr();
+
+       ddr_ctrl_init();
+       gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
+
+       return 0;
+}
+
+static void setup_iomux_uart(void)
+{
+       static const iomux_v3_cfg_t uart1_pads[] = {
+               NEW_PAD_CTRL(VF610_PAD_PTB4__UART1_TX, UART_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTB5__UART1_RX, UART_PAD_CTRL),
+       };
+
+       imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
+}
+
+static void setup_iomux_enet(void)
+{
+       static const iomux_v3_cfg_t enet0_pads[] = {
+               NEW_PAD_CTRL(VF610_PAD_PTA6__RMII0_CLKIN, ENET_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTC1__RMII0_MDIO, ENET_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTC0__RMII0_MDC, ENET_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTC2__RMII0_CRS_DV, ENET_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTC3__RMII0_RD1, ENET_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTC4__RMII0_RD0, ENET_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTC5__RMII0_RXER, ENET_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTC6__RMII0_TD1, ENET_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTC7__RMII0_TD0, ENET_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTC8__RMII0_TXEN, ENET_PAD_CTRL),
+       };
+
+       imx_iomux_v3_setup_multiple_pads(enet0_pads, ARRAY_SIZE(enet0_pads));
+}
+
+#ifdef CONFIG_FSL_ESDHC
+struct fsl_esdhc_cfg esdhc_cfg[1] = {
+       {ESDHC1_BASE_ADDR},
+};
+
+int board_mmc_getcd(struct mmc *mmc)
+{
+       /* eSDHC1 is always present */
+       return 1;
+}
+
+int board_mmc_init(bd_t *bis)
+{
+       static const iomux_v3_cfg_t esdhc1_pads[] = {
+               NEW_PAD_CTRL(VF610_PAD_PTA24__ESDHC1_CLK, ESDHC_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTA25__ESDHC1_CMD, ESDHC_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTA26__ESDHC1_DAT0, ESDHC_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTA27__ESDHC1_DAT1, ESDHC_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTA28__ESDHC1_DAT2, ESDHC_PAD_CTRL),
+               NEW_PAD_CTRL(VF610_PAD_PTA29__ESDHC1_DAT3, ESDHC_PAD_CTRL),
+       };
+
+       esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
+
+       imx_iomux_v3_setup_multiple_pads(
+               esdhc1_pads, ARRAY_SIZE(esdhc1_pads));
+
+       return fsl_esdhc_initialize(bis, &esdhc_cfg[0]);
+}
+#endif
+
+static void clock_init(void)
+{
+       struct ccm_reg *ccm = (struct ccm_reg *)CCM_BASE_ADDR;
+       struct anadig_reg *anadig = (struct anadig_reg *)ANADIG_BASE_ADDR;
+
+       clrsetbits_le32(&ccm->ccgr0, CCM_REG_CTRL_MASK,
+               CCM_CCGR0_UART1_CTRL_MASK);
+       clrsetbits_le32(&ccm->ccgr1, CCM_REG_CTRL_MASK,
+               CCM_CCGR1_PIT_CTRL_MASK | CCM_CCGR1_WDOGA5_CTRL_MASK);
+       clrsetbits_le32(&ccm->ccgr2, CCM_REG_CTRL_MASK,
+               CCM_CCGR2_IOMUXC_CTRL_MASK | CCM_CCGR2_PORTA_CTRL_MASK |
+               CCM_CCGR2_PORTB_CTRL_MASK | CCM_CCGR2_PORTC_CTRL_MASK |
+               CCM_CCGR2_PORTD_CTRL_MASK | CCM_CCGR2_PORTE_CTRL_MASK);
+       clrsetbits_le32(&ccm->ccgr3, CCM_REG_CTRL_MASK,
+               CCM_CCGR3_ANADIG_CTRL_MASK);
+       clrsetbits_le32(&ccm->ccgr4, CCM_REG_CTRL_MASK,
+               CCM_CCGR4_WKUP_CTRL_MASK | CCM_CCGR4_CCM_CTRL_MASK |
+               CCM_CCGR4_GPC_CTRL_MASK);
+       clrsetbits_le32(&ccm->ccgr6, CCM_REG_CTRL_MASK,
+               CCM_CCGR6_OCOTP_CTRL_MASK | CCM_CCGR6_DDRMC_CTRL_MASK);
+       clrsetbits_le32(&ccm->ccgr7, CCM_REG_CTRL_MASK,
+               CCM_CCGR7_SDHC1_CTRL_MASK);
+       clrsetbits_le32(&ccm->ccgr9, CCM_REG_CTRL_MASK,
+               CCM_CCGR9_FEC0_CTRL_MASK | CCM_CCGR9_FEC1_CTRL_MASK);
+
+       clrsetbits_le32(&anadig->pll2_ctrl, ANADIG_PLL2_CTRL_POWERDOWN,
+               ANADIG_PLL2_CTRL_ENABLE | ANADIG_PLL2_CTRL_DIV_SELECT);
+       clrsetbits_le32(&anadig->pll1_ctrl, ANADIG_PLL1_CTRL_POWERDOWN,
+               ANADIG_PLL1_CTRL_ENABLE | ANADIG_PLL1_CTRL_DIV_SELECT);
+
+       clrsetbits_le32(&ccm->ccr, CCM_CCR_OSCNT_MASK,
+               CCM_CCR_FIRC_EN | CCM_CCR_OSCNT(5));
+       clrsetbits_le32(&ccm->ccsr, CCM_REG_CTRL_MASK,
+               CCM_CCSR_PLL1_PFD_CLK_SEL(3) | CCM_CCSR_PLL2_PFD4_EN |
+               CCM_CCSR_PLL2_PFD3_EN | CCM_CCSR_PLL2_PFD2_EN |
+               CCM_CCSR_PLL2_PFD1_EN | CCM_CCSR_PLL1_PFD4_EN |
+               CCM_CCSR_PLL1_PFD3_EN | CCM_CCSR_PLL1_PFD2_EN |
+               CCM_CCSR_PLL1_PFD1_EN | CCM_CCSR_DDRC_CLK_SEL(1) |
+               CCM_CCSR_FAST_CLK_SEL(1) | CCM_CCSR_SYS_CLK_SEL(4));
+       clrsetbits_le32(&ccm->cacrr, CCM_REG_CTRL_MASK,
+               CCM_CACRR_IPG_CLK_DIV(1) | CCM_CACRR_BUS_CLK_DIV(2) |
+               CCM_CACRR_ARM_CLK_DIV(0));
+       clrsetbits_le32(&ccm->cscmr1, CCM_REG_CTRL_MASK,
+               CCM_CSCMR1_ESDHC1_CLK_SEL(3));
+       clrsetbits_le32(&ccm->cscdr1, CCM_REG_CTRL_MASK,
+               CCM_CSCDR1_RMII_CLK_EN);
+       clrsetbits_le32(&ccm->cscdr2, CCM_REG_CTRL_MASK,
+               CCM_CSCDR2_ESDHC1_EN | CCM_CSCDR2_ESDHC1_CLK_DIV(0));
+       clrsetbits_le32(&ccm->cscmr2, CCM_REG_CTRL_MASK,
+               CCM_CSCMR2_RMII_CLK_SEL(0));
+}
+
+static void mscm_init(void)
+{
+       struct mscm_ir *mscmir = (struct mscm_ir *)MSCM_IR_BASE_ADDR;
+       int i;
+
+       for (i = 0; i < MSCM_IRSPRC_NUM; i++)
+               writew(MSCM_IRSPRC_CP0_EN, &mscmir->irsprc[i]);
+}
+
+int board_phy_config(struct phy_device *phydev)
+{
+       if (phydev->drv->config)
+               phydev->drv->config(phydev);
+
+       return 0;
+}
+
+int board_early_init_f(void)
+{
+       clock_init();
+       mscm_init();
+
+       setup_iomux_uart();
+       setup_iomux_enet();
+
+       return 0;
+}
+
+int board_init(void)
+{
+       /* address of boot parameters */
+       gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
+
+       return 0;
+}
+
+int checkboard(void)
+{
+       puts("Board: vf610twr\n");
+
+       return 0;
+}
index e0b0b330208ccbcd341084a9bb055b63baae5c11..ce83bbe4c5ebc87c823811e95eef424705ef39a1 100644 (file)
@@ -14,12 +14,12 @@ Building U-boot for Wandboard
 
 To build U-Boot for the Wandboard Dual Lite version:
 
-$ make wanboard_dl_config
+$ make wandboard_dl_config
 $ make
 
 To build U-Boot for the Wandboard Solo version:
 
-$ make wanboard_solo_config
+$ make wandboard_solo_config
 $ make
 
 Flashing U-boot into the SD card
index bb983528b9a5905addc2a4947c683548ec2b272b..5666cbf26f2e14ee59cd164870bb35f64bfc68ea 100644 (file)
  */
 
 #include <asm/arch/clock.h>
+#include <asm/arch/crm_regs.h>
 #include <asm/arch/iomux.h>
 #include <asm/arch/imx-regs.h>
 #include <asm/arch/mx6-pins.h>
+#include <asm/arch/mxc_hdmi.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/gpio.h>
 #include <asm/imx-common/iomux-v3.h>
 #include <asm/sizes.h>
 #include <common.h>
 #include <fsl_esdhc.h>
+#include <ipu_pixfmt.h>
 #include <mmc.h>
 #include <miiphy.h>
 #include <netdev.h>
+#include <linux/fb.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -206,6 +210,88 @@ int board_phy_config(struct phy_device *phydev)
        return 0;
 }
 
+#if defined(CONFIG_VIDEO_IPUV3)
+static void enable_hdmi(void)
+{
+       struct hdmi_regs *hdmi  = (struct hdmi_regs *)HDMI_ARB_BASE_ADDR;
+       u8 reg;
+       reg = readb(&hdmi->phy_conf0);
+       reg |= HDMI_PHY_CONF0_PDZ_MASK;
+       writeb(reg, &hdmi->phy_conf0);
+
+       udelay(3000);
+       reg |= HDMI_PHY_CONF0_ENTMDS_MASK;
+       writeb(reg, &hdmi->phy_conf0);
+       udelay(3000);
+       reg |= HDMI_PHY_CONF0_GEN2_TXPWRON_MASK;
+       writeb(reg, &hdmi->phy_conf0);
+       writeb(HDMI_MC_PHYRSTZ_ASSERT, &hdmi->mc_phyrstz);
+}
+
+static struct fb_videomode const hdmi = {
+       .name           = "HDMI",
+       .refresh        = 60,
+       .xres           = 1024,
+       .yres           = 768,
+       .pixclock       = 15385,
+       .left_margin    = 220,
+       .right_margin   = 40,
+       .upper_margin   = 21,
+       .lower_margin   = 7,
+       .hsync_len      = 60,
+       .vsync_len      = 10,
+       .sync           = FB_SYNC_EXT,
+       .vmode          = FB_VMODE_NONINTERLACED
+};
+
+int board_video_skip(void)
+{
+       int ret;
+
+       ret = ipuv3_fb_init(&hdmi, 0, IPU_PIX_FMT_RGB24);
+
+       if (ret)
+               printf("HDMI cannot be configured: %d\n", ret);
+
+       enable_hdmi();
+
+       return ret;
+}
+
+static void setup_display(void)
+{
+       struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
+       struct hdmi_regs *hdmi  = (struct hdmi_regs *)HDMI_ARB_BASE_ADDR;
+       int reg;
+
+       /* Turn on IPU clock */
+       reg = readl(&mxc_ccm->CCGR3);
+       reg |= MXC_CCM_CCGR3_IPU1_IPU_DI0_OFFSET;
+       writel(reg, &mxc_ccm->CCGR3);
+
+       /* Turn on HDMI PHY clock */
+       reg = readl(&mxc_ccm->CCGR2);
+       reg |=  MXC_CCM_CCGR2_HDMI_TX_IAHBCLK_MASK
+               | MXC_CCM_CCGR2_HDMI_TX_ISFRCLK_MASK;
+       writel(reg, &mxc_ccm->CCGR2);
+
+       /* clear HDMI PHY reset */
+       writeb(HDMI_MC_PHYRSTZ_DEASSERT, &hdmi->mc_phyrstz);
+
+       reg = readl(&mxc_ccm->chsccdr);
+       reg &= ~(MXC_CCM_CHSCCDR_IPU1_DI0_PRE_CLK_SEL_MASK
+               | MXC_CCM_CHSCCDR_IPU1_DI0_PODF_MASK
+               | MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_MASK);
+       reg |= (CHSCCDR_CLK_SEL_LDB_DI0
+               << MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET)
+             | (CHSCCDR_PODF_DIVIDE_BY_3
+               << MXC_CCM_CHSCCDR_IPU1_DI0_PODF_OFFSET)
+             | (CHSCCDR_IPU_PRE_CLK_540M_PFD
+               << MXC_CCM_CHSCCDR_IPU1_DI0_PRE_CLK_SEL_OFFSET);
+       writel(reg, &mxc_ccm->chsccdr);
+}
+#endif /* CONFIG_VIDEO_IPUV3 */
+
 int board_eth_init(bd_t *bis)
 {
        int ret;
@@ -222,9 +308,21 @@ int board_eth_init(bd_t *bis)
 int board_early_init_f(void)
 {
        setup_iomux_uart();
+#if defined(CONFIG_VIDEO_IPUV3)
+       setup_display();
+#endif
        return 0;
 }
 
+/*
+ * Do not overwrite the console
+ * Use always serial for U-Boot console
+ */
+int overwrite_console(void)
+{
+       return 1;
+}
+
 #ifdef CONFIG_CMD_BMODE
 static const struct boot_mode board_boot_modes[] = {
        /* 4 bit bus width */
index e2a8d42ab43194734d56457a1d29fa2b81f13892..8876d889676234fa63b3ddbef4788e52725e9509 100644 (file)
@@ -266,12 +266,14 @@ mx53loco                     arm         armv7       mx53loco            freesca
 mx53smd                      arm         armv7       mx53smd             freescale      mx5            mx53smd:IMX_CONFIG=board/freescale/mx53smd/imximage.cfg
 ima3-mx53                    arm         armv7       ima3-mx53           esg            mx5            ima3-mx53:IMX_CONFIG=board/esg/ima3-mx53/imximage.cfg
 vision2                      arm         armv7       vision2             ttcontrol      mx5            vision2:IMX_CONFIG=board/ttcontrol/vision2/imximage_hynix.cfg
+cgtqmx6qeval                            arm             armv7           cgtqmx6eval             congatec               mx6             cgtqmx6eval:IMX_CONFIG=board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg,MX6Q
 mx6qarm2                     arm         armv7       mx6qarm2            freescale      mx6            mx6qarm2:IMX_CONFIG=board/freescale/mx6qarm2/imximage.cfg
 mx6qsabreauto                arm         armv7       mx6qsabreauto       freescale      mx6            mx6qsabreauto:IMX_CONFIG=board/freescale/mx6qsabreauto/imximage.cfg
 mx6qsabrelite                arm         armv7       mx6qsabrelite       freescale      mx6            mx6qsabrelite:IMX_CONFIG=board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg
 mx6qsabresd                  arm         armv7       mx6qsabresd         freescale      mx6            mx6qsabresd:IMX_CONFIG=board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg
 mx6slevk                     arm         armv7       mx6slevk            freescale      mx6            mx6slevk:IMX_CONFIG=board/freescale/mx6slevk/imximage.cfg,MX6SL
 titanium                     arm         armv7       titanium            freescale      mx6            titanium:IMX_CONFIG=board/freescale/titanium/imximage.cfg
+vf610twr                     arm         armv7       vf610twr            freescale      vf610          vf610twr:IMX_CONFIG=board/freescale/vf610twr/imximage.cfg
 eco5pk                       arm         armv7       eco5pk              8dtech         omap3
 nitrogen6dl                  arm         armv7       nitrogen6x          boundary       mx6            nitrogen6x:IMX_CONFIG=board/boundary/nitrogen6x/nitrogen6dl.cfg,MX6DL,DDR_MB=1024
 nitrogen6dl2g                arm         armv7       nitrogen6x          boundary       mx6            nitrogen6x:IMX_CONFIG=board/boundary/nitrogen6x/nitrogen6dl2g.cfg,MX6DL,DDR_MB=2048
index 9a5331153ea2edea01d9a313d87875e162ff77cb..7a2863cfd2fe085ec85caacc72472b7de469c97a 100644 (file)
@@ -2,6 +2,7 @@ Driver implementing the fuse API for Freescale's On-Chip OTP Controller (OCOTP)
 on MXC
 
 This IP can be found on the following SoCs:
+ - Vybrid VF610,
  - i.MX6.
 
 Note that this IP is different from albeit similar to the IPs of the same name
diff --git a/doc/README.vf610 b/doc/README.vf610
new file mode 100644 (file)
index 0000000..38cf5cf
--- /dev/null
@@ -0,0 +1,10 @@
+U-Boot for Freescale Vybrid VF610
+
+This file contains information for the port of U-Boot to the Freescale Vybrid
+VF610 SoC.
+
+1. CONVENTIONS FOR FUSE ASSIGNMENTS
+-----------------------------------
+
+1.1 MAC Address: It is stored in fuse bank 4, with the 16 msbs in word 2 and the
+    32 lsbs in word 3.
index 4dbcdca4a03741f5e3bfa3c334bb2fbcbbe8b7ea..da95e285b70db65f1f6bb709414ca5ff5ec2f8b0 100644 (file)
@@ -516,9 +516,7 @@ static int fec_open(struct eth_device *edev)
 #ifdef FEC_QUIRK_ENET_MAC
        {
                u32 ecr = readl(&fec->eth->ecntrl) & ~FEC_ECNTRL_SPEED;
-               u32 rcr = (readl(&fec->eth->r_cntrl) &
-                               ~(FEC_RCNTRL_RMII | FEC_RCNTRL_RMII_10T)) |
-                               FEC_RCNTRL_RGMII | FEC_RCNTRL_MII_MODE;
+               u32 rcr = readl(&fec->eth->r_cntrl) & ~FEC_RCNTRL_RMII_10T;
                if (speed == _1000BASET)
                        ecr |= FEC_ECNTRL_SPEED;
                else if (speed != _100BASET)
index 442b7ea0df445b9c56c22c7ee9260dbc19b7059c..0f954a5f33af42b758561b7cc2a93bf8f15d0e9c 100644 (file)
@@ -53,6 +53,7 @@ COBJS-$(CONFIG_SANDBOX_SERIAL) += sandbox.o
 COBJS-$(CONFIG_SCIF_CONSOLE) += serial_sh.o
 COBJS-$(CONFIG_ZYNQ_SERIAL) += serial_zynq.o
 COBJS-$(CONFIG_BFIN_SERIAL) += serial_bfin.o
+COBJS-$(CONFIG_FSL_LPUART) += serial_lpuart.o
 
 ifndef CONFIG_SPL_BUILD
 COBJS-$(CONFIG_USB_TTY) += usbtty.o
diff --git a/drivers/serial/serial_lpuart.c b/drivers/serial/serial_lpuart.c
new file mode 100644 (file)
index 0000000..51d5666
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#include <common.h>
+#include <watchdog.h>
+#include <asm/io.h>
+#include <serial.h>
+#include <linux/compiler.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/clock.h>
+
+#define US1_TDRE        (1 << 7)
+#define US1_RDRF        (1 << 5)
+#define UC2_TE          (1 << 3)
+#define UC2_RE          (1 << 2)
+
+DECLARE_GLOBAL_DATA_PTR;
+
+struct lpuart_fsl *base = (struct lpuart_fsl *)LPUART_BASE;
+
+static void lpuart_serial_setbrg(void)
+{
+       u32 clk = mxc_get_clock(MXC_UART_CLK);
+       u16 sbr;
+
+       if (!gd->baudrate)
+               gd->baudrate = CONFIG_BAUDRATE;
+
+       sbr = (u16)(clk / (16 * gd->baudrate));
+       /* place adjustment later - n/32 BRFA */
+
+       __raw_writeb(sbr >> 8, &base->ubdh);
+       __raw_writeb(sbr & 0xff, &base->ubdl);
+}
+
+static int lpuart_serial_getc(void)
+{
+       u8 status;
+
+       while (!(__raw_readb(&base->us1) & US1_RDRF))
+               WATCHDOG_RESET();
+
+       status = __raw_readb(&base->us1);
+       status |= US1_RDRF;
+       __raw_writeb(status, &base->us1);
+
+       return __raw_readb(&base->ud);
+}
+
+static void lpuart_serial_putc(const char c)
+{
+       if (c == '\n')
+               serial_putc('\r');
+
+       while (!(__raw_readb(&base->us1) & US1_TDRE))
+               WATCHDOG_RESET();
+
+       __raw_writeb(c, &base->ud);
+}
+
+/*
+ * Test whether a character is in the RX buffer
+ */
+static int lpuart_serial_tstc(void)
+{
+       if (__raw_readb(&base->urcfifo) == 0)
+               return 0;
+
+       return 1;
+}
+
+/*
+ * Initialise the serial port with the given baudrate. The settings
+ * are always 8 data bits, no parity, 1 stop bit, no start bits.
+ */
+static int lpuart_serial_init(void)
+{
+       u8 ctrl;
+
+       ctrl = __raw_readb(&base->uc2);
+       ctrl &= ~UC2_RE;
+       ctrl &= ~UC2_TE;
+       __raw_writeb(ctrl, &base->uc2);
+
+       __raw_writeb(0, &base->umodem);
+       __raw_writeb(0, &base->uc1);
+
+       /* provide data bits, parity, stop bit, etc */
+
+       serial_setbrg();
+
+       __raw_writeb(UC2_RE | UC2_TE, &base->uc2);
+
+       return 0;
+}
+
+static struct serial_device lpuart_serial_drv = {
+       .name = "lpuart_serial",
+       .start = lpuart_serial_init,
+       .stop = NULL,
+       .setbrg = lpuart_serial_setbrg,
+       .putc = lpuart_serial_putc,
+       .puts = default_serial_puts,
+       .getc = lpuart_serial_getc,
+       .tstc = lpuart_serial_tstc,
+};
+
+void lpuart_serial_initialize(void)
+{
+       serial_register(&lpuart_serial_drv);
+}
+
+__weak struct serial_device *default_serial_console(void)
+{
+       return &lpuart_serial_drv;
+}
index 461ff6e860a396f0191ae9d536db205b1393e917..b18941935837e07e4037b1d448f7dda5406f5a4e 100644 (file)
@@ -39,6 +39,11 @@ static GraphicDevice panel;
  * setenv videomode
  * video=ctfb:x:800,y:480,depth:18,mode:0,pclk:30066,
  *       le:0,ri:256,up:0,lo:45,hs:1,vs:1,sync:100663296,vmode:0
+ *
+ * Freescale mx23evk/mx28evk with a Seiko 4.3'' WVGA panel:
+ * setenv videomode
+ * video=ctfb:x:800,y:480,depth:24,mode:0,pclk:29851,
+ *      le:89,ri:164,up:23,lo:10,hs:10,vs:10,sync:0,vmode:0
  */
 
 static void mxs_lcd_init(GraphicDevice *panel,
index d57578df6c2e0ac5bdd65bbf96b6fe407e1f8efd..b9bbbc63398e9a9c17e9327bbd0d1a00b5ac5515 100644 (file)
@@ -27,7 +27,7 @@ LIB   := $(obj)libwatchdog.o
 
 COBJS-$(CONFIG_AT91SAM9_WATCHDOG) += at91sam9_wdt.o
 COBJS-$(CONFIG_FTWDT010_WATCHDOG) += ftwdt010_wdt.o
-ifneq (,$(filter $(SOC), mx31 mx35 mx5 mx6))
+ifneq (,$(filter $(SOC), mx31 mx35 mx5 mx6 vf610))
 COBJS-y += imx_watchdog.o
 endif
 COBJS-$(CONFIG_TNETV107X_WATCHDOG) += tnetv107x_wdt.o
diff --git a/include/configs/cgtqmx6eval.h b/include/configs/cgtqmx6eval.h
new file mode 100644 (file)
index 0000000..1363858
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+ *
+ * Congatec Conga-QEVAl board configuration file.
+ *
+ * Copyright (C) 2010-2011 Freescale Semiconductor, Inc.
+ * Based on Freescale i.MX6Q Sabre Lite board configuration file.
+ * Copyright (C) 2013, Adeneo Embedded <www.adeneo-embedded.com>
+ * Leo Sartre, <lsartre@adeneo-embedded.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CONFIG_CGTQMX6EVAL_H
+#define __CONFIG_CGTQMX6EVAL_H
+
+#define CONFIG_MX6
+
+#include "mx6_common.h"
+
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_DISPLAY_BOARDINFO
+
+#define CONFIG_MACH_TYPE       4122
+
+#include <asm/arch/imx-regs.h>
+#include <asm/imx-common/gpio.h>
+
+#define CONFIG_CMDLINE_TAG
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_INITRD_TAG
+#define CONFIG_REVISION_TAG
+
+/* Size of malloc() pool */
+#define CONFIG_SYS_MALLOC_LEN          (10 * 1024 * 1024)
+
+#define CONFIG_BOARD_EARLY_INIT_F
+#define CONFIG_MISC_INIT_R
+#define CONFIG_MXC_GPIO
+
+#define CONFIG_MXC_UART
+#define CONFIG_MXC_UART_BASE          UART2_BASE
+
+/* MMC Configs */
+#define CONFIG_FSL_ESDHC
+#define CONFIG_FSL_USDHC
+#define CONFIG_SYS_FSL_ESDHC_ADDR      0
+
+#define CONFIG_MMC
+#define CONFIG_CMD_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_BOUNCE_BUFFER
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_FAT
+#define CONFIG_DOS_PARTITION
+
+/* Miscellaneous commands */
+#define CONFIG_CMD_BMODE
+
+/* allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+#define CONFIG_CONS_INDEX             1
+#define CONFIG_BAUDRATE                               115200
+
+/* Command definition */
+#include <config_cmd_default.h>
+
+#undef CONFIG_CMD_IMLS
+
+#define CONFIG_BOOTDELAY              3
+
+#define CONFIG_LOADADDR                               0x12000000
+#define CONFIG_SYS_TEXT_BASE          0x17800000
+
+#define CONFIG_DEFAULT_FDT_FILE "imx6q-congatec.dtb"
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+       "script=boot.scr\0" \
+       "uimage=uImage\0" \
+       "fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
+       "boot_dir=/boot\0" \
+       "console=ttymxc1\0" \
+       "fdt_high=0xffffffff\0" \
+       "initrd_high=0xffffffff\0" \
+       "fdt_addr=0x11000000\0" \
+       "boot_fdt=try\0" \
+       "mmcdev=1\0" \
+       "mmcpart=1\0" \
+       "mmcroot=/dev/mmcblk0p1 rootwait rw\0" \
+       "mmcargs=setenv bootargs console=${console},${baudrate} " \
+               "root=${mmcroot}\0" \
+       "loadbootscript=" \
+               "ext2load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
+       "bootscript=echo Running bootscript from mmc ...; " \
+               "source\0" \
+       "loaduimage=ext2load mmc ${mmcdev}:${mmcpart} ${loadaddr} " \
+               "${boot_dir}/${uimage}\0" \
+       "loadfdt=ext2load mmc ${mmcdev}:${mmcpart} ${fdt_addr} " \
+               "${boot_dir}/${fdt_file}\0" \
+       "mmcboot=echo Booting from mmc ...; " \
+               "run mmcargs; " \
+               "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
+                       "if run loadfdt; then " \
+                               "bootm ${loadaddr} - ${fdt_addr}; " \
+                       "else " \
+                               "if test ${boot_fdt} = try; then " \
+                                       "bootm; " \
+                               "else " \
+                                       "echo WARN: Cannot load the DT; " \
+                               "fi; " \
+                       "fi; " \
+               "else " \
+                       "bootm; " \
+               "fi;\0"
+
+#define CONFIG_BOOTCOMMAND \
+          "mmc dev ${mmcdev};" \
+          "mmc dev ${mmcdev}; if mmc rescan; then " \
+                  "if run loadbootscript; then " \
+                          "run bootscript; " \
+                  "else " \
+                          "if run loaduimage; then " \
+                                  "run mmcboot; " \
+                          "else "\
+                                  "echo ERR: Fail to boot from mmc; " \
+                          "fi; " \
+                  "fi; " \
+          "else echo ERR: Fail to boot from mmc; fi"
+
+/* Miscellaneous configurable options */
+#define CONFIG_SYS_LONGHELP
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT             "CGT-QMX6-Quad U-Boot > "
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_CBSIZE             256
+
+/* Print Buffer Size */
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_MAXARGS            16
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
+
+#define CONFIG_SYS_MEMTEST_START       0x10000000
+#define CONFIG_SYS_MEMTEST_END        0x10010000
+#define CONFIG_SYS_MEMTEST_SCRATCH     0x10800000
+
+#define CONFIG_SYS_LOAD_ADDR          CONFIG_LOADADDR
+#define CONFIG_SYS_HZ                 1000
+
+#define CONFIG_CMDLINE_EDITING
+
+/* Physical Memory Map */
+#define CONFIG_NR_DRAM_BANKS          1
+#define PHYS_SDRAM                    MMDC0_ARB_BASE_ADDR
+#define PHYS_SDRAM_SIZE                               (1u * 1024 * 1024 * 1024)
+
+#define CONFIG_SYS_SDRAM_BASE         PHYS_SDRAM
+#define CONFIG_SYS_INIT_RAM_ADDR       IRAM_BASE_ADDR
+#define CONFIG_SYS_INIT_RAM_SIZE       IRAM_SIZE
+
+#define CONFIG_SYS_INIT_SP_OFFSET \
+       (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_ADDR \
+       (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
+
+/* FLASH and environment organization */
+#define CONFIG_SYS_NO_FLASH
+
+#define CONFIG_ENV_SIZE                        (8 * 1024)
+
+#define CONFIG_ENV_IS_IN_MMC
+
+#define CONFIG_ENV_OFFSET              (6 * 64 * 1024)
+#define CONFIG_SYS_MMC_ENV_DEV         0
+
+#define CONFIG_OF_LIBFDT
+#define CONFIG_CMD_BOOTZ
+
+#ifndef CONFIG_SYS_DCACHE_OFF
+#define CONFIG_CMD_CACHE
+#endif
+
+#endif                        /* __CONFIG_CGTQMX6EVAL_H */
index e5a15a451cc44d3b9b478b30cfe503bc255de12d..3a58afee9a99b3457340259131b2ed1e79ef5754 100644 (file)
@@ -60,6 +60,7 @@
 #define CONFIG_CMD_MMC
 #define CONFIG_CMD_USB
 #define CONFIG_CMD_BOOTZ
+#define CONFIG_VIDEO
 
 /* Memory configurations */
 #define CONFIG_NR_DRAM_BANKS           1               /* 1 bank of DRAM */
 #define CONFIG_USB_STORAGE
 #endif
 
+/* Framebuffer support */
+#ifdef CONFIG_VIDEO
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VIDEO_MXS
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_VIDEO_SW_CURSOR
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV
+#define CONFIG_SPLASH_SCREEN
+#define CONFIG_CMD_BMP
+#define CONFIG_BMP_16BPP
+#define CONFIG_VIDEO_BMP_RLE8
+#define CONFIG_VIDEO_BMP_GZIP
+#define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE (512 << 10)
+#endif
+
 /* Boot Linux */
 #define CONFIG_CMDLINE_TAG
 #define CONFIG_SETUP_MEMORY_TAGS
index 54d01f9ed86a57d819b479565aaa5c33570f8512..de69182b4f212cb536c400793389989a662a9923 100644 (file)
@@ -64,6 +64,7 @@
 #define CONFIG_CMD_BOOTZ
 #define CONFIG_CMD_NAND
 #define CONFIG_CMD_NAND_TRIMFFS
+#define CONFIG_VIDEO
 
 /* Memory configurations */
 #define CONFIG_NR_DRAM_BANKS           1               /* 1 bank of DRAM */
 #endif
 #endif
 
+/* Framebuffer support */
+#ifdef CONFIG_VIDEO
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VIDEO_MXS
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_VIDEO_SW_CURSOR
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV
+#define CONFIG_SPLASH_SCREEN
+#define CONFIG_CMD_BMP
+#define CONFIG_BMP_16BPP
+#define CONFIG_VIDEO_BMP_RLE8
+#define CONFIG_VIDEO_BMP_GZIP
+#define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE (512 << 10)
+#endif
+
 /* Boot Linux */
 #define CONFIG_CMDLINE_TAG
 #define CONFIG_SETUP_MEMORY_TAGS
index 41974b12628a99786250486f86d896c8a9591379..b0a965fbba490bf9da460cb49986350202673e77 100644 (file)
        "boot_fdt=try\0" \
        "ip_dyn=yes\0" \
        "mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \
-       "mmcpart=" __stringify(CONFIG_SYS_MMC_ENV_PART) "\0" \
+       "mmcpart=2\0" \
        "mmcroot=/dev/mmcblk0p3 rootwait rw\0" \
        "update_sd_firmware_filename=u-boot.imx\0" \
        "update_sd_firmware=" \
 #define CONFIG_ENV_SIZE        (8 * 1024)
 #define CONFIG_ENV_IS_IN_MMC
 #define CONFIG_SYS_MMC_ENV_DEV 0
-#define CONFIG_SYS_MMC_ENV_PART        2
 
 #define CONFIG_OF_LIBFDT
 
index 7298a7692e9d849dd74e4ba3fa8da1cda82659e1..bfaa420ed0179a364fd6eca1f059709c2ae3f874 100644 (file)
@@ -97,7 +97,7 @@
        "fdt_high=0xffffffff\0"   \
        "initrd_high=0xffffffff\0" \
        "mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \
-       "mmcpart=" __stringify(CONFIG_SYS_MMC_ENV_PART) "\0" \
+       "mmcpart=1\0" \
        "mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
        "update_sd_firmware=" \
                "if test ${ip_dyn} = yes; then " \
index 1583c11aab8cd0eb77e531cf1baf2e0267f336b8..76f7812069057b1daf69663d36f574ee9377b460 100644 (file)
 #define CONFIG_SYS_FSL_USDHC_NUM       2
 #if defined(CONFIG_ENV_IS_IN_MMC)
 #define CONFIG_SYS_MMC_ENV_DEV         0
-#define CONFIG_SYS_MMC_ENV_PART                1       /* Boot partition 1 */
 #endif
 
+/* I2C Configs */
+#define CONFIG_CMD_I2C
+#define CONFIG_I2C_MULTI_BUS
+#define CONFIG_I2C_MXC
+#define CONFIG_SYS_I2C_SPEED           100000
+
 #endif                         /* __MX6QSABREAUTO_CONFIG_H */
index 3b8d752eed86d20c04da31c82de36c812bc4498c..44f07cbe45a658d87faafedd97fdd7c285aac221 100644 (file)
@@ -29,7 +29,6 @@
 #define CONFIG_SYS_FSL_USDHC_NUM       3
 #if defined(CONFIG_ENV_IS_IN_MMC)
 #define CONFIG_SYS_MMC_ENV_DEV         1       /* SDHC3 */
-#define CONFIG_SYS_MMC_ENV_PART                1       /* Boot partition 1 */
 #endif
 
 #endif                         /* __MX6QSABRESD_CONFIG_H */
index 8a94efdd6db9a8de736f170574e4b342551c4ec7..19dcdd605cc5e1beb31f3cbf7fe1db2e70c5b7db 100644 (file)
@@ -59,7 +59,7 @@
 
 #define CONFIG_BOOTDELAY               3
 
-#define CONFIG_LOADADDR                        0x80800000
+#define CONFIG_LOADADDR                        0x82000000
 #define CONFIG_SYS_TEXT_BASE           0x87800000
 
 #define CONFIG_EXTRA_ENV_SETTINGS \
diff --git a/include/configs/vf610twr.h b/include/configs/vf610twr.h
new file mode 100644 (file)
index 0000000..77fe893
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2013 Freescale Semiconductor, Inc.
+ *
+ * Configuration settings for the Freescale Vybrid vf610twr board.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.        See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include <asm/arch/imx-regs.h>
+#include <config_cmd_default.h>
+
+#define CONFIG_VF610
+
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_DISPLAY_BOARDINFO
+
+#define CONFIG_MACH_TYPE               4146
+
+#define CONFIG_SKIP_LOWLEVEL_INIT
+
+/* Enable passing of ATAGs */
+#define CONFIG_CMDLINE_TAG
+
+#define CONFIG_CMD_FUSE
+#ifdef CONFIG_CMD_FUSE
+#define CONFIG_MXC_OCOTP
+#endif
+
+/* Size of malloc() pool */
+#define CONFIG_SYS_MALLOC_LEN          (CONFIG_ENV_SIZE + 2 * 1024 * 1024)
+
+#define CONFIG_BOARD_EARLY_INIT_F
+
+#define CONFIG_FSL_LPUART
+#define LPUART_BASE                    UART1_BASE
+
+/* Allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+#define CONFIG_SYS_UART_PORT           (1)
+#define CONFIG_BAUDRATE                        115200
+
+#undef CONFIG_CMD_IMLS
+
+#define CONFIG_MMC
+#define CONFIG_FSL_ESDHC
+#define CONFIG_SYS_FSL_ESDHC_ADDR      0
+#define CONFIG_SYS_FSL_ESDHC_NUM       1
+
+#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
+
+#define CONFIG_CMD_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_CMD_FAT
+#define CONFIG_DOS_PARTITION
+
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NET
+#define CONFIG_FEC_MXC
+#define CONFIG_MII
+#define IMX_FEC_BASE                   ENET_BASE_ADDR
+#define CONFIG_FEC_XCV_TYPE            RMII
+#define CONFIG_FEC_MXC_PHYADDR          0
+#define CONFIG_PHYLIB
+#define CONFIG_PHY_MICREL
+
+#define CONFIG_BOOTDELAY               3
+
+#define CONFIG_SYS_TEXT_BASE           0x3f008000
+
+/* Miscellaneous configurable options */
+#define CONFIG_SYS_LONGHELP            /* undef to save memory */
+#define CONFIG_SYS_HUSH_PARSER         /* use "hush" command parser */
+#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
+#define CONFIG_SYS_PROMPT              "Vybrid U-Boot > "
+#undef CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_CBSIZE              256     /* Console I/O Buffer Size */
+#define CONFIG_SYS_PBSIZE              \
+                       (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_MAXARGS             16      /* max number of command args */
+#define CONFIG_SYS_BARGSIZE            CONFIG_SYS_CBSIZE
+
+#define CONFIG_CMD_MEMTEST
+#define CONFIG_SYS_MEMTEST_START       0x80010000
+#define CONFIG_SYS_MEMTEST_END         0x87C00000
+
+#define CONFIG_SYS_LOAD_ADDR           0x80010000
+
+#define CONFIG_SYS_HZ                  1000
+
+/*
+ * Stack sizes
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE               (128 * 1024)    /* regular stack */
+
+/* Physical memory map */
+#define CONFIG_NR_DRAM_BANKS           1
+#define PHYS_SDRAM                     (0x80000000)
+#define PHYS_SDRAM_SIZE                        (128 * 1024 * 1024)
+
+#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM
+#define CONFIG_SYS_INIT_RAM_ADDR       IRAM_BASE_ADDR
+#define CONFIG_SYS_INIT_RAM_SIZE       IRAM_SIZE
+
+#define CONFIG_SYS_INIT_SP_OFFSET \
+       (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_ADDR \
+       (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
+
+/* FLASH and environment organization */
+#define CONFIG_SYS_NO_FLASH
+
+#define CONFIG_ENV_SIZE                        (8 * 1024)
+#define CONFIG_ENV_IS_IN_MMC
+
+#define CONFIG_ENV_OFFSET              (12 * 64 * 1024)
+#define CONFIG_SYS_MMC_ENV_DEV         0
+
+#define CONFIG_OF_LIBFDT
+#define CONFIG_CMD_BOOTZ
+
+#endif
index 9d7ec3f6ff0bb8feffa4a844811270d57d204d07..5593f1c533a69090ec5be75600ea491920ec498f 100644 (file)
@@ -29,7 +29,7 @@
 #define CONFIG_REVISION_TAG
 
 /* Size of malloc() pool */
-#define CONFIG_SYS_MALLOC_LEN          (3 * SZ_1M)
+#define CONFIG_SYS_MALLOC_LEN          (10 * SZ_1M)
 
 #define CONFIG_BOARD_EARLY_INIT_F
 #define CONFIG_BOARD_LATE_INIT
 #define CONFIG_PHYLIB
 #define CONFIG_PHY_ATHEROS
 
+/* Framebuffer */
+#define CONFIG_VIDEO
+#define CONFIG_VIDEO_IPUV3
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV
+#define CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE
+#define CONFIG_VIDEO_BMP_RLE8
+#define CONFIG_SPLASH_SCREEN
+#define CONFIG_SPLASH_SCREEN_ALIGN
+#define CONFIG_BMP_16BPP
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_VIDEO_BMP_LOGO
+#define CONFIG_IPUV3_CLK 260000000
+
 #if defined(CONFIG_MX6DL)
 #define CONFIG_DEFAULT_FDT_FILE                "imx6dl-wandboard.dtb"
 #elif defined(CONFIG_MX6S)
        "boot_fdt=try\0" \
        "ip_dyn=yes\0" \
        "mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \
-       "mmcpart=" __stringify(CONFIG_SYS_MMC_ENV_PART) "\0" \
+       "mmcpart=2\0" \
        "mmcroot=/dev/mmcblk0p3 rootwait rw\0" \
        "update_sd_firmware_filename=u-boot.imx\0" \
        "update_sd_firmware=" \
 #define CONFIG_ENV_IS_IN_MMC
 #define CONFIG_ENV_OFFSET              (6 * 64 * 1024)
 #define CONFIG_SYS_MMC_ENV_DEV         0
-#define CONFIG_SYS_MMC_ENV_PART                2
 
 #define CONFIG_OF_LIBFDT
 #define CONFIG_CMD_BOOTZ
index 8b655c485aa12ec074aa50b01d7c44b5e12d7f77..d8fe948ff0a77ac3c10083fccd3a6133a6c03c6e 100644 (file)
@@ -88,7 +88,7 @@ ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX)$(C
 LIBS-y += $(CPUDIR)/omap-common/libomap-common.o
 endif
 
-ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35))
+ifneq (,$(CONFIG_MX23)$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35))
 LIBS-y += arch/$(ARCH)/imx-common/libimx-common.o
 endif
 
@@ -98,10 +98,6 @@ LIBS-y += arch/$(ARCH)/cpu/tegra-common/libcputegra-common.o
 LIBS-y += $(CPUDIR)/tegra-common/libtegra-common.o
 endif
 
-ifneq ($(CONFIG_MX23)$(CONFIG_MX35),)
-LIBS-y += arch/$(ARCH)/imx-common/libimx-common.o
-endif
-
 # Add GCC lib
 ifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
 PLATFORM_LIBGCC = $(SPLTREE)/arch/$(ARCH)/lib/libgcc.o
index 26eb50082f7b3998864b65a1a03ce638c8db20f0..4630f03dc53a93792d4c1e1f7f2c1fa60f6f20d2 100644 (file)
@@ -130,28 +130,21 @@ LOGO-$(CONFIG_LCD_LOGO) += $(LOGO_DATA_H)
 LOGO-$(CONFIG_VIDEO_LOGO) += $(LOGO_H)
 LOGO-$(CONFIG_VIDEO_LOGO) += $(LOGO_DATA_H)
 
+# Generic logo
 ifeq ($(LOGO_BMP),)
 LOGO_BMP= logos/denx.bmp
+
+# Use board logo and fallback to vendor
+ifneq ($(wildcard logos/$(BOARD).bmp),)
+LOGO_BMP= logos/$(BOARD).bmp
+else
+ifneq ($(wildcard logos/$(VENDOR).bmp),)
+LOGO_BMP= logos/$(VENDOR).bmp
 endif
-ifeq ($(VENDOR),atmel)
-LOGO_BMP= logos/atmel.bmp
-endif
-ifeq ($(VENDOR),esd)
-LOGO_BMP= logos/esd.bmp
-endif
-ifeq ($(VENDOR),freescale)
-LOGO_BMP= logos/freescale.bmp
-endif
-ifeq ($(VENDOR),ronetix)
-LOGO_BMP= logos/ronetix.bmp
-endif
-ifeq ($(VENDOR),syteco)
-LOGO_BMP= logos/syteco.bmp
-endif
-ifeq ($(VENDOR),intercontrol)
-LOGO_BMP= logos/intercontrol.bmp
 endif
 
+endif # !LOGO_BMP
+
 # now $(obj) is defined
 HOSTSRCS += $(addprefix $(SRCTREE)/,$(EXT_OBJ_FILES-y:.o=.c))
 HOSTSRCS += $(addprefix $(SRCTREE)/tools/,$(OBJ_FILES-y:.o=.c))
diff --git a/tools/logos/wandboard.bmp b/tools/logos/wandboard.bmp
new file mode 100644 (file)
index 0000000..7f288a8
Binary files /dev/null and b/tools/logos/wandboard.bmp differ