]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge branch 'master' of git://git.denx.de/u-boot-mpc5xxx
authorTom Rini <trini@ti.com>
Mon, 27 Oct 2014 15:03:00 +0000 (11:03 -0400)
committerTom Rini <trini@ti.com>
Mon, 27 Oct 2014 15:03:00 +0000 (11:03 -0400)
105 files changed:
arch/arm/cpu/armv7/keystone/Kconfig
arch/arm/cpu/armv7/keystone/Makefile
arch/arm/cpu/armv7/keystone/clock-k2l.c [new file with mode: 0644]
arch/arm/cpu/armv7/keystone/clock.c
arch/arm/cpu/armv7/keystone/cmd_clock.c
arch/arm/cpu/armv7/keystone/cmd_ddr3.c [new file with mode: 0644]
arch/arm/cpu/armv7/keystone/ddr3.c
arch/arm/cpu/armv7/keystone/init.c
arch/arm/cpu/armv7/keystone/msmc.c
arch/arm/cpu/armv7/keystone/spl.c [deleted file]
arch/arm/cpu/armv7/mx6/soc.c
arch/arm/cpu/armv7/omap3/Kconfig
arch/arm/cpu/armv7/socfpga/misc.c
arch/arm/cpu/armv7/socfpga/u-boot-spl.lds
arch/arm/imx-common/video.c
arch/arm/include/asm/arch-am33xx/mux.h
arch/arm/include/asm/arch-keystone/clock-k2e.h
arch/arm/include/asm/arch-keystone/clock-k2hk.h
arch/arm/include/asm/arch-keystone/clock-k2l.h [new file with mode: 0644]
arch/arm/include/asm/arch-keystone/clock.h
arch/arm/include/asm/arch-keystone/ddr3.h
arch/arm/include/asm/arch-keystone/emac_defs.h [deleted file]
arch/arm/include/asm/arch-keystone/hardware-k2e.h
arch/arm/include/asm/arch-keystone/hardware-k2hk.h
arch/arm/include/asm/arch-keystone/hardware-k2l.h [new file with mode: 0644]
arch/arm/include/asm/arch-keystone/hardware.h
arch/arm/include/asm/arch-keystone/msmc.h
arch/arm/include/asm/arch-keystone/spl.h [deleted file]
arch/arm/include/asm/arch-keystone/xhci-keystone.h [new file with mode: 0644]
arch/arm/include/asm/arch-omap3/mux.h
arch/arm/include/asm/arch-socfpga/spl.h [deleted file]
arch/arm/include/asm/imx-common/spi.h [new file with mode: 0644]
arch/arm/include/asm/imx-common/video.h
arch/arm/include/asm/spl.h
arch/arm/include/asm/ti-common/keystone_nav.h [moved from arch/arm/include/asm/arch-keystone/keystone_nav.h with 91% similarity]
arch/arm/include/asm/ti-common/keystone_net.h [new file with mode: 0644]
arch/arm/include/asm/ti-common/keystone_serdes.h [new file with mode: 0644]
arch/arm/include/asm/ti-common/ti-edma3.h [new file with mode: 0644]
arch/arm/lib/bootm.c
board/8dtech/eco5pk/eco5pk.h
board/bachmann/ot1200/Kconfig
board/bachmann/ot1200/ot1200.c
board/boundary/nitrogen6x/nitrogen6x.c
board/compulab/cm_fx6/common.c
board/compulab/cm_t35/cm_t35.c
board/embest/mx6boards/mx6boards.c
board/freescale/mx6qsabreauto/mx6qsabreauto.c
board/freescale/mx6slevk/mx6slevk.c
board/gateworks/gw_ventana/gw_ventana.c
board/genesi/mx51_efikamx/efikamx.c
board/htkw/mcx/mcx.h
board/logicpd/am3517evm/am3517evm.h
board/logicpd/omap3som/omap3logic.c
board/overo/overo.c
board/overo/overo.h
board/pandora/pandora.h
board/technexion/tao3530/tao3530.h
board/technexion/twister/twister.h
board/teejet/mt_ventoux/mt_ventoux.h
board/ti/am335x/mux.c
board/ti/am3517crane/am3517crane.h
board/ti/evm/evm.h
board/ti/ks2_evm/Kconfig
board/ti/ks2_evm/MAINTAINERS
board/ti/ks2_evm/Makefile
board/ti/ks2_evm/board.c
board/ti/ks2_evm/board.h
board/ti/ks2_evm/board_k2e.c
board/ti/ks2_evm/board_k2hk.c
board/ti/ks2_evm/board_k2l.c [new file with mode: 0644]
board/ti/ks2_evm/ddr3_cfg.c
board/ti/ks2_evm/ddr3_cfg.h
board/ti/ks2_evm/ddr3_k2hk.c
board/ti/ks2_evm/ddr3_k2l.c [new file with mode: 0644]
board/ti/sdp3430/sdp.h
board/ttcontrol/vision2/vision2.c
common/Makefile
configs/k2l_evm_defconfig [new file with mode: 0644]
drivers/Makefile
drivers/dma/Makefile
drivers/dma/keystone_nav.c [moved from arch/arm/cpu/armv7/keystone/keystone_nav.c with 53% similarity]
drivers/dma/keystone_nav_cfg.c [new file with mode: 0644]
drivers/dma/ti-edma3.c [new file with mode: 0644]
drivers/net/keystone_net.c
drivers/net/phy/phy.c
drivers/soc/Makefile [new file with mode: 0644]
drivers/soc/keystone/Makefile [new file with mode: 0644]
drivers/soc/keystone/keystone_serdes.c [new file with mode: 0644]
drivers/spi/mxc_spi.c
drivers/usb/host/Makefile
drivers/usb/host/xhci-keystone.c [new file with mode: 0644]
include/configs/am335x_evm.h
include/configs/am43xx_evm.h
include/configs/k2e_evm.h
include/configs/k2hk_evm.h
include/configs/k2l_evm.h [new file with mode: 0644]
include/configs/ks2_evm.h
include/configs/mx6sabre_common.h
include/configs/mx6sabresd.h
include/configs/omap3_overo.h
include/configs/ot1200.h
include/configs/socfpga_common.h
include/configs/socfpga_cyclone5.h
include/linux/usb/dwc3.h
tools/socfpgaimage.c

index 8249b5e27036f7380ef19252792e59553f4f1b1f..393885f710d21ac50931c9b7e3c02046b8123159 100644 (file)
@@ -9,6 +9,9 @@ config TARGET_K2HK_EVM
 config TARGET_K2E_EVM
        bool "TI Keystone 2 Edison EVM"
 
+config TARGET_K2L_EVM
+       bool "TI Keystone 2 Lamar EVM"
+
 endchoice
 
 config SYS_CPU
index f8519c040355f4202e4c701c3a710c96689051d9..ed030db2c888db153db3674d49c5cdec157627e1 100644 (file)
@@ -10,10 +10,9 @@ obj-y        += psc.o
 obj-y  += clock.o
 obj-$(CONFIG_SOC_K2HK) += clock-k2hk.o
 obj-$(CONFIG_SOC_K2E) += clock-k2e.o
+obj-$(CONFIG_SOC_K2L) += clock-k2l.o
 obj-y  += cmd_clock.o
 obj-y  += cmd_mon.o
-obj-$(CONFIG_DRIVER_TI_KEYSTONE_NET) += keystone_nav.o
 obj-y  += msmc.o
-obj-$(CONFIG_SPL_BUILD)        += spl.o
-obj-y  += ddr3.o
+obj-y  += ddr3.o cmd_ddr3.o
 obj-y  += keystone.o
diff --git a/arch/arm/cpu/armv7/keystone/clock-k2l.c b/arch/arm/cpu/armv7/keystone/clock-k2l.c
new file mode 100644 (file)
index 0000000..1c5e4d5
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * Keystone2: get clk rate for K2L
+ *
+ * (C) Copyright 2012-2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/clock_defs.h>
+
+const struct keystone_pll_regs keystone_pll_regs[] = {
+       [CORE_PLL] = {KS2_MAINPLLCTL0, KS2_MAINPLLCTL1},
+       [PASS_PLL] = {KS2_PASSPLLCTL0, KS2_PASSPLLCTL1},
+       [TETRIS_PLL] = {KS2_ARMPLLCTL0,  KS2_ARMPLLCTL1},
+       [DDR3_PLL] = {KS2_DDR3APLLCTL0, KS2_DDR3APLLCTL1},
+};
+
+int dev_speeds[] = {
+       SPD800,
+       SPD1000,
+       SPD1200,
+       SPD800,
+       SPD800,
+       SPD800,
+       SPD800,
+       SPD800,
+       SPD1200,
+       SPD1000,
+       SPD800,
+       SPD800,
+       SPD800,
+};
+
+int arm_speeds[] = {
+       SPD800,
+       SPD1000,
+       SPD1200,
+       SPD1350,
+       SPD1400,
+       SPD800,
+       SPD1400,
+       SPD1350,
+       SPD1200,
+       SPD1000,
+       SPD800,
+       SPD800,
+       SPD800,
+};
+
+/**
+ * pll_freq_get - get pll frequency
+ * Fout = Fref * NF(mult) / NR(prediv) / OD
+ * @pll:       pll identifier
+ */
+static unsigned long pll_freq_get(int pll)
+{
+       unsigned long mult = 1, prediv = 1, output_div = 2;
+       unsigned long ret;
+       u32 tmp, reg;
+
+       if (pll == CORE_PLL) {
+               ret = external_clk[sys_clk];
+               if (pllctl_reg_read(pll, ctl) & PLLCTL_PLLEN) {
+                       /* PLL mode */
+                       tmp = __raw_readl(KS2_MAINPLLCTL0);
+                       prediv = (tmp & PLL_DIV_MASK) + 1;
+                       mult = (((tmp & PLLM_MULT_HI_SMASK) >> 6) |
+                               (pllctl_reg_read(pll, mult) &
+                               PLLM_MULT_LO_MASK)) + 1;
+                       output_div = ((pllctl_reg_read(pll, secctl) >>
+                                       PLL_CLKOD_SHIFT) & PLL_CLKOD_MASK) + 1;
+
+                       ret = ret / prediv / output_div * mult;
+               }
+       } else {
+               switch (pll) {
+               case PASS_PLL:
+                       ret = external_clk[pa_clk];
+                       reg = KS2_PASSPLLCTL0;
+                       break;
+               case TETRIS_PLL:
+                       ret = external_clk[tetris_clk];
+                       reg = KS2_ARMPLLCTL0;
+                       break;
+               case DDR3_PLL:
+                       ret = external_clk[ddr3_clk];
+                       reg = KS2_DDR3APLLCTL0;
+                       break;
+               default:
+                       return 0;
+               }
+
+               tmp = __raw_readl(reg);
+               if (!(tmp & PLLCTL_BYPASS)) {
+                       /* Bypass disabled */
+                       prediv = (tmp & PLL_DIV_MASK) + 1;
+                       mult = ((tmp >> PLL_MULT_SHIFT) & PLL_MULT_MASK) + 1;
+                       output_div = ((tmp >> PLL_CLKOD_SHIFT) &
+                                     PLL_CLKOD_MASK) + 1;
+                       ret = ((ret / prediv) * mult) / output_div;
+               }
+       }
+
+       return ret;
+}
+
+unsigned long clk_get_rate(unsigned int clk)
+{
+       switch (clk) {
+       case core_pll_clk:      return pll_freq_get(CORE_PLL);
+       case pass_pll_clk:      return pll_freq_get(PASS_PLL);
+       case tetris_pll_clk:    return pll_freq_get(TETRIS_PLL);
+       case ddr3_pll_clk:      return pll_freq_get(DDR3_PLL);
+       case sys_clk0_1_clk:
+       case sys_clk0_clk:      return pll_freq_get(CORE_PLL) / pll0div_read(1);
+       case sys_clk1_clk:      return pll_freq_get(CORE_PLL) / pll0div_read(2);
+       case sys_clk2_clk:      return pll_freq_get(CORE_PLL) / pll0div_read(3);
+       case sys_clk3_clk:      return pll_freq_get(CORE_PLL) / pll0div_read(4);
+       case sys_clk0_2_clk:    return clk_get_rate(sys_clk0_clk) / 2;
+       case sys_clk0_3_clk:    return clk_get_rate(sys_clk0_clk) / 3;
+       case sys_clk0_4_clk:    return clk_get_rate(sys_clk0_clk) / 4;
+       case sys_clk0_6_clk:    return clk_get_rate(sys_clk0_clk) / 6;
+       case sys_clk0_8_clk:    return clk_get_rate(sys_clk0_clk) / 8;
+       case sys_clk0_12_clk:   return clk_get_rate(sys_clk0_clk) / 12;
+       case sys_clk0_24_clk:   return clk_get_rate(sys_clk0_clk) / 24;
+       case sys_clk1_3_clk:    return clk_get_rate(sys_clk1_clk) / 3;
+       case sys_clk1_4_clk:    return clk_get_rate(sys_clk1_clk) / 4;
+       case sys_clk1_6_clk:    return clk_get_rate(sys_clk1_clk) / 6;
+       case sys_clk1_12_clk:   return clk_get_rate(sys_clk1_clk) / 12;
+       default:
+               break;
+       }
+
+       return 0;
+}
index 47fc89398d44123441ade21d9bf017e7621bd4d6..d13fbc1a4bb99cb4e59bb62663644e7462e58cba 100644 (file)
@@ -185,10 +185,6 @@ void init_pll(const struct pll_init_data *data)
                tmp &= ~(PLL_BWADJ_HI_MASK);
                tmp |= ((bwadj >> 8) & PLL_BWADJ_HI_MASK);
 
-               /* set PLL Select (bit 13) for PASS PLL */
-               if (data->pll == PASS_PLL)
-                       tmp |= PLLCTL_PAPLL;
-
                __raw_writel(tmp, keystone_pll_regs[data->pll].reg1);
 
                /* Reset bit: bit 14 for both DDR3 & PASS PLL */
@@ -261,3 +257,16 @@ inline int get_max_arm_speed(void)
        return get_max_speed((read_efuse_bootrom() >> 16) & 0xffff, arm_speeds);
 }
 #endif
+
+void pass_pll_pa_clk_enable(void)
+{
+       u32 reg;
+
+       reg = readl(keystone_pll_regs[PASS_PLL].reg1);
+
+       reg |= PLLCTL_PAPLL;
+       writel(reg, keystone_pll_regs[PASS_PLL].reg1);
+
+       /* wait till clock is enabled */
+       sdelay(15000);
+}
index d97c95be11ddad8ff8b99cad1e1dafc91c5c24c6..af1b701e826930a087cd7822f5b121fc011e8791 100644 (file)
@@ -58,20 +58,11 @@ pll_cmd_usage:
        return cmd_usage(cmdtp);
 }
 
-#ifdef CONFIG_SOC_K2HK
-U_BOOT_CMD(
-       pllset, 5,      0,      do_pll_cmd,
-       "set pll multiplier and pre divider",
-       "<pa|arm|ddr3a|ddr3b> <mult> <div> <OD>\n"
-);
-#endif
-#ifdef CONFIG_SOC_K2E
 U_BOOT_CMD(
        pllset, 5,      0,      do_pll_cmd,
        "set pll multiplier and pre divider",
-       "<pa|ddr3> <mult> <div> <OD>\n"
+       PLLSET_CMD_LIST " <mult> <div> <OD>\n"
 );
-#endif
 
 int do_getclk_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
@@ -95,12 +86,8 @@ U_BOOT_CMD(
        getclk, 2,      0,      do_getclk_cmd,
        "get clock rate",
        "<clk index>\n"
-#ifdef CONFIG_SOC_K2HK
-       "See the 'enum clk_e' in the clock-k2hk.h for clk indexes\n"
-#endif
-#ifdef CONFIG_SOC_K2E
-       "See the 'enum clk_e' in the clock-k2e.h for clk indexes\n"
-#endif
+       "The indexes for clocks:\n"
+       CLOCK_INDEXES_LIST
 );
 
 int do_psc_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
@@ -141,5 +128,8 @@ U_BOOT_CMD(
        psc,    3,      0,      do_psc_cmd,
        "<enable/disable psc module os disable domain>",
        "<mod/domain index> <en|di|domain>\n"
-       "See the hardware.h for Power and Sleep Controller (PSC) Domains\n"
+       "Intended to control Power and Sleep Controller (PSC) domains and\n"
+       "modules. The module or domain index exectly corresponds to ones\n"
+       "listed in official TRM. For instance, to enable MSMC RAM clock\n"
+       "domain use command: psc 14 en.\n"
 );
diff --git a/arch/arm/cpu/armv7/keystone/cmd_ddr3.c b/arch/arm/cpu/armv7/keystone/cmd_ddr3.c
new file mode 100644 (file)
index 0000000..ea78ad8
--- /dev/null
@@ -0,0 +1,248 @@
+/*
+ * Keystone2: DDR3 test commands
+ *
+ * (C) Copyright 2012-2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/ddr3.h>
+#include <common.h>
+#include <command.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define DDR_MIN_ADDR           CONFIG_SYS_SDRAM_BASE
+
+#define DDR_REMAP_ADDR         0x80000000
+#define ECC_START_ADDR1                ((DDR_MIN_ADDR - DDR_REMAP_ADDR) >> 17)
+
+#define ECC_END_ADDR1          (((gd->start_addr_sp - DDR_REMAP_ADDR - \
+                                CONFIG_STACKSIZE) >> 17) - 2)
+
+#define DDR_TEST_BURST_SIZE    1024
+
+static int ddr_memory_test(u32 start_address, u32 end_address, int quick)
+{
+       u32 index_start, value, index;
+
+       index_start = start_address;
+
+       while (1) {
+               /* Write a pattern */
+               for (index = index_start;
+                               index < index_start + DDR_TEST_BURST_SIZE;
+                               index += 4)
+                       __raw_writel(index, index);
+
+               /* Read and check the pattern */
+               for (index = index_start;
+                               index < index_start + DDR_TEST_BURST_SIZE;
+                               index += 4) {
+                       value = __raw_readl(index);
+                       if (value != index) {
+                               printf("ddr_memory_test: Failed at address index = 0x%x value = 0x%x *(index) = 0x%x\n",
+                                      index, value, __raw_readl(index));
+
+                               return -1;
+                       }
+               }
+
+               index_start += DDR_TEST_BURST_SIZE;
+               if (index_start >= end_address)
+                       break;
+
+               if (quick)
+                       continue;
+
+               /* Write a pattern for complementary values */
+               for (index = index_start;
+                    index < index_start + DDR_TEST_BURST_SIZE;
+                    index += 4)
+                       __raw_writel((u32)~index, index);
+
+               /* Read and check the pattern */
+               for (index = index_start;
+                    index < index_start + DDR_TEST_BURST_SIZE;
+                    index += 4) {
+                       value = __raw_readl(index);
+                       if (value != ~index) {
+                               printf("ddr_memory_test: Failed at address index = 0x%x value = 0x%x *(index) = 0x%x\n",
+                                      index, value, __raw_readl(index));
+
+                               return -1;
+                       }
+               }
+
+               index_start += DDR_TEST_BURST_SIZE;
+               if (index_start >= end_address)
+                       break;
+
+               /* Write a pattern */
+               for (index = index_start;
+                    index < index_start + DDR_TEST_BURST_SIZE;
+                    index += 2)
+                       __raw_writew((u16)index, index);
+
+               /* Read and check the pattern */
+               for (index = index_start;
+                    index < index_start + DDR_TEST_BURST_SIZE;
+                    index += 2) {
+                       value = __raw_readw(index);
+                       if (value != (u16)index) {
+                               printf("ddr_memory_test: Failed at address index = 0x%x value = 0x%x *(index) = 0x%x\n",
+                                      index, value, __raw_readw(index));
+
+                               return -1;
+                       }
+               }
+
+               index_start += DDR_TEST_BURST_SIZE;
+               if (index_start >= end_address)
+                       break;
+
+               /* Write a pattern */
+               for (index = index_start;
+                    index < index_start + DDR_TEST_BURST_SIZE;
+                    index += 1)
+                       __raw_writeb((u8)index, index);
+
+               /* Read and check the pattern */
+               for (index = index_start;
+                    index < index_start + DDR_TEST_BURST_SIZE;
+                    index += 1) {
+                       value = __raw_readb(index);
+                       if (value != (u8)index) {
+                               printf("ddr_memory_test: Failed at address index = 0x%x value = 0x%x *(index) = 0x%x\n",
+                                      index, value, __raw_readb(index));
+
+                               return -1;
+                       }
+               }
+
+               index_start += DDR_TEST_BURST_SIZE;
+               if (index_start >= end_address)
+                       break;
+       }
+
+       puts("ddr memory test PASSED!\n");
+       return 0;
+}
+
+static int ddr_memory_compare(u32 address1, u32 address2, u32 size)
+{
+       u32 index, value, index2, value2;
+
+       for (index = address1, index2 = address2;
+            index < address1 + size;
+            index += 4, index2 += 4) {
+               value = __raw_readl(index);
+               value2 = __raw_readl(index2);
+
+               if (value != value2) {
+                       printf("ddr_memory_test: Compare failed at address = 0x%x value = 0x%x, address2 = 0x%x value2 = 0x%x\n",
+                              index, value, index2, value2);
+
+                       return -1;
+               }
+       }
+
+       puts("ddr memory compare PASSED!\n");
+       return 0;
+}
+
+static int ddr_memory_ecc_err(u32 base, u32 address, u32 ecc_err)
+{
+       u32 value1, value2, value3;
+
+       puts("Disabling DDR ECC ...\n");
+       ddr3_disable_ecc(base);
+
+       value1 = __raw_readl(address);
+       value2 = value1 ^ ecc_err;
+       __raw_writel(value2, address);
+
+       value3 = __raw_readl(address);
+       printf("ECC err test, addr 0x%x, read data 0x%x, wrote data 0x%x, err pattern: 0x%x, read after write data 0x%x\n",
+              address, value1, value2, ecc_err, value3);
+
+       __raw_writel(ECC_START_ADDR1 | (ECC_END_ADDR1 << 16),
+                    base + KS2_DDR3_ECC_ADDR_RANGE1_OFFSET);
+
+       puts("Enabling DDR ECC ...\n");
+       ddr3_enable_ecc(base, 1);
+
+       value1 = __raw_readl(address);
+       printf("ECC err test, addr 0x%x, read data 0x%x\n", address, value1);
+
+       ddr3_check_ecc_int(base);
+       return 0;
+}
+
+static int do_ddr_test(cmd_tbl_t *cmdtp,
+                      int flag, int argc, char * const argv[])
+{
+       u32 start_addr, end_addr, size, ecc_err;
+
+       if ((argc == 4) && (strncmp(argv[1], "ecc_err", 8) == 0)) {
+               if (!ddr3_ecc_support_rmw(KS2_DDR3A_EMIF_CTRL_BASE)) {
+                       puts("ECC RMW isn't supported for this SOC\n");
+                       return 1;
+               }
+
+               start_addr = simple_strtoul(argv[2], NULL, 16);
+               ecc_err = simple_strtoul(argv[3], NULL, 16);
+
+               if ((start_addr < CONFIG_SYS_SDRAM_BASE) ||
+                   (start_addr > (CONFIG_SYS_SDRAM_BASE +
+                    CONFIG_MAX_RAM_BANK_SIZE - 1))) {
+                       puts("Invalid address!\n");
+                       return cmd_usage(cmdtp);
+               }
+
+               ddr_memory_ecc_err(KS2_DDR3A_EMIF_CTRL_BASE,
+                                  start_addr, ecc_err);
+               return 0;
+       }
+
+       if (!(((argc == 4) && (strncmp(argv[1], "test", 5) == 0)) ||
+             ((argc == 5) && (strncmp(argv[1], "compare", 8) == 0))))
+               return cmd_usage(cmdtp);
+
+       start_addr = simple_strtoul(argv[2], NULL, 16);
+       end_addr = simple_strtoul(argv[3], NULL, 16);
+
+       if ((start_addr < CONFIG_SYS_SDRAM_BASE) ||
+           (start_addr > (CONFIG_SYS_SDRAM_BASE +
+            CONFIG_MAX_RAM_BANK_SIZE - 1)) ||
+           (end_addr < CONFIG_SYS_SDRAM_BASE) ||
+           (end_addr > (CONFIG_SYS_SDRAM_BASE +
+            CONFIG_MAX_RAM_BANK_SIZE - 1)) || (start_addr >= end_addr)) {
+               puts("Invalid start or end address!\n");
+               return cmd_usage(cmdtp);
+       }
+
+       puts("Please wait ...\n");
+       if (argc == 5) {
+               size = simple_strtoul(argv[4], NULL, 16);
+               ddr_memory_compare(start_addr, end_addr, size);
+       } else {
+               ddr_memory_test(start_addr, end_addr, 0);
+       }
+
+       return 0;
+}
+
+U_BOOT_CMD(ddr,        5, 1, do_ddr_test,
+          "DDR3 test",
+          "test <start_addr in hex> <end_addr in hex> - test DDR from start\n"
+          "    address to end address\n"
+          "ddr compare <start_addr in hex> <end_addr in hex> <size in hex> -\n"
+          "    compare DDR data of (size) bytes from start address to end\n"
+          "    address\n"
+          "ddr ecc_err <addr in hex> <bit_err in hex> - generate bit errors\n"
+          "    in DDR data at <addr>, the command will read a 32-bit data\n"
+          "    from <addr>, and write (data ^ bit_err) back to <addr>\n"
+);
index 2eabec10f95f6e207ced63295f170a7bf9e2ae3f..923906afb5bec2ab2ff10d149e891cc387918738 100644 (file)
@@ -9,9 +9,19 @@
 
 #include <asm/io.h>
 #include <common.h>
+#include <asm/arch/msmc.h>
 #include <asm/arch/ddr3.h>
 #include <asm/arch/psc_defs.h>
 
+#include <asm/ti-common/ti-edma3.h>
+
+#define DDR3_EDMA_BLK_SIZE_SHIFT       10
+#define DDR3_EDMA_BLK_SIZE             (1 << DDR3_EDMA_BLK_SIZE_SHIFT)
+#define DDR3_EDMA_BCNT                 0x8000
+#define DDR3_EDMA_CCNT                 1
+#define DDR3_EDMA_XF_SIZE              (DDR3_EDMA_BLK_SIZE * DDR3_EDMA_BCNT)
+#define DDR3_EDMA_SLOT_NUM             1
+
 void ddr3_init_ddrphy(u32 base, struct ddr3_phy_config *phy_cfg)
 {
        unsigned int tmp;
@@ -70,6 +80,240 @@ void ddr3_init_ddremif(u32 base, struct ddr3_emif_config *emif_cfg)
        __raw_writel(emif_cfg->sdrfc,  base + KS2_DDR3_SDRFC_OFFSET);
 }
 
+int ddr3_ecc_support_rmw(u32 base)
+{
+       u32 value = __raw_readl(base + KS2_DDR3_MIDR_OFFSET);
+
+       /* Check the DDR3 controller ID reg if the controllers
+          supports ECC RMW or not */
+       if (value == 0x40461C02)
+               return 1;
+
+       return 0;
+}
+
+static void ddr3_ecc_config(u32 base, u32 value)
+{
+       u32 data;
+
+       __raw_writel(value,  base + KS2_DDR3_ECC_CTRL_OFFSET);
+       udelay(100000); /* delay required to synchronize across clock domains */
+
+       if (value & KS2_DDR3_ECC_EN) {
+               /* Clear the 1-bit error count */
+               data = __raw_readl(base + KS2_DDR3_ONE_BIT_ECC_ERR_CNT_OFFSET);
+               __raw_writel(data, base + KS2_DDR3_ONE_BIT_ECC_ERR_CNT_OFFSET);
+
+               /* enable the ECC interrupt */
+               __raw_writel(KS2_DDR3_1B_ECC_ERR_SYS | KS2_DDR3_2B_ECC_ERR_SYS |
+                            KS2_DDR3_WR_ECC_ERR_SYS,
+                            base + KS2_DDR3_ECC_INT_ENABLE_SET_SYS_OFFSET);
+
+               /* Clear the ECC error interrupt status */
+               __raw_writel(KS2_DDR3_1B_ECC_ERR_SYS | KS2_DDR3_2B_ECC_ERR_SYS |
+                            KS2_DDR3_WR_ECC_ERR_SYS,
+                            base + KS2_DDR3_ECC_INT_STATUS_OFFSET);
+       }
+}
+
+static void ddr3_reset_data(u32 base, u32 ddr3_size)
+{
+       u32 mpax[2];
+       u32 seg_num;
+       u32 seg, blks, dst, edma_blks;
+       struct edma3_slot_config slot;
+       struct edma3_channel_config edma_channel;
+       u32 edma_src[DDR3_EDMA_BLK_SIZE/4] __aligned(16) = {0, };
+
+       /* Setup an edma to copy the 1k block to the entire DDR */
+       puts("\nClear entire DDR3 memory to enable ECC\n");
+
+       /* save the SES MPAX regs */
+       msmc_get_ses_mpax(8, 0, mpax);
+
+       /* setup edma slot 1 configuration */
+       slot.opt = EDMA3_SLOPT_TRANS_COMP_INT_ENB |
+                  EDMA3_SLOPT_COMP_CODE(0) |
+                  EDMA3_SLOPT_STATIC | EDMA3_SLOPT_AB_SYNC;
+       slot.bcnt = DDR3_EDMA_BCNT;
+       slot.acnt = DDR3_EDMA_BLK_SIZE;
+       slot.ccnt = DDR3_EDMA_CCNT;
+       slot.src_bidx = 0;
+       slot.dst_bidx = DDR3_EDMA_BLK_SIZE;
+       slot.src_cidx = 0;
+       slot.dst_cidx = 0;
+       slot.link = EDMA3_PARSET_NULL_LINK;
+       slot.bcntrld = 0;
+       edma3_slot_configure(KS2_EDMA0_BASE, DDR3_EDMA_SLOT_NUM, &slot);
+
+       /* configure quik edma channel */
+       edma_channel.slot = DDR3_EDMA_SLOT_NUM;
+       edma_channel.chnum = 0;
+       edma_channel.complete_code = 0;
+       /* event trigger after dst update */
+       edma_channel.trigger_slot_word = EDMA3_TWORD(dst);
+       qedma3_start(KS2_EDMA0_BASE, &edma_channel);
+
+       /* DDR3 size in segments (4KB seg size) */
+       seg_num = ddr3_size << (30 - KS2_MSMC_SEG_SIZE_SHIFT);
+
+       for (seg = 0; seg < seg_num; seg += KS2_MSMC_MAP_SEG_NUM) {
+               /* map 2GB 36-bit DDR address to 32-bit DDR address in EMIF
+                  access slave interface so that edma driver can access */
+               msmc_map_ses_segment(8, 0, base >> KS2_MSMC_SEG_SIZE_SHIFT,
+                                    KS2_MSMC_DST_SEG_BASE + seg, MPAX_SEG_2G);
+
+               if ((seg_num - seg) > KS2_MSMC_MAP_SEG_NUM)
+                       edma_blks = KS2_MSMC_MAP_SEG_NUM <<
+                                       (KS2_MSMC_SEG_SIZE_SHIFT
+                                       - DDR3_EDMA_BLK_SIZE_SHIFT);
+               else
+                       edma_blks = (seg_num - seg) << (KS2_MSMC_SEG_SIZE_SHIFT
+                                       - DDR3_EDMA_BLK_SIZE_SHIFT);
+
+               /* Use edma driver to scrub 2GB DDR memory */
+               for (dst = base, blks = 0; blks < edma_blks;
+                    blks += DDR3_EDMA_BCNT, dst += DDR3_EDMA_XF_SIZE) {
+                       edma3_set_src_addr(KS2_EDMA0_BASE,
+                                          edma_channel.slot, (u32)edma_src);
+                       edma3_set_dest_addr(KS2_EDMA0_BASE,
+                                           edma_channel.slot, (u32)dst);
+
+                       while (edma3_check_for_transfer(KS2_EDMA0_BASE,
+                                                       &edma_channel))
+                               udelay(10);
+               }
+       }
+
+       qedma3_stop(KS2_EDMA0_BASE, &edma_channel);
+
+       /* restore the SES MPAX regs */
+       msmc_set_ses_mpax(8, 0, mpax);
+}
+
+static void ddr3_ecc_init_range(u32 base)
+{
+       u32 ecc_val = KS2_DDR3_ECC_EN;
+       u32 rmw = ddr3_ecc_support_rmw(base);
+
+       if (rmw)
+               ecc_val |= KS2_DDR3_ECC_RMW_EN;
+
+       __raw_writel(0, base + KS2_DDR3_ECC_ADDR_RANGE1_OFFSET);
+
+       ddr3_ecc_config(base, ecc_val);
+}
+
+void ddr3_enable_ecc(u32 base, int test)
+{
+       u32 ecc_val = KS2_DDR3_ECC_ENABLE;
+       u32 rmw = ddr3_ecc_support_rmw(base);
+
+       if (test)
+               ecc_val |= KS2_DDR3_ECC_ADDR_RNG_1_EN;
+
+       if (!rmw) {
+               if (!test)
+                       /* by default, disable ecc when rmw = 0 and no
+                          ecc test */
+                       ecc_val = 0;
+       } else {
+               ecc_val |= KS2_DDR3_ECC_RMW_EN;
+       }
+
+       ddr3_ecc_config(base, ecc_val);
+}
+
+void ddr3_disable_ecc(u32 base)
+{
+       ddr3_ecc_config(base, 0);
+}
+
+#if defined(CONFIG_SOC_K2HK) || defined(CONFIG_SOC_K2L)
+static void cic_init(u32 base)
+{
+       /* Disable CIC global interrupts */
+       __raw_writel(0, base + KS2_CIC_GLOBAL_ENABLE);
+
+       /* Set to normal mode, no nesting, no priority hold */
+       __raw_writel(0, base + KS2_CIC_CTRL);
+       __raw_writel(0, base + KS2_CIC_HOST_CTRL);
+
+       /* Enable CIC global interrupts */
+       __raw_writel(1, base + KS2_CIC_GLOBAL_ENABLE);
+}
+
+static void cic_map_cic_to_gic(u32 base, u32 chan_num, u32 irq_num)
+{
+       /* Map the system interrupt to a CIC channel */
+       __raw_writeb(chan_num, base + KS2_CIC_CHAN_MAP(0) + irq_num);
+
+       /* Enable CIC system interrupt */
+       __raw_writel(irq_num, base + KS2_CIC_SYS_ENABLE_IDX_SET);
+
+       /* Enable CIC Host interrupt */
+       __raw_writel(chan_num, base + KS2_CIC_HOST_ENABLE_IDX_SET);
+}
+
+static void ddr3_map_ecc_cic2_irq(u32 base)
+{
+       cic_init(base);
+       cic_map_cic_to_gic(base, KS2_CIC2_DDR3_ECC_CHAN_NUM,
+                          KS2_CIC2_DDR3_ECC_IRQ_NUM);
+}
+#endif
+
+void ddr3_init_ecc(u32 base)
+{
+       u32 ddr3_size;
+
+       if (!ddr3_ecc_support_rmw(base)) {
+               ddr3_disable_ecc(base);
+               return;
+       }
+
+       ddr3_ecc_init_range(base);
+       ddr3_size = ddr3_get_size();
+       ddr3_reset_data(CONFIG_SYS_SDRAM_BASE, ddr3_size);
+
+       /* mapping DDR3 ECC system interrupt from CIC2 to GIC */
+#if defined(CONFIG_SOC_K2HK) || defined(CONFIG_SOC_K2L)
+       ddr3_map_ecc_cic2_irq(KS2_CIC2_BASE);
+#endif
+       ddr3_enable_ecc(base, 0);
+}
+
+void ddr3_check_ecc_int(u32 base)
+{
+       char *env;
+       int ecc_test = 0;
+       u32 value = __raw_readl(base + KS2_DDR3_ECC_INT_STATUS_OFFSET);
+
+       env = getenv("ecc_test");
+       if (env)
+               ecc_test = simple_strtol(env, NULL, 0);
+
+       if (value & KS2_DDR3_WR_ECC_ERR_SYS)
+               puts("DDR3 ECC write error interrupted\n");
+
+       if (value & KS2_DDR3_2B_ECC_ERR_SYS) {
+               puts("DDR3 ECC 2-bit error interrupted\n");
+
+               if (!ecc_test) {
+                       puts("Reseting the device ...\n");
+                       reset_cpu(0);
+               }
+       }
+
+       value = __raw_readl(base + KS2_DDR3_ONE_BIT_ECC_ERR_CNT_OFFSET);
+       if (value) {
+               printf("1-bit ECC err count: 0x%x\n", value);
+               value = __raw_readl(base +
+                                   KS2_DDR3_ONE_BIT_ECC_ERR_ADDR_LOG_OFFSET);
+               printf("1-bit ECC err address log: 0x%x\n", value);
+       }
+}
+
 void ddr3_reset_ddrphy(void)
 {
        u32 tmp;
index a8f8aee8ab45d4df9c5d76132120d5af8d7663d6..c2b947839d292a14090e15d951703eb99e517f6e 100644 (file)
@@ -13,6 +13,7 @@
 #include <asm/arch/msmc.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/hardware.h>
+#include <asm/arch/psc_defs.h>
 
 void chip_configuration_unlock(void)
 {
@@ -20,17 +21,67 @@ void chip_configuration_unlock(void)
        __raw_writel(KS2_KICK1_MAGIC, KS2_KICK1);
 }
 
+#ifdef CONFIG_SOC_K2L
+void osr_init(void)
+{
+       u32 i;
+       u32 j;
+       u32 val;
+       u32 base = KS2_OSR_CFG_BASE;
+       u32 ecc_ctrl[KS2_OSR_NUM_RAM_BANKS];
+
+       /* Enable the OSR clock domain */
+       psc_enable_module(KS2_LPSC_OSR);
+
+       /* Disable OSR ECC check for all the ram banks */
+       for (i = 0; i < KS2_OSR_NUM_RAM_BANKS; i++) {
+               val = i | KS2_OSR_ECC_VEC_TRIG_RD |
+                       (KS2_OSR_ECC_CTRL << KS2_OSR_ECC_VEC_RD_ADDR_SH);
+
+               writel(val , base + KS2_OSR_ECC_VEC);
+
+               /**
+                * wait till read is done.
+                * Print should be added after earlyprintk support is added.
+                */
+               for (j = 0; j < 10000; j++) {
+                       val = readl(base + KS2_OSR_ECC_VEC);
+                       if (val & KS2_OSR_ECC_VEC_RD_DONE)
+                               break;
+               }
+
+               ecc_ctrl[i] = readl(base + KS2_OSR_ECC_CTRL) ^
+                                               KS2_OSR_ECC_CTRL_CHK;
+
+               writel(ecc_ctrl[i], KS2_MSMC_DATA_BASE + i * 4);
+               writel(ecc_ctrl[i], base + KS2_OSR_ECC_CTRL);
+       }
+
+       /* Reset OSR memory to all zeros */
+       for (i = 0; i < KS2_OSR_SIZE; i += 4)
+               writel(0, KS2_OSR_DATA_BASE + i);
+
+       /* Enable OSR ECC check for all the ram banks */
+       for (i = 0; i < KS2_OSR_NUM_RAM_BANKS; i++)
+               writel(ecc_ctrl[i] |
+                      KS2_OSR_ECC_CTRL_CHK, base + KS2_OSR_ECC_CTRL);
+}
+#endif
+
 int arch_cpu_init(void)
 {
        chip_configuration_unlock();
        icache_enable();
 
-       msmc_share_all_segments(8);  /* TETRIS */
-       msmc_share_all_segments(9);  /* NETCP */
-       msmc_share_all_segments(10); /* QM PDSP */
-       msmc_share_all_segments(11); /* PCIE 0 */
-#ifdef CONFIG_SOC_K2E
-       msmc_share_all_segments(13); /* PCIE 1 */
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_TETRIS);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_NETCP);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_QM_PDSP);
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_PCIE0);
+#if defined(CONFIG_SOC_K2E) || defined(CONFIG_SOC_K2L)
+       msmc_share_all_segments(KS2_MSMC_SEGMENT_PCIE1);
+#endif
+#ifdef CONFIG_SOC_K2L
+       osr_init();
 #endif
 
        /*
index 7d8e5978dfad307a5bbe97afa7a8aae59265b56b..7899141d543a2f7426366c908f4a728797d8fa5d 100644 (file)
@@ -66,3 +66,29 @@ void msmc_share_all_segments(int priv_id)
                msmc->ses[priv_id][j].mpaxh &= 0xffffff7ful;
        }
 }
+
+void msmc_map_ses_segment(int priv_id, int ses_pair,
+                         u32 src_pfn, u32 dst_pfn, enum mpax_seg_size size)
+{
+       struct msms_regs *msmc = (struct msms_regs *)KS2_MSMC_CTRL_BASE;
+
+       msmc->ses[priv_id][ses_pair].mpaxh = src_pfn << 12 |
+                                            (size & 0x1f) | 0x80;
+       msmc->ses[priv_id][ses_pair].mpaxl = dst_pfn << 8 | 0x3f;
+}
+
+void msmc_get_ses_mpax(int priv_id, int ses_pair, u32 *mpax)
+{
+       struct msms_regs *msmc = (struct msms_regs *)KS2_MSMC_CTRL_BASE;
+
+       *mpax++ = msmc->ses[priv_id][ses_pair].mpaxl;
+       *mpax = msmc->ses[priv_id][ses_pair].mpaxh;
+}
+
+void msmc_set_ses_mpax(int priv_id, int ses_pair, u32 *mpax)
+{
+       struct msms_regs *msmc = (struct msms_regs *)KS2_MSMC_CTRL_BASE;
+
+       msmc->ses[priv_id][ses_pair].mpaxl = *mpax++;
+       msmc->ses[priv_id][ses_pair].mpaxh = *mpax;
+}
diff --git a/arch/arm/cpu/armv7/keystone/spl.c b/arch/arm/cpu/armv7/keystone/spl.c
deleted file mode 100644 (file)
index d4b0e9b..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * common spl init code
- *
- * (C) Copyright 2012-2014
- *     Texas Instruments Incorporated, <www.ti.com>
- *
- * SPDX-License-Identifier:     GPL-2.0+
- */
-#include <common.h>
-#include <config.h>
-#include <ns16550.h>
-#include <malloc.h>
-#include <spl.h>
-#include <spi_flash.h>
-
-#include <asm/u-boot.h>
-#include <asm/utils.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-#ifdef CONFIG_K2HK_EVM
-static struct pll_init_data spl_pll_config[] = {
-       CORE_PLL_799,
-       TETRIS_PLL_500,
-};
-#endif
-
-#ifdef CONFIG_K2E_EVM
-static struct pll_init_data spl_pll_config[] = {
-       CORE_PLL_800,
-};
-#endif
-
-void spl_init_keystone_plls(void)
-{
-       init_plls(ARRAY_SIZE(spl_pll_config), spl_pll_config);
-}
-
-void spl_board_init(void)
-{
-       spl_init_keystone_plls();
-       preloader_console_init();
-}
-
-u32 spl_boot_device(void)
-{
-#if defined(CONFIG_SPL_SPI_LOAD)
-       return BOOT_DEVICE_SPI;
-#else
-       puts("Unknown boot device\n");
-       hang();
-#endif
-}
index a202b0318e0659e02551027c6de9e6fa9e56b095..dd5aaa286a68d708fda6814e6d107adba4d70231 100644 (file)
@@ -21,6 +21,7 @@
 #include <stdbool.h>
 #include <asm/arch/mxc_hdmi.h>
 #include <asm/arch/crm_regs.h>
+#include <asm/bootm.h>
 
 enum ldo_reg {
        LDO_ARM,
index 6fae1e5f36e5a3ea416e68275c5cd51f2f19fe20..4a48f847814496472469a1c64531c67c3b46cf3b 100644 (file)
@@ -16,7 +16,7 @@ config TARGET_OMAP3_BEAGLE
        bool "TI OMAP3 BeagleBoard"
 
 config TARGET_CM_T35
-       bool "CompuLab CM-T35"
+       bool "CompuLab CM-T3530 and CM-T3730 boards"
 
 config TARGET_DEVKIT8000
        bool "TimLL OMAP3 Devkit8000"
index 0eab264668c8502b775b219fffea48797a9f7447..8c3e5f7cd423c608ade2409fc233c0c706251b9d 100644 (file)
@@ -176,7 +176,7 @@ static void socfpga_nic301_slave_ns(void)
 
 static uint32_t iswgrp_handoff[8];
 
-int misc_init_r(void)
+int arch_early_init_r(void)
 {
        int i;
        for (i = 0; i < 8; i++) /* Cache initial SW setting regs */
index db9bdad7d6c94e62308b89574719c75d17ed5054..569fa418f465683a1d40d553d3921728b99b2b77 100644 (file)
@@ -42,13 +42,4 @@ SECTIONS
                . = ALIGN(4);
                __bss_end = .;
        } >.sdram
-
-       . = ALIGN(8);
-       __malloc_start = .;
-       . = . + CONFIG_SPL_MALLOC_SIZE;
-       __malloc_end = .;
-
-       . = . + CONFIG_SPL_STACK_SIZE;
-       . = ALIGN(8);
-       __stack_start = .;
 }
index 0121cd78f27694629b49f50890642a0500a3d27e..8651b80ce0672f86334b7034fe27b889d30d2080 100644 (file)
@@ -6,9 +6,6 @@
 #include <asm/errno.h>
 #include <asm/imx-common/video.h>
 
-extern struct display_info_t const displays[];
-extern size_t display_count;
-
 int board_video_skip(void)
 {
        int i;
index 32494372639e89cb66675c1afb63694b4391eb90..d8bf87258b5d2ec07227ddd1b815dfced2ccad5f 100644 (file)
@@ -36,7 +36,7 @@ struct module_pin_mux {
 
 /* Pad control register offset */
 #define PAD_CTRL_BASE  0x800
-#define OFFSET(x)      (unsigned int) (&((struct pad_signals *) \
+#define OFFSET(x)      (unsigned int) (&((struct pad_signals *)\
                                (PAD_CTRL_BASE))->x)
 
 /*
index df33a78a103da33d59264f5312f8cfd482c77d5a..d013b830ed5c4243453ec3768a4497e90b660f28 100644 (file)
@@ -25,27 +25,28 @@ enum ext_clk_e {
 
 extern unsigned int external_clk[ext_clk_count];
 
-enum clk_e {
-       core_pll_clk,
-       pass_pll_clk,
-       ddr3_pll_clk,
-       sys_clk0_clk,
-       sys_clk0_1_clk,
-       sys_clk0_2_clk,
-       sys_clk0_3_clk,
-       sys_clk0_4_clk,
-       sys_clk0_6_clk,
-       sys_clk0_8_clk,
-       sys_clk0_12_clk,
-       sys_clk0_24_clk,
-       sys_clk1_clk,
-       sys_clk1_3_clk,
-       sys_clk1_4_clk,
-       sys_clk1_6_clk,
-       sys_clk1_12_clk,
-       sys_clk2_clk,
-       sys_clk3_clk
-};
+#define CLK_LIST(CLK)\
+       CLK(0, core_pll_clk)\
+       CLK(1, pass_pll_clk)\
+       CLK(2, ddr3_pll_clk)\
+       CLK(3, sys_clk0_clk)\
+       CLK(4, sys_clk0_1_clk)\
+       CLK(5, sys_clk0_2_clk)\
+       CLK(6, sys_clk0_3_clk)\
+       CLK(7, sys_clk0_4_clk)\
+       CLK(8, sys_clk0_6_clk)\
+       CLK(9, sys_clk0_8_clk)\
+       CLK(10, sys_clk0_12_clk)\
+       CLK(11, sys_clk0_24_clk)\
+       CLK(12, sys_clk1_clk)\
+       CLK(13, sys_clk1_3_clk)\
+       CLK(14, sys_clk1_4_clk)\
+       CLK(15, sys_clk1_6_clk)\
+       CLK(16, sys_clk1_12_clk)\
+       CLK(17, sys_clk2_clk)\
+       CLK(18, sys_clk3_clk)
+
+#define PLLSET_CMD_LIST        "<pa|ddr3>"
 
 #define KS2_CLK1_6     sys_clk0_6_clk
 
index bdb869bed41f2db8f9ad7d06f348525bc41ad6d6..f28d5f0c4e99b7eca524864e0c4b065847891e5d 100644 (file)
@@ -28,29 +28,30 @@ enum ext_clk_e {
 
 extern unsigned int external_clk[ext_clk_count];
 
-enum clk_e {
-       core_pll_clk,
-       pass_pll_clk,
-       tetris_pll_clk,
-       ddr3a_pll_clk,
-       ddr3b_pll_clk,
-       sys_clk0_clk,
-       sys_clk0_1_clk,
-       sys_clk0_2_clk,
-       sys_clk0_3_clk,
-       sys_clk0_4_clk,
-       sys_clk0_6_clk,
-       sys_clk0_8_clk,
-       sys_clk0_12_clk,
-       sys_clk0_24_clk,
-       sys_clk1_clk,
-       sys_clk1_3_clk,
-       sys_clk1_4_clk,
-       sys_clk1_6_clk,
-       sys_clk1_12_clk,
-       sys_clk2_clk,
-       sys_clk3_clk
-};
+#define CLK_LIST(CLK)\
+       CLK(0, core_pll_clk)\
+       CLK(1, pass_pll_clk)\
+       CLK(2, tetris_pll_clk)\
+       CLK(3, ddr3a_pll_clk)\
+       CLK(4, ddr3b_pll_clk)\
+       CLK(5, sys_clk0_clk)\
+       CLK(6, sys_clk0_1_clk)\
+       CLK(7, sys_clk0_2_clk)\
+       CLK(8, sys_clk0_3_clk)\
+       CLK(9, sys_clk0_4_clk)\
+       CLK(10, sys_clk0_6_clk)\
+       CLK(11, sys_clk0_8_clk)\
+       CLK(12, sys_clk0_12_clk)\
+       CLK(13, sys_clk0_24_clk)\
+       CLK(14, sys_clk1_clk)\
+       CLK(15, sys_clk1_3_clk)\
+       CLK(16, sys_clk1_4_clk)\
+       CLK(17, sys_clk1_6_clk)\
+       CLK(18, sys_clk1_12_clk)\
+       CLK(19, sys_clk2_clk)\
+       CLK(20, sys_clk3_clk)
+
+#define PLLSET_CMD_LIST                "<pa|arm|ddr3a|ddr3b>"
 
 #define KS2_CLK1_6 sys_clk0_6_clk
 
diff --git a/arch/arm/include/asm/arch-keystone/clock-k2l.h b/arch/arm/include/asm/arch-keystone/clock-k2l.h
new file mode 100644 (file)
index 0000000..bb9a5c4
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * K2L: Clock management APIs
+ *
+ * (C) Copyright 2012-2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef __ASM_ARCH_CLOCK_K2L_H
+#define __ASM_ARCH_CLOCK_K2L_H
+
+enum ext_clk_e {
+       sys_clk,
+       alt_core_clk,
+       pa_clk,
+       tetris_clk,
+       ddr3_clk,
+       pcie_clk,
+       sgmii_clk,
+       usb_clk,
+       rp1_clk,
+       ext_clk_count /* number of external clocks */
+};
+
+extern unsigned int external_clk[ext_clk_count];
+
+#define CLK_LIST(CLK)\
+       CLK(0, core_pll_clk)\
+       CLK(1, pass_pll_clk)\
+       CLK(2, tetris_pll_clk)\
+       CLK(3, ddr3_pll_clk)\
+       CLK(4, sys_clk0_clk)\
+       CLK(5, sys_clk0_1_clk)\
+       CLK(6, sys_clk0_2_clk)\
+       CLK(7, sys_clk0_3_clk)\
+       CLK(8, sys_clk0_4_clk)\
+       CLK(9, sys_clk0_6_clk)\
+       CLK(10, sys_clk0_8_clk)\
+       CLK(11, sys_clk0_12_clk)\
+       CLK(12, sys_clk0_24_clk)\
+       CLK(13, sys_clk1_clk)\
+       CLK(14, sys_clk1_3_clk)\
+       CLK(15, sys_clk1_4_clk)\
+       CLK(16, sys_clk1_6_clk)\
+       CLK(17, sys_clk1_12_clk)\
+       CLK(18, sys_clk2_clk)\
+       CLK(19, sys_clk3_clk)\
+
+#define PLLSET_CMD_LIST        "<pa|arm|ddr3>"
+
+#define KS2_CLK1_6     sys_clk0_6_clk
+
+/* PLL identifiers */
+enum pll_type_e {
+       CORE_PLL,
+       PASS_PLL,
+       TETRIS_PLL,
+       DDR3_PLL,
+};
+
+enum {
+       SPD800,
+       SPD1000,
+       SPD1200,
+       SPD1350,
+       SPD1400,
+       SPD_RSV
+};
+
+#define CORE_PLL_799   {CORE_PLL, 13, 1, 2}
+#define CORE_PLL_983   {CORE_PLL, 16, 1, 2}
+#define CORE_PLL_1000  {CORE_PLL, 114, 7, 2}
+#define CORE_PLL_1167  {CORE_PLL, 19, 1, 2}
+#define CORE_PLL_1198  {CORE_PLL, 39, 2, 2}
+#define CORE_PLL_1228  {CORE_PLL, 20, 1, 2}
+#define PASS_PLL_1228  {PASS_PLL, 20, 1, 2}
+#define PASS_PLL_983   {PASS_PLL, 16, 1, 2}
+#define PASS_PLL_1050  {PASS_PLL, 205, 12, 2}
+#define TETRIS_PLL_491 {TETRIS_PLL, 8, 1, 2}
+#define TETRIS_PLL_737 {TETRIS_PLL, 12, 1, 2}
+#define TETRIS_PLL_799 {TETRIS_PLL, 13, 1, 2}
+#define TETRIS_PLL_983 {TETRIS_PLL, 16, 1, 2}
+#define TETRIS_PLL_1000        {TETRIS_PLL, 114, 7, 2}
+#define TETRIS_PLL_1167        {TETRIS_PLL, 19, 1, 2}
+#define TETRIS_PLL_1198        {TETRIS_PLL, 39, 2, 2}
+#define TETRIS_PLL_1228        {TETRIS_PLL, 20, 1, 2}
+#define TETRIS_PLL_1352        {TETRIS_PLL, 22, 1, 2}
+#define TETRIS_PLL_1401        {TETRIS_PLL, 114, 5, 2}
+#define DDR3_PLL_200   {DDR3_PLL, 4, 1, 2}
+#define DDR3_PLL_400   {DDR3_PLL, 16, 1, 4}
+#define DDR3_PLL_800   {DDR3_PLL, 16, 1, 2}
+#define DDR3_PLL_333   {DDR3_PLL, 20, 1, 6}
+
+#endif
index dae000e43ae4166ad49037317d67392ec98a515f..9f6cfb265f4342f3b9e36b682cbb541462846397 100644 (file)
 #include <asm/arch/clock-k2e.h>
 #endif
 
+#ifdef CONFIG_SOC_K2L
+#include <asm/arch/clock-k2l.h>
+#endif
+
 #define MAIN_PLL CORE_PLL
 
 #include <asm/types.h>
 
+#define GENERATE_ENUM(NUM, ENUM) ENUM = NUM,
+#define GENERATE_INDX_STR(NUM, STRING) #NUM"\t- "#STRING"\n"
+#define CLOCK_INDEXES_LIST     CLK_LIST(GENERATE_INDX_STR)
+
+enum clk_e {
+       CLK_LIST(GENERATE_ENUM)
+};
+
 struct keystone_pll_regs {
        u32 reg0;
        u32 reg1;
@@ -46,6 +58,7 @@ void init_pll(const struct pll_init_data *data);
 unsigned long clk_get_rate(unsigned int clk);
 unsigned long clk_round_rate(unsigned int clk, unsigned long hz);
 int clk_set_rate(unsigned int clk, unsigned long hz);
+void pass_pll_pa_clk_enable(void);
 int get_max_dev_speed(void);
 int get_max_arm_speed(void);
 
index 6bf35d354366d1aba944d09960f2f571d7016f47..b044d6f18ff2473f44060aab7816f3329e46a097 100644 (file)
@@ -49,8 +49,14 @@ struct ddr3_emif_config {
 };
 
 void ddr3_init(void);
+int ddr3_get_size(void);
 void ddr3_reset_ddrphy(void);
+void ddr3_init_ecc(u32 base);
+void ddr3_disable_ecc(u32 base);
+void ddr3_check_ecc_int(u32 base);
+int ddr3_ecc_support_rmw(u32 base);
 void ddr3_err_reset_workaround(void);
+void ddr3_enable_ecc(u32 base, int test);
 void ddr3_init_ddrphy(u32 base, struct ddr3_phy_config *phy_cfg);
 void ddr3_init_ddremif(u32 base, struct ddr3_emif_config *emif_cfg);
 
diff --git a/arch/arm/include/asm/arch-keystone/emac_defs.h b/arch/arm/include/asm/arch-keystone/emac_defs.h
deleted file mode 100644 (file)
index 9cd8925..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * emac definitions for keystone2 devices
- *
- * (C) Copyright 2012-2014
- *     Texas Instruments Incorporated, <www.ti.com>
- *
- * SPDX-License-Identifier:     GPL-2.0+
- */
-
-#ifndef _EMAC_DEFS_H_
-#define _EMAC_DEFS_H_
-
-#include <asm/arch/hardware.h>
-#include <asm/io.h>
-
-#define EMAC_EMACSL_BASE_ADDR           (KS2_PASS_BASE + 0x00090900)
-#define EMAC_MDIO_BASE_ADDR             (KS2_PASS_BASE + 0x00090300)
-#define EMAC_SGMII_BASE_ADDR            (KS2_PASS_BASE + 0x00090100)
-
-#define KEYSTONE2_EMAC_GIG_ENABLE
-
-#define MAC_ID_BASE_ADDR                (KS2_DEVICE_STATE_CTRL_BASE + 0x110)
-
-#ifdef CONFIG_SOC_K2HK
-/* MDIO module input frequency */
-#define EMAC_MDIO_BUS_FREQ              (clk_get_rate(pass_pll_clk))
-/* MDIO clock output frequency */
-#define EMAC_MDIO_CLOCK_FREQ            1000000                /* 1.0 MHz */
-#endif
-
-/* MII Status Register */
-#define MII_STATUS_REG                  1
-#define MII_STATUS_LINK_MASK            (0x4)
-
-/* Marvell 88E1111 PHY ID */
-#define PHY_MARVELL_88E1111             (0x01410cc0)
-
-#define MDIO_CONTROL_IDLE               (0x80000000)
-#define MDIO_CONTROL_ENABLE             (0x40000000)
-#define MDIO_CONTROL_FAULT_ENABLE       (0x40000)
-#define MDIO_CONTROL_FAULT              (0x80000)
-#define MDIO_USERACCESS0_GO             (0x80000000)
-#define MDIO_USERACCESS0_WRITE_READ     (0x0)
-#define MDIO_USERACCESS0_WRITE_WRITE    (0x40000000)
-#define MDIO_USERACCESS0_ACK            (0x20000000)
-
-#define EMAC_MACCONTROL_MIIEN_ENABLE       (0x20)
-#define EMAC_MACCONTROL_FULLDUPLEX_ENABLE  (0x1)
-#define EMAC_MACCONTROL_GIGABIT_ENABLE     (1 << 7)
-#define EMAC_MACCONTROL_GIGFORCE           (1 << 17)
-#define EMAC_MACCONTROL_RMIISPEED_100      (1 << 15)
-
-#define EMAC_MIN_ETHERNET_PKT_SIZE         60
-
-struct mac_sl_cfg {
-       u_int32_t max_rx_len;   /* Maximum receive packet length. */
-       u_int32_t ctl;          /* Control bitfield */
-};
-
-/*
- * Definition: Control bitfields used in the ctl field of hwGmacSlCfg_t
- */
-#define GMACSL_RX_ENABLE_RCV_CONTROL_FRAMES       (1 << 24)
-#define GMACSL_RX_ENABLE_RCV_SHORT_FRAMES         (1 << 23)
-#define GMACSL_RX_ENABLE_RCV_ERROR_FRAMES         (1 << 22)
-#define GMACSL_RX_ENABLE_EXT_CTL                  (1 << 18)
-#define GMACSL_RX_ENABLE_GIG_FORCE                (1 << 17)
-#define GMACSL_RX_ENABLE_IFCTL_B                  (1 << 16)
-#define GMACSL_RX_ENABLE_IFCTL_A                  (1 << 15)
-#define GMACSL_RX_ENABLE_CMD_IDLE                 (1 << 11)
-#define GMACSL_TX_ENABLE_SHORT_GAP                (1 << 10)
-#define GMACSL_ENABLE_GIG_MODE                    (1 <<  7)
-#define GMACSL_TX_ENABLE_PACE                     (1 <<  6)
-#define GMACSL_ENABLE                             (1 <<  5)
-#define GMACSL_TX_ENABLE_FLOW_CTL                 (1 <<  4)
-#define GMACSL_RX_ENABLE_FLOW_CTL                 (1 <<  3)
-#define GMACSL_ENABLE_LOOPBACK                    (1 <<  1)
-#define GMACSL_ENABLE_FULL_DUPLEX                 (1 <<  0)
-
-/*
- * DEFINTITION: function return values
- */
-#define GMACSL_RET_OK                        0
-#define GMACSL_RET_INVALID_PORT             -1
-#define GMACSL_RET_WARN_RESET_INCOMPLETE    -2
-#define GMACSL_RET_WARN_MAXLEN_TOO_BIG      -3
-#define GMACSL_RET_CONFIG_FAIL_RESET_ACTIVE -4
-
-/* Register offsets */
-#define CPGMACSL_REG_ID         0x00
-#define CPGMACSL_REG_CTL        0x04
-#define CPGMACSL_REG_STATUS     0x08
-#define CPGMACSL_REG_RESET      0x0c
-#define CPGMACSL_REG_MAXLEN     0x10
-#define CPGMACSL_REG_BOFF       0x14
-#define CPGMACSL_REG_RX_PAUSE   0x18
-#define CPGMACSL_REG_TX_PAURSE  0x1c
-#define CPGMACSL_REG_EM_CTL     0x20
-#define CPGMACSL_REG_PRI        0x24
-
-/* Soft reset register values */
-#define CPGMAC_REG_RESET_VAL_RESET_MASK      (1 << 0)
-#define CPGMAC_REG_RESET_VAL_RESET           (1 << 0)
-
-/* Maxlen register values */
-#define CPGMAC_REG_MAXLEN_LEN                0x3fff
-
-/* Control bitfields */
-#define CPSW_CTL_P2_PASS_PRI_TAGGED     (1 << 5)
-#define CPSW_CTL_P1_PASS_PRI_TAGGED     (1 << 4)
-#define CPSW_CTL_P0_PASS_PRI_TAGGED     (1 << 3)
-#define CPSW_CTL_P0_ENABLE              (1 << 2)
-#define CPSW_CTL_VLAN_AWARE             (1 << 1)
-#define CPSW_CTL_FIFO_LOOPBACK          (1 << 0)
-
-#define DEVICE_CPSW_NUM_PORTS       5                    /* 5 switch ports */
-#define DEVICE_CPSW_BASE            (0x02090800)
-#define target_get_switch_ctl()     CPSW_CTL_P0_ENABLE   /* Enable port 0 */
-#define SWITCH_MAX_PKT_SIZE         9000
-
-/* Register offsets */
-#define CPSW_REG_CTL                0x004
-#define CPSW_REG_STAT_PORT_EN       0x00c
-#define CPSW_REG_MAXLEN             0x040
-#define CPSW_REG_ALE_CONTROL        0x608
-#define CPSW_REG_ALE_PORTCTL(x)     (0x640 + (x)*4)
-
-/* Register values */
-#define CPSW_REG_VAL_STAT_ENABLE_ALL             0xf
-#define CPSW_REG_VAL_ALE_CTL_RESET_AND_ENABLE    ((u_int32_t)0xc0000000)
-#define CPSW_REG_VAL_ALE_CTL_BYPASS              ((u_int32_t)0x00000010)
-#define CPSW_REG_VAL_PORTCTL_FORWARD_MODE        0x3
-
-#define SGMII_REG_STATUS_LOCK           BIT(4)
-#define SGMII_REG_STATUS_LINK           BIT(0)
-#define SGMII_REG_STATUS_AUTONEG        BIT(2)
-#define SGMII_REG_CONTROL_AUTONEG       BIT(0)
-#define SGMII_REG_CONTROL_MASTER        BIT(5)
-#define        SGMII_REG_MR_ADV_ENABLE         BIT(0)
-#define        SGMII_REG_MR_ADV_LINK           BIT(15)
-#define        SGMII_REG_MR_ADV_FULL_DUPLEX    BIT(12)
-#define SGMII_REG_MR_ADV_GIG_MODE       BIT(11)
-
-#define SGMII_LINK_MAC_MAC_AUTONEG      0
-#define SGMII_LINK_MAC_PHY              1
-#define SGMII_LINK_MAC_MAC_FORCED       2
-#define SGMII_LINK_MAC_FIBER            3
-#define SGMII_LINK_MAC_PHY_FORCED       4
-
-#define TARGET_SGMII_BASE              KS2_PASS_BASE + 0x00090100
-#define TARGET_SGMII_BASE_ADDRESSES    {KS2_PASS_BASE + 0x00090100, \
-                                       KS2_PASS_BASE + 0x00090200, \
-                                       KS2_PASS_BASE + 0x00090400, \
-                                       KS2_PASS_BASE + 0x00090500}
-
-#define SGMII_OFFSET(x)        ((x <= 1) ? (x * 0x100) : ((x * 0x100) + 0x100))
-
-/*
- * SGMII registers
- */
-#define SGMII_IDVER_REG(x)    (TARGET_SGMII_BASE + SGMII_OFFSET(x) + 0x000)
-#define SGMII_SRESET_REG(x)   (TARGET_SGMII_BASE + SGMII_OFFSET(x) + 0x004)
-#define SGMII_CTL_REG(x)      (TARGET_SGMII_BASE + SGMII_OFFSET(x) + 0x010)
-#define SGMII_STATUS_REG(x)   (TARGET_SGMII_BASE + SGMII_OFFSET(x) + 0x014)
-#define SGMII_MRADV_REG(x)    (TARGET_SGMII_BASE + SGMII_OFFSET(x) + 0x018)
-#define SGMII_LPADV_REG(x)    (TARGET_SGMII_BASE + SGMII_OFFSET(x) + 0x020)
-#define SGMII_TXCFG_REG(x)    (TARGET_SGMII_BASE + SGMII_OFFSET(x) + 0x030)
-#define SGMII_RXCFG_REG(x)    (TARGET_SGMII_BASE + SGMII_OFFSET(x) + 0x034)
-#define SGMII_AUXCFG_REG(x)   (TARGET_SGMII_BASE + SGMII_OFFSET(x) + 0x038)
-
-#define DEVICE_EMACSL_BASE(x)      (KS2_PASS_BASE + 0x00090900 + (x) * 0x040)
-#define DEVICE_N_GMACSL_PORTS           4
-#define DEVICE_EMACSL_RESET_POLL_COUNT  100
-
-#define DEVICE_PSTREAM_CFG_REG_ADDR                 (KS2_PASS_BASE + 0x604)
-
-#ifdef CONFIG_SOC_K2HK
-#define DEVICE_PSTREAM_CFG_REG_VAL_ROUTE_CPPI      0x06060606
-#endif
-
-#define hw_config_streaming_switch() \
-       writel(DEVICE_PSTREAM_CFG_REG_VAL_ROUTE_CPPI,\
-              DEVICE_PSTREAM_CFG_REG_ADDR);
-
-/* EMAC MDIO Registers Structure */
-struct mdio_regs {
-       dv_reg          version;
-       dv_reg          control;
-       dv_reg          alive;
-       dv_reg          link;
-       dv_reg          linkintraw;
-       dv_reg          linkintmasked;
-       u_int8_t        rsvd0[8];
-       dv_reg          userintraw;
-       dv_reg          userintmasked;
-       dv_reg          userintmaskset;
-       dv_reg          userintmaskclear;
-       u_int8_t        rsvd1[80];
-       dv_reg          useraccess0;
-       dv_reg          userphysel0;
-       dv_reg          useraccess1;
-       dv_reg          userphysel1;
-};
-
-/* Ethernet MAC Registers Structure */
-struct emac_regs {
-       dv_reg          idver;
-       dv_reg          maccontrol;
-       dv_reg          macstatus;
-       dv_reg          soft_reset;
-       dv_reg          rx_maxlen;
-       u32             rsvd0;
-       dv_reg          rx_pause;
-       dv_reg          tx_pause;
-       dv_reg          emcontrol;
-       dv_reg          pri_map;
-       u32             rsvd1[6];
-};
-
-#define SGMII_ACCESS(port, reg) \
-       *((volatile unsigned int *)(sgmiis[port] + reg))
-
-struct eth_priv_t {
-       char    int_name[32];
-       int     rx_flow;
-       int     phy_addr;
-       int     slave_port;
-       int     sgmii_link_type;
-};
-
-extern struct eth_priv_t eth_priv_cfg[];
-
-int keystone2_emac_initialize(struct eth_priv_t *eth_priv);
-void sgmii_serdes_setup_156p25mhz(void);
-void sgmii_serdes_shutdown(void);
-
-#endif  /* _EMAC_DEFS_H_ */
index 62172a4b84d65c67b5c45e097c310bbfc0d3dd0a..9512756619b3eae14075a9d36b756ac46ae4bdaa 100644 (file)
 #define KS2_LPSC_PCIE_1                        27
 #define KS2_LPSC_XGE                   50
 
+/* MSMC */
+#define KS2_MSMC_SEGMENT_PCIE1         13
+
 /* Chip Interrupt Controller */
 #define KS2_CIC2_DDR3_ECC_IRQ_NUM      -1      /* not defined in K2E */
 #define KS2_CIC2_DDR3_ECC_CHAN_NUM     -1      /* not defined in K2E */
 
+/* SGMII SerDes */
+#define KS2_SGMII_SERDES2_BASE         0x02324000
+#define KS2_LANES_PER_SGMII_SERDES     4
+
 /* Number of DSP cores */
 #define KS2_NUM_DSPS                   1
 
+/* NETCP pktdma */
+#define KS2_NETCP_PDMA_CTRL_BASE       0x24186000
+#define KS2_NETCP_PDMA_TX_BASE         0x24187000
+#define KS2_NETCP_PDMA_TX_CH_NUM       21
+#define KS2_NETCP_PDMA_RX_BASE         0x24188000
+#define KS2_NETCP_PDMA_RX_CH_NUM       91
+#define KS2_NETCP_PDMA_SCHED_BASE      0x24186100
+#define KS2_NETCP_PDMA_RX_FLOW_BASE    0x24189000
+#define KS2_NETCP_PDMA_RX_FLOW_NUM     96
+#define KS2_NETCP_PDMA_RX_FREE_QUEUE   4001
+#define KS2_NETCP_PDMA_RX_RCV_QUEUE    4002
+#define KS2_NETCP_PDMA_TX_SND_QUEUE    896
+
+/* NETCP */
+#define KS2_NETCP_BASE                 0x24000000
+
 #endif
index eb132f73e605dd3d189be6d899b6e896ddaeb364..5a9ea4fbca56dd089af020ab55a9c91c2c3dd2d2 100644 (file)
@@ -10,8 +10,6 @@
 #ifndef __ASM_ARCH_HARDWARE_K2HK_H
 #define __ASM_ARCH_HARDWARE_K2HK_H
 
-#define KS2_MISC_CTRL                  (KS2_DEVICE_STATE_CTRL_BASE + 0xc7c)
-
 #define KS2_ARM_PLL_EN                 BIT(13)
 
 /* PA SS Registers */
 #define KS2_DDR3B_EMIF_DATA_BASE       0x60000000
 #define KS2_DDR3B_DDRPHYC              0x02328000
 
+#define KS2_CIC2_DDR3_ECC_IRQ_NUM      0x0D3 /* DDR3 ECC system irq number */
+#define KS2_CIC2_DDR3_ECC_CHAN_NUM     0x01D /* DDR3 ECC int mapped to CIC2
+                                                channel 29 */
+
+/* SGMII SerDes */
+#define KS2_LANES_PER_SGMII_SERDES     4
+
 /* Number of DSP cores */
 #define KS2_NUM_DSPS                   8
 
+/* NETCP pktdma */
+#define KS2_NETCP_PDMA_CTRL_BASE       0x02004000
+#define KS2_NETCP_PDMA_TX_BASE         0x02004400
+#define KS2_NETCP_PDMA_TX_CH_NUM       9
+#define KS2_NETCP_PDMA_RX_BASE         0x02004800
+#define KS2_NETCP_PDMA_RX_CH_NUM       26
+#define KS2_NETCP_PDMA_SCHED_BASE      0x02004c00
+#define KS2_NETCP_PDMA_RX_FLOW_BASE    0x02005000
+#define KS2_NETCP_PDMA_RX_FLOW_NUM     32
+#define KS2_NETCP_PDMA_RX_FREE_QUEUE   4001
+#define KS2_NETCP_PDMA_RX_RCV_QUEUE    4002
+#define KS2_NETCP_PDMA_TX_SND_QUEUE    648
+
+/* NETCP */
+#define KS2_NETCP_BASE                 0x02000000
+
 #endif /* __ASM_ARCH_HARDWARE_H */
diff --git a/arch/arm/include/asm/arch-keystone/hardware-k2l.h b/arch/arm/include/asm/arch-keystone/hardware-k2l.h
new file mode 100644 (file)
index 0000000..05532ad
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * K2L: SoC definitions
+ *
+ * (C) Copyright 2012-2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef __ASM_ARCH_HARDWARE_K2L_H
+#define __ASM_ARCH_HARDWARE_K2L_H
+
+#define KS2_ARM_PLL_EN                 BIT(13)
+
+/* PA SS Registers */
+#define KS2_PASS_BASE                  0x26000000
+
+/* Power and Sleep Controller (PSC) Domains */
+#define KS2_LPSC_MOD                   0
+#define KS2_LPSC_DFE_IQN_SYS           1
+#define KS2_LPSC_USB                   2
+#define KS2_LPSC_EMIF25_SPI            3
+#define KS2_LPSC_TSIP                   4
+#define KS2_LPSC_DEBUGSS_TRC           5
+#define KS2_LPSC_TETB_TRC              6
+#define KS2_LPSC_PKTPROC               7
+#define KS2_LPSC_PA                    KS2_LPSC_PKTPROC
+#define KS2_LPSC_SGMII                 8
+#define KS2_LPSC_CPGMAC                        KS2_LPSC_SGMII
+#define KS2_LPSC_CRYPTO                        9
+#define KS2_LPSC_PCIE0                 10
+#define KS2_LPSC_PCIE1                 11
+#define KS2_LPSC_JESD_MISC             12
+#define KS2_LPSC_CHIP_SRSS             13
+#define KS2_LPSC_MSMC                  14
+#define KS2_LPSC_GEM_1                 16
+#define KS2_LPSC_GEM_2                 17
+#define KS2_LPSC_GEM_3                 18
+#define KS2_LPSC_EMIF4F_DDR3           23
+#define KS2_LPSC_TAC                   25
+#define KS2_LPSC_RAC                   26
+#define KS2_LPSC_DDUC4X_CFR2X_BB       27
+#define KS2_LPSC_FFTC_A                        28
+#define KS2_LPSC_OSR                   34
+#define KS2_LPSC_TCP3D_0               35
+#define KS2_LPSC_TCP3D_1               37
+#define KS2_LPSC_VCP2X4_A              39
+#define KS2_LPSC_VCP2X4_B              40
+#define KS2_LPSC_VCP2X4_C              41
+#define KS2_LPSC_VCP2X4_D              42
+#define KS2_LPSC_BCP                   47
+#define KS2_LPSC_DPD4X                 48
+#define KS2_LPSC_FFTC_B                        49
+#define KS2_LPSC_IQN_AIL               50
+
+/* MSMC */
+#define KS2_MSMC_SEGMENT_PCIE1         14
+
+/* Chip Interrupt Controller */
+#define KS2_CIC2_DDR3_ECC_IRQ_NUM      0x0D3
+#define KS2_CIC2_DDR3_ECC_CHAN_NUM     0x01D
+
+/* OSR */
+#define KS2_OSR_DATA_BASE              0x70000000      /* OSR data base */
+#define KS2_OSR_CFG_BASE               0x02348c00      /* OSR config base */
+#define KS2_OSR_ECC_VEC                        0x08            /* ECC Vector reg */
+#define KS2_OSR_ECC_CTRL               0x14            /* ECC control reg */
+
+/* OSR ECC Vector register */
+#define KS2_OSR_ECC_VEC_TRIG_RD                BIT(15)         /* trigger a read op */
+#define KS2_OSR_ECC_VEC_RD_DONE                BIT(24)         /* read complete */
+
+#define KS2_OSR_ECC_VEC_RAM_ID_SH      0               /* RAM ID shift */
+#define KS2_OSR_ECC_VEC_RD_ADDR_SH     16              /* read address shift */
+
+/* OSR ECC control register */
+#define KS2_OSR_ECC_CTRL_EN            BIT(0)          /* ECC enable bit */
+#define KS2_OSR_ECC_CTRL_CHK           BIT(1)          /* ECC check bit */
+#define KS2_OSR_ECC_CTRL_RMW           BIT(2)          /* ECC check bit */
+
+/* Number of OSR RAM banks */
+#define KS2_OSR_NUM_RAM_BANKS          4
+
+/* OSR memory size */
+#define KS2_OSR_SIZE                   0x100000
+
+/* Number of DSP cores */
+#define KS2_NUM_DSPS                   4
+
+/* NETCP pktdma */
+#define KS2_NETCP_PDMA_CTRL_BASE       0x26186000
+#define KS2_NETCP_PDMA_TX_BASE         0x26187000
+#define KS2_NETCP_PDMA_TX_CH_NUM       21
+#define KS2_NETCP_PDMA_RX_BASE         0x26188000
+#define KS2_NETCP_PDMA_RX_CH_NUM       91
+#define KS2_NETCP_PDMA_SCHED_BASE      0x26186100
+#define KS2_NETCP_PDMA_RX_FLOW_BASE    0x26189000
+#define KS2_NETCP_PDMA_RX_FLOW_NUM     96
+#define KS2_NETCP_PDMA_TX_SND_QUEUE    896
+
+#endif /* __ASM_ARCH_HARDWARE_K2L_H */
index 76e6441e579547e674a7b7da23e0789cdaf9e585..c6a54d8b91bac618df69390599f6af73d44d5fb5 100644 (file)
@@ -87,6 +87,52 @@ typedef volatile unsigned int   *dv_reg_p;
 
 #define KS2_DDR3_PLLCTRL_PHY_RESET     0x80000000
 
+/* DDR3 ECC */
+#define KS2_DDR3_ECC_INT_STATUS_OFFSET                 0x0AC
+#define KS2_DDR3_ECC_INT_ENABLE_SET_SYS_OFFSET         0x0B4
+#define KS2_DDR3_ECC_CTRL_OFFSET                       0x110
+#define KS2_DDR3_ECC_ADDR_RANGE1_OFFSET                        0x114
+#define KS2_DDR3_ONE_BIT_ECC_ERR_CNT_OFFSET            0x130
+#define KS2_DDR3_ONE_BIT_ECC_ERR_ADDR_LOG_OFFSET       0x13C
+
+/* DDR3 ECC Interrupt Status register */
+#define KS2_DDR3_1B_ECC_ERR_SYS                BIT(5)
+#define KS2_DDR3_2B_ECC_ERR_SYS                BIT(4)
+#define KS2_DDR3_WR_ECC_ERR_SYS                BIT(3)
+
+/* DDR3 ECC Control register */
+#define KS2_DDR3_ECC_EN                        BIT(31)
+#define KS2_DDR3_ECC_ADDR_RNG_PROT     BIT(30)
+#define KS2_DDR3_ECC_VERIFY_EN         BIT(29)
+#define KS2_DDR3_ECC_RMW_EN            BIT(28)
+#define KS2_DDR3_ECC_ADDR_RNG_1_EN     BIT(0)
+
+#define KS2_DDR3_ECC_ENABLE            (KS2_DDR3_ECC_EN | \
+                                       KS2_DDR3_ECC_ADDR_RNG_PROT | \
+                                       KS2_DDR3_ECC_VERIFY_EN)
+
+/* EDMA */
+#define KS2_EDMA0_BASE                 0x02700000
+
+/* EDMA3 register offsets */
+#define KS2_EDMA_QCHMAP0               0x0200
+#define KS2_EDMA_IPR                   0x1068
+#define KS2_EDMA_ICR                   0x1070
+#define KS2_EDMA_QEECR                 0x1088
+#define KS2_EDMA_QEESR                 0x108c
+#define KS2_EDMA_PARAM_1(x)            (0x4020 + (4 * x))
+
+/* Chip Interrupt Controller */
+#define KS2_CIC2_BASE                  0x02608000
+
+/* Chip Interrupt Controller register offsets */
+#define KS2_CIC_CTRL                   0x04
+#define KS2_CIC_HOST_CTRL              0x0C
+#define KS2_CIC_GLOBAL_ENABLE          0x10
+#define KS2_CIC_SYS_ENABLE_IDX_SET     0x28
+#define KS2_CIC_HOST_ENABLE_IDX_SET    0x34
+#define KS2_CIC_CHAN_MAP(n)            (0x0400 + (n << 2))
+
 #define KS2_UART0_BASE                 0x02530c00
 #define KS2_UART1_BASE                 0x02531000
 
@@ -140,19 +186,51 @@ typedef volatile unsigned int   *dv_reg_p;
 /* Flag from ks2_debug options to check if DSPs need to stay ON */
 #define DBG_LEAVE_DSPS_ON              0x1
 
+/* MSMC control */
+#define KS2_MSMC_CTRL_BASE             0x0bc00000
+#define KS2_MSMC_DATA_BASE             0x0c000000
+#define KS2_MSMC_SEGMENT_TETRIS                8
+#define KS2_MSMC_SEGMENT_NETCP         9
+#define KS2_MSMC_SEGMENT_QM_PDSP       10
+#define KS2_MSMC_SEGMENT_PCIE0         11
+
+/* MSMC segment size shift bits */
+#define KS2_MSMC_SEG_SIZE_SHIFT                12
+#define KS2_MSMC_MAP_SEG_NUM           (2 << (30 - KS2_MSMC_SEG_SIZE_SHIFT))
+#define KS2_MSMC_DST_SEG_BASE          (CONFIG_SYS_LPAE_SDRAM_BASE >> \
+                                       KS2_MSMC_SEG_SIZE_SHIFT)
+
 /* Device speed */
 #define KS2_REV1_DEVSPEED              (KS2_DEVICE_STATE_CTRL_BASE + 0xc98)
 #define KS2_EFUSE_BOOTROM              (KS2_DEVICE_STATE_CTRL_BASE + 0xc90)
+#define KS2_MISC_CTRL                  (KS2_DEVICE_STATE_CTRL_BASE + 0xc7c)
 
 /* Queue manager */
-#define KS2_QM_MANAGER_BASE            0x02a02000
+#define KS2_QM_BASE_ADDRESS            0x23a80000
+#define KS2_QM_CONF_BASE               0x02a02000
 #define KS2_QM_DESC_SETUP_BASE         0x02a03000
-#define KS2_QM_MANAGER_QUEUES_BASEi    0x02a80000
+#define KS2_QM_STATUS_RAM_BASE         0x02a06000
+#define KS2_QM_INTD_CONF_BASE          0x02a0c000
+#define KS2_QM_PDSP1_CMD_BASE          0x02a20000
+#define KS2_QM_PDSP1_CTRL_BASE         0x02a0f000
+#define KS2_QM_PDSP1_IRAM_BASE         0x02a10000
+#define KS2_QM_MANAGER_QUEUES_BASE     0x02a80000
 #define KS2_QM_MANAGER_Q_PROXY_BASE    0x02ac0000
 #define KS2_QM_QUEUE_STATUS_BASE       0x02a40000
+#define KS2_QM_LINK_RAM_BASE           0x00100000
+#define KS2_QM_REGION_NUM              64
+#define KS2_QM_QPOOL_NUM               4000
 
-/* MSMC control */
-#define KS2_MSMC_CTRL_BASE             0x0bc00000
+/* USB */
+#define KS2_USB_SS_BASE                        0x02680000
+#define KS2_USB_HOST_XHCI_BASE         (KS2_USB_SS_BASE + 0x10000)
+#define KS2_DEV_USB_PHY_BASE           0x02620738
+#define KS2_USB_PHY_CFG_BASE           0x02630000
+
+#define KS2_MAC_ID_BASE_ADDR           (KS2_DEVICE_STATE_CTRL_BASE + 0x110)
+
+/* SGMII SerDes */
+#define KS2_SGMII_SERDES_BASE          0x0232a000
 
 #ifdef CONFIG_SOC_K2HK
 #include <asm/arch/hardware-k2hk.h>
@@ -162,6 +240,10 @@ typedef volatile unsigned int   *dv_reg_p;
 #include <asm/arch/hardware-k2e.h>
 #endif
 
+#ifdef CONFIG_SOC_K2L
+#include <asm/arch/hardware-k2l.h>
+#endif
+
 #ifndef __ASSEMBLY__
 static inline int cpu_is_k2hk(void)
 {
@@ -179,6 +261,14 @@ static inline int cpu_is_k2e(void)
        return (part_no == 0xb9a6) ? 1 : 0;
 }
 
+static inline int cpu_is_k2l(void)
+{
+       unsigned int jtag_id    = __raw_readl(KS2_JTAG_ID_REG);
+       unsigned int part_no    = (jtag_id >> 12) & 0xffff;
+
+       return (part_no == 0xb9a7) ? 1 : 0;
+}
+
 static inline int cpu_revision(void)
 {
        unsigned int jtag_id    = __raw_readl(KS2_JTAG_ID_REG);
index c320db5b65c693cf264f3489951b517b9300dfb7..083f5ba0522ba9e760877acfa8a4d0c99ce9c06c 100644 (file)
 
 #include <asm/arch/hardware.h>
 
+enum mpax_seg_size {
+       MPAX_SEG_4K = 0x0b,
+       MPAX_SEG_8K,
+       MPAX_SEG_16K,
+       MPAX_SEG_32K,
+       MPAX_SEG_64K,
+       MPAX_SEG_128K,
+       MPAX_SEG_256K,
+       MPAX_SEG_512K,
+       MPAX_SEG_1M,
+       MPAX_SEG_2M,
+       MPAX_SEG_4M,
+       MPAX_SEG_8M,
+       MPAX_SEG_16M,
+       MPAX_SEG_32M,
+       MPAX_SEG_64M,
+       MPAX_SEG_128M,
+       MPAX_SEG_256M,
+       MPAX_SEG_512M,
+       MPAX_SEG_1G,
+       MPAX_SEG_2G,
+       MPAX_SEG_4G
+};
+
 void msmc_share_all_segments(int priv_id);
+void msmc_get_ses_mpax(int priv_id, int ses_pair, u32 *mpax);
+void msmc_set_ses_mpax(int priv_id, int ses_pair, u32 *mpax);
+void msmc_map_ses_segment(int priv_id, int ses_pair,
+                         u32 src_pfn, u32 dst_pfn, enum mpax_seg_size size);
 
 #endif
diff --git a/arch/arm/include/asm/arch-keystone/spl.h b/arch/arm/include/asm/arch-keystone/spl.h
deleted file mode 100644 (file)
index a7102d5..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * (C) Copyright 2012-2014
- * Texas Instruments, <www.ti.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-#ifndef _ASM_ARCH_SPL_H_
-#define _ASM_ARCH_SPL_H_
-
-#define BOOT_DEVICE_SPI        2
-
-#endif
diff --git a/arch/arm/include/asm/arch-keystone/xhci-keystone.h b/arch/arm/include/asm/arch-keystone/xhci-keystone.h
new file mode 100644 (file)
index 0000000..3aab4e0
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * USB 3.0 DRD Controller
+ *
+ * (C) Copyright 2012-2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#define USB3_PHY_REF_SSP_EN            BIT(29)
+#define USB3_PHY_OTG_VBUSVLDECTSEL     BIT(16)
+
+/* KEYSTONE2 XHCI PHY register structure */
+struct keystone_xhci_phy {
+       unsigned int phy_utmi;          /* ctl0 */
+       unsigned int phy_pipe;          /* ctl1 */
+       unsigned int phy_param_ctrl_1;  /* ctl2 */
+       unsigned int phy_param_ctrl_2;  /* ctl3 */
+       unsigned int phy_clock;         /* ctl4 */
+       unsigned int phy_pll;           /* ctl5 */
+};
index 2f8320629be86380876b7eada7a955dc7d403be7..eba4a5c7f0cf712a2ed822f22d7467f2b2396de0 100644 (file)
 #define CONTROL_PADCONF_SYS_OFF_MODE   0x0A18
 #define CONTROL_PADCONF_SYS_CLKOUT1    0x0A1A
 #define CONTROL_PADCONF_SYS_CLKOUT2    0x01E2
-#define CONTROL_PADCONF_JTAG_nTRST     0x0A1C
+#define CONTROL_PADCONF_JTAG_NTRST     0x0A1C
 #define CONTROL_PADCONF_JTAG_TCK       0x0A1E
 #define CONTROL_PADCONF_JTAG_TMS       0x0A20
 #define CONTROL_PADCONF_JTAG_TDI       0x0A22
 #define OMAP34XX_CTRL_WKUP_CTRL                (OMAP34XX_CTRL_BASE + 0x0A5C)
 #define OMAP34XX_CTRL_WKUP_CTRL_GPIO_IO_PWRDNZ (1<<6)
 
-#define MUX_VAL(OFFSET,VALUE)\
+#define MUX_VAL(OFFSET, VALUE)\
        writew((VALUE), OMAP34XX_CTRL_BASE + (OFFSET));
 
 #define        CP(x)   (CONTROL_PADCONF_##x)
diff --git a/arch/arm/include/asm/arch-socfpga/spl.h b/arch/arm/include/asm/arch-socfpga/spl.h
deleted file mode 100644 (file)
index 7e310d5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- *  Copyright (C) 2012 Pavel Machek <pavel@denx.de>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#ifndef _SOCFPGA_SPL_H_
-#define _SOCFPGA_SPL_H_
-
-/* Symbols from linker script */
-extern char __malloc_start, __malloc_end, __stack_start;
-
-#define BOOT_DEVICE_RAM 1
-
-#endif
diff --git a/arch/arm/include/asm/imx-common/spi.h b/arch/arm/include/asm/imx-common/spi.h
new file mode 100644 (file)
index 0000000..1d4473a
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright 2011 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __MXC_SPI_H_
+#define __MXC_SPI_H_
+
+/*
+ * Board-level chip-select callback
+ * Should return GPIO # to be used for chip-select
+ */
+
+int board_spi_cs_gpio(unsigned bus, unsigned cs);
+
+#endif
index 2d948508d574f51f18d4f0071d159874083f05e9..1a907d44e405a4a51898f9d3eab6da833101633b 100644 (file)
@@ -21,4 +21,9 @@ struct display_info_t {
 extern int detect_hdmi(struct display_info_t const *dev);
 #endif
 
+#ifdef CONFIG_IMX_VIDEO_SKIP
+extern struct display_info_t const displays[];
+extern size_t display_count;
+#endif
+
 #endif
index e5daf89127125c4d4379ed5b08775c7e4d0cc5ec..8acd7cd1bd5ab539ccef5201607fcfe64aab08a7 100644 (file)
@@ -7,7 +7,7 @@
 #ifndef        _ASM_SPL_H_
 #define        _ASM_SPL_H_
 
-#if defined(CONFIG_OMAP) || defined(CONFIG_SOCFPGA) \
+#if defined(CONFIG_OMAP) \
        || defined(CONFIG_EXYNOS4) || defined(CONFIG_EXYNOS5) \
        || defined(CONFIG_EXYNOS4210)
 /* Platform-specific defines */
similarity index 91%
rename from arch/arm/include/asm/arch-keystone/keystone_nav.h
rename to arch/arm/include/asm/ti-common/keystone_nav.h
index ab81eaf1fda09fdd472ad07b77fe62acd1a62171..696d8c6fc09edac6c73546f6c804f7548bef8150 100644 (file)
 #include <asm/arch/hardware.h>
 #include <asm/io.h>
 
-enum soc_type_t {
-       k2hk
-};
-
 #define QM_OK                    0
 #define QM_ERR                  -1
 #define QM_DESC_TYPE_HOST        0
@@ -173,6 +169,8 @@ struct pktdma_cfg {
        u32                     rx_flow; /* flow that is used for RX */
 };
 
+extern struct pktdma_cfg netcp_pktdma;
+
 /*
  * packet dma user allocates memory for rx buffers
  * and describe it in the following structure
@@ -184,10 +182,10 @@ struct rx_buff_desc {
        u32     rx_flow;
 };
 
-int netcp_close(void);
-int netcp_init(struct rx_buff_desc *rx_buffers);
-int netcp_send(u32 *pkt, int num_bytes, u32 swinfo2);
-void *netcp_recv(u32 **pkt, int *num_bytes);
-void netcp_release_rxhd(void *hd);
+int ksnav_close(struct pktdma_cfg *pktdma);
+int ksnav_init(struct pktdma_cfg *pktdma, struct rx_buff_desc *rx_buffers);
+int ksnav_send(struct pktdma_cfg *pktdma, u32 *pkt, int num_bytes, u32 swinfo2);
+void *ksnav_recv(struct pktdma_cfg *pktdma, u32 **pkt, int *num_bytes);
+void ksnav_release_rxhd(struct pktdma_cfg *pktdma, void *hd);
 
 #endif  /* _KEYSTONE_NAV_H_ */
diff --git a/arch/arm/include/asm/ti-common/keystone_net.h b/arch/arm/include/asm/ti-common/keystone_net.h
new file mode 100644 (file)
index 0000000..011c03c
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+ * emac definitions for keystone2 devices
+ *
+ * (C) Copyright 2012-2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef _KEYSTONE_NET_H_
+#define _KEYSTONE_NET_H_
+
+#include <asm/io.h>
+
+/* EMAC */
+#ifdef CONFIG_KSNET_NETCP_V1_0
+
+#define GBETH_BASE                     (CONFIG_KSNET_NETCP_BASE + 0x00090000)
+#define EMAC_EMACSL_BASE_ADDR          (GBETH_BASE + 0x900)
+#define EMAC_MDIO_BASE_ADDR            (GBETH_BASE + 0x300)
+#define EMAC_SGMII_BASE_ADDR           (GBETH_BASE + 0x100)
+#define DEVICE_EMACSL_BASE(x)          (EMAC_EMACSL_BASE_ADDR + (x) * 0x040)
+
+/* Register offsets */
+#define CPGMACSL_REG_CTL               0x04
+#define CPGMACSL_REG_STATUS            0x08
+#define CPGMACSL_REG_RESET             0x0c
+#define CPGMACSL_REG_MAXLEN            0x10
+
+#elif defined CONFIG_KSNET_NETCP_V1_5
+
+#define GBETH_BASE                     (CONFIG_KSNET_NETCP_BASE + 0x00200000)
+#define CPGMACSL_REG_RX_PRI_MAP                0x020
+#define EMAC_EMACSL_BASE_ADDR          (GBETH_BASE + 0x22000)
+#define EMAC_MDIO_BASE_ADDR            (GBETH_BASE + 0x00f00)
+#define EMAC_SGMII_BASE_ADDR           (GBETH_BASE + 0x00100)
+#define DEVICE_EMACSL_BASE(x)          (EMAC_EMACSL_BASE_ADDR + (x) * 0x1000)
+
+/* Register offsets */
+#define CPGMACSL_REG_CTL               0x330
+#define CPGMACSL_REG_STATUS            0x334
+#define CPGMACSL_REG_RESET             0x338
+#define CPGMACSL_REG_MAXLEN            0x024
+
+#endif
+
+#define KEYSTONE2_EMAC_GIG_ENABLE
+
+#define MAC_ID_BASE_ADDR               CONFIG_KSNET_MAC_ID_BASE
+
+/* MDIO module input frequency */
+#define EMAC_MDIO_BUS_FREQ             (clk_get_rate(pass_pll_clk))
+/* MDIO clock output frequency */
+#define EMAC_MDIO_CLOCK_FREQ           2500000 /* 2.5 MHz */
+
+/* MII Status Register */
+#define MII_STATUS_REG                 1
+#define MII_STATUS_LINK_MASK           0x4
+
+#define MDIO_CONTROL_IDLE              0x80000000
+#define MDIO_CONTROL_ENABLE            0x40000000
+#define MDIO_CONTROL_FAULT_ENABLE      0x40000
+#define MDIO_CONTROL_FAULT             0x80000
+#define MDIO_USERACCESS0_GO            0x80000000
+#define MDIO_USERACCESS0_WRITE_READ    0x0
+#define MDIO_USERACCESS0_WRITE_WRITE   0x40000000
+#define MDIO_USERACCESS0_ACK           0x20000000
+
+#define EMAC_MACCONTROL_MIIEN_ENABLE           0x20
+#define EMAC_MACCONTROL_FULLDUPLEX_ENABLE      0x1
+#define EMAC_MACCONTROL_GIGABIT_ENABLE         BIT(7)
+#define EMAC_MACCONTROL_GIGFORCE               BIT(17)
+#define EMAC_MACCONTROL_RMIISPEED_100          BIT(15)
+
+#define EMAC_MIN_ETHERNET_PKT_SIZE             60
+
+struct mac_sl_cfg {
+       u_int32_t max_rx_len;   /* Maximum receive packet length. */
+       u_int32_t ctl;          /* Control bitfield */
+};
+
+/**
+ * Definition: Control bitfields used in the ctl field of mac_sl_cfg
+ */
+#define GMACSL_RX_ENABLE_RCV_CONTROL_FRAMES    BIT(24)
+#define GMACSL_RX_ENABLE_RCV_SHORT_FRAMES      BIT(23)
+#define GMACSL_RX_ENABLE_RCV_ERROR_FRAMES      BIT(22)
+#define GMACSL_RX_ENABLE_EXT_CTL               BIT(18)
+#define GMACSL_RX_ENABLE_GIG_FORCE             BIT(17)
+#define GMACSL_RX_ENABLE_IFCTL_B               BIT(16)
+#define GMACSL_RX_ENABLE_IFCTL_A               BIT(15)
+#define GMACSL_RX_ENABLE_CMD_IDLE              BIT(11)
+#define GMACSL_TX_ENABLE_SHORT_GAP             BIT(10)
+#define GMACSL_ENABLE_GIG_MODE                 BIT(7)
+#define GMACSL_TX_ENABLE_PACE                  BIT(6)
+#define GMACSL_ENABLE                          BIT(5)
+#define GMACSL_TX_ENABLE_FLOW_CTL              BIT(4)
+#define GMACSL_RX_ENABLE_FLOW_CTL              BIT(3)
+#define GMACSL_ENABLE_LOOPBACK                 BIT(1)
+#define GMACSL_ENABLE_FULL_DUPLEX              BIT(0)
+
+/* EMAC SL function return values */
+#define GMACSL_RET_OK                          0
+#define GMACSL_RET_INVALID_PORT                        -1
+#define GMACSL_RET_WARN_RESET_INCOMPLETE       -2
+#define GMACSL_RET_WARN_MAXLEN_TOO_BIG         -3
+#define GMACSL_RET_CONFIG_FAIL_RESET_ACTIVE    -4
+
+/* EMAC SL register definitions */
+#define DEVICE_EMACSL_RESET_POLL_COUNT         100
+
+/* Soft reset register values */
+#define CPGMAC_REG_RESET_VAL_RESET_MASK                BIT(0)
+#define CPGMAC_REG_RESET_VAL_RESET             BIT(0)
+#define CPGMAC_REG_MAXLEN_LEN                  0x3fff
+
+/* CPSW */
+/* Control bitfields */
+#define CPSW_CTL_P2_PASS_PRI_TAGGED            BIT(5)
+#define CPSW_CTL_P1_PASS_PRI_TAGGED            BIT(4)
+#define CPSW_CTL_P0_PASS_PRI_TAGGED            BIT(3)
+#define CPSW_CTL_P0_ENABLE                     BIT(2)
+#define CPSW_CTL_VLAN_AWARE                    BIT(1)
+#define CPSW_CTL_FIFO_LOOPBACK                 BIT(0)
+
+#define DEVICE_CPSW_NUM_PORTS                  CONFIG_KSNET_CPSW_NUM_PORTS
+#define DEVICE_N_GMACSL_PORTS                  (DEVICE_CPSW_NUM_PORTS - 1)
+
+#ifdef CONFIG_KSNET_NETCP_V1_0
+
+#define DEVICE_CPSW_BASE                       (GBETH_BASE + 0x800)
+#define CPSW_REG_CTL                           0x004
+#define CPSW_REG_STAT_PORT_EN                  0x00c
+#define CPSW_REG_MAXLEN                                0x040
+#define CPSW_REG_ALE_CONTROL                   0x608
+#define CPSW_REG_ALE_PORTCTL(x)                        (0x640 + (x) * 4)
+#define CPSW_REG_VAL_STAT_ENABLE_ALL           0xf
+
+#elif defined CONFIG_KSNET_NETCP_V1_5
+
+#define DEVICE_CPSW_BASE                       (GBETH_BASE + 0x20000)
+#define CPSW_REG_CTL                           0x00004
+#define CPSW_REG_STAT_PORT_EN                  0x00014
+#define CPSW_REG_MAXLEN                                0x01024
+#define CPSW_REG_ALE_CONTROL                   0x1e008
+#define CPSW_REG_ALE_PORTCTL(x)                        (0x1e040 + (x) * 4)
+#define CPSW_REG_VAL_STAT_ENABLE_ALL           0x1ff
+
+#endif
+
+#define CPSW_REG_VAL_ALE_CTL_RESET_AND_ENABLE  ((u_int32_t)0xc0000000)
+#define CPSW_REG_VAL_ALE_CTL_BYPASS            ((u_int32_t)0x00000010)
+#define CPSW_REG_VAL_PORTCTL_FORWARD_MODE      0x3
+
+#define target_get_switch_ctl()                        CPSW_CTL_P0_ENABLE
+#define SWITCH_MAX_PKT_SIZE                    9000
+
+/* SGMII */
+#define SGMII_REG_STATUS_LOCK                  BIT(4)
+#define SGMII_REG_STATUS_LINK                  BIT(0)
+#define SGMII_REG_STATUS_AUTONEG               BIT(2)
+#define SGMII_REG_CONTROL_AUTONEG              BIT(0)
+#define SGMII_REG_CONTROL_MASTER               BIT(5)
+#define SGMII_REG_MR_ADV_ENABLE                        BIT(0)
+#define SGMII_REG_MR_ADV_LINK                  BIT(15)
+#define SGMII_REG_MR_ADV_FULL_DUPLEX           BIT(12)
+#define SGMII_REG_MR_ADV_GIG_MODE              BIT(11)
+
+#define SGMII_LINK_MAC_MAC_AUTONEG             0
+#define SGMII_LINK_MAC_PHY                     1
+#define SGMII_LINK_MAC_MAC_FORCED              2
+#define SGMII_LINK_MAC_FIBER                   3
+#define SGMII_LINK_MAC_PHY_FORCED              4
+
+#ifdef CONFIG_KSNET_NETCP_V1_0
+#define SGMII_OFFSET(x)                ((x <= 1) ? (x * 0x100) : ((x * 0x100) + 0x100))
+#elif defined CONFIG_KSNET_NETCP_V1_5
+#define SGMII_OFFSET(x)                ((x) * 0x100)
+#endif
+
+#define SGMII_IDVER_REG(x)     (EMAC_SGMII_BASE_ADDR + SGMII_OFFSET(x) + 0x000)
+#define SGMII_SRESET_REG(x)    (EMAC_SGMII_BASE_ADDR + SGMII_OFFSET(x) + 0x004)
+#define SGMII_CTL_REG(x)       (EMAC_SGMII_BASE_ADDR + SGMII_OFFSET(x) + 0x010)
+#define SGMII_STATUS_REG(x)    (EMAC_SGMII_BASE_ADDR + SGMII_OFFSET(x) + 0x014)
+#define SGMII_MRADV_REG(x)     (EMAC_SGMII_BASE_ADDR + SGMII_OFFSET(x) + 0x018)
+#define SGMII_LPADV_REG(x)     (EMAC_SGMII_BASE_ADDR + SGMII_OFFSET(x) + 0x020)
+#define SGMII_TXCFG_REG(x)     (EMAC_SGMII_BASE_ADDR + SGMII_OFFSET(x) + 0x030)
+#define SGMII_RXCFG_REG(x)     (EMAC_SGMII_BASE_ADDR + SGMII_OFFSET(x) + 0x034)
+#define SGMII_AUXCFG_REG(x)    (EMAC_SGMII_BASE_ADDR + SGMII_OFFSET(x) + 0x038)
+
+/* PSS */
+#ifdef CONFIG_KSNET_NETCP_V1_0
+
+#define DEVICE_PSTREAM_CFG_REG_ADDR    (CONFIG_KSNET_NETCP_BASE + 0x604)
+#define DEVICE_PSTREAM_CFG_VAL_ROUTE_CPPI      0x06060606
+#define hw_config_streaming_switch()\
+       writel(DEVICE_PSTREAM_CFG_VAL_ROUTE_CPPI, DEVICE_PSTREAM_CFG_REG_ADDR);
+
+#elif defined CONFIG_KSNET_NETCP_V1_5
+
+#define DEVICE_PSTREAM_CFG_REG_ADDR    (CONFIG_KSNET_NETCP_BASE + 0x500)
+#define DEVICE_PSTREAM_CFG_VAL_ROUTE_CPPI      0x0
+
+#define hw_config_streaming_switch()\
+       writel(DEVICE_PSTREAM_CFG_VAL_ROUTE_CPPI,\
+              DEVICE_PSTREAM_CFG_REG_ADDR);\
+       writel(DEVICE_PSTREAM_CFG_VAL_ROUTE_CPPI,\
+              DEVICE_PSTREAM_CFG_REG_ADDR+4);\
+       writel(DEVICE_PSTREAM_CFG_VAL_ROUTE_CPPI,\
+              DEVICE_PSTREAM_CFG_REG_ADDR+8);\
+       writel(DEVICE_PSTREAM_CFG_VAL_ROUTE_CPPI,\
+              DEVICE_PSTREAM_CFG_REG_ADDR+12);
+
+#endif
+
+/* EMAC MDIO Registers Structure */
+struct mdio_regs {
+       u32 version;
+       u32 control;
+       u32 alive;
+       u32 link;
+       u32 linkintraw;
+       u32 linkintmasked;
+       u32 rsvd0[2];
+       u32 userintraw;
+       u32 userintmasked;
+       u32 userintmaskset;
+       u32 userintmaskclear;
+       u32 rsvd1[20];
+       u32 useraccess0;
+       u32 userphysel0;
+       u32 useraccess1;
+       u32 userphysel1;
+};
+
+struct eth_priv_t {
+       char int_name[32];
+       int rx_flow;
+       int phy_addr;
+       int slave_port;
+       int sgmii_link_type;
+       struct phy_device *phy_dev;
+};
+
+int keystone2_emac_initialize(struct eth_priv_t *eth_priv);
+void sgmii_serdes_setup_156p25mhz(void);
+void sgmii_serdes_shutdown(void);
+
+#endif  /* _KEYSTONE_NET_H_ */
diff --git a/arch/arm/include/asm/ti-common/keystone_serdes.h b/arch/arm/include/asm/ti-common/keystone_serdes.h
new file mode 100644 (file)
index 0000000..2e92411
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Texas Instruments Keystone SerDes driver
+ *
+ * (C) Copyright 2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef __TI_KEYSTONE_SERDES_H__
+#define __TI_KEYSTONE_SERDES_H__
+
+/* SERDES Reference clock */
+enum ks2_serdes_clock {
+       SERDES_CLOCK_100M,              /* 100 MHz */
+       SERDES_CLOCK_122P88M,           /* 122.88 MHz */
+       SERDES_CLOCK_125M,              /* 125 MHz */
+       SERDES_CLOCK_156P25M,           /* 156.25 MHz */
+       SERDES_CLOCK_312P5M,            /* 312.5 MHz */
+};
+
+/* SERDES Lane Baud Rate */
+enum ks2_serdes_rate {
+       SERDES_RATE_4P9152G,            /* 4.9152 GBaud */
+       SERDES_RATE_5G,                 /* 5 GBaud */
+       SERDES_RATE_6P144G,             /* 6.144 GBaud */
+       SERDES_RATE_6P25G,              /* 6.25 GBaud */
+       SERDES_RATE_10p3125g,           /* 10.3215 GBaud */
+       SERDES_RATE_12p5g,              /* 12.5 GBaud */
+};
+
+/* SERDES Lane Rate Mode */
+enum ks2_serdes_rate_mode {
+       SERDES_FULL_RATE,
+       SERDES_HALF_RATE,
+       SERDES_QUARTER_RATE,
+};
+
+/* SERDES PHY TYPE */
+enum ks2_serdes_interface {
+       SERDES_PHY_SGMII,
+       SERDES_PHY_PCSR,                /* XGE SERDES */
+};
+
+struct ks2_serdes {
+       enum ks2_serdes_clock clk;
+       enum ks2_serdes_rate rate;
+       enum ks2_serdes_rate_mode rate_mode;
+       enum ks2_serdes_interface intf;
+       u32 loopback;
+};
+
+int ks2_serdes_init(u32 base, struct ks2_serdes *serdes, u32 num_lanes);
+
+#endif /* __TI_KEYSTONE_SERDES_H__ */
diff --git a/arch/arm/include/asm/ti-common/ti-edma3.h b/arch/arm/include/asm/ti-common/ti-edma3.h
new file mode 100644 (file)
index 0000000..5adc1da
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Enhanced Direct Memory Access (EDMA3) Controller
+ *
+ * (C) Copyright 2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef _EDMA3_H_
+#define _EDMA3_H_
+
+#include <linux/stddef.h>
+
+#define EDMA3_PARSET_NULL_LINK                 0xffff
+
+/*
+ * All parameter RAM set options
+ * opt field in edma3_param_set_config structure
+ */
+#define EDMA3_SLOPT_PRIV_LEVEL                 BIT(31)
+#define EDMA3_SLOPT_PRIV_ID(id)                        ((0xf & (id)) << 24)
+#define EDMA3_SLOPT_INTERM_COMP_CHAIN_ENB      BIT(23)
+#define EDMA3_SLOPT_TRANS_COMP_CHAIN_ENB       BIT(22)
+#define EDMA3_SLOPT_INTERM_COMP_INT_ENB                BIT(21)
+#define EDMA3_SLOPT_TRANS_COMP_INT_ENB         BIT(20)
+#define EDMA3_SLOPT_COMP_CODE(code)            ((0x3f & (code)) << 12)
+#define EDMA3_SLOPT_FIFO_WIDTH_8               0
+#define EDMA3_SLOPT_FIFO_WIDTH_16              (1 << 8)
+#define EDMA3_SLOPT_FIFO_WIDTH_32              (2 << 8)
+#define EDMA3_SLOPT_FIFO_WIDTH_64              (3 << 8)
+#define EDMA3_SLOPT_FIFO_WIDTH_128             (4 << 8)
+#define EDMA3_SLOPT_FIFO_WIDTH_256             (5 << 8)
+#define EDMA3_SLOPT_FIFO_WIDTH_SET(w)          ((w & 0x7) << 8)
+#define EDMA3_SLOPT_STATIC                     BIT(3)
+#define EDMA3_SLOPT_AB_SYNC                    BIT(2)
+#define EDMA3_SLOPT_DST_ADDR_CONST_MODE                BIT(1)
+#define EDMA3_SLOPT_SRC_ADDR_CONST_MODE                BIT(0)
+
+enum edma3_address_mode {
+       INCR = 0,
+       FIFO = 1
+};
+
+enum edma3_fifo_width {
+       W8BIT = 0,
+       W16BIT = 1,
+       W32BIT = 2,
+       W64BIT = 3,
+       W128BIT = 4,
+       W256BIT = 5
+};
+
+enum edma3_sync_dimension {
+       ASYNC = 0,
+       ABSYNC = 1
+};
+
+/* PaRAM slots are laid out like this */
+struct edma3_slot_layout {
+       u32 opt;
+       u32 src;
+       u32 a_b_cnt;
+       u32 dst;
+       u32 src_dst_bidx;
+       u32 link_bcntrld;
+       u32 src_dst_cidx;
+       u32 ccnt;
+} __packed;
+
+/*
+ * Use this to assign trigger word number of edma3_slot_layout struct.
+ * trigger_word_name - is the exact name from edma3_slot_layout.
+ */
+#define EDMA3_TWORD(trigger_word_name)\
+               (offsetof(struct edma3_slot_layout, trigger_word_name) / 4)
+
+struct edma3_slot_config {
+       u32 opt;
+       u32 src;
+       u32 dst;
+       int bcnt;
+       int acnt;
+       int ccnt;
+       int src_bidx;
+       int dst_bidx;
+       int src_cidx;
+       int dst_cidx;
+       int bcntrld;
+       int link;
+};
+
+struct edma3_channel_config {
+       int slot;
+       int chnum;
+       int complete_code;      /* indicate pending complete interrupt */
+       int trigger_slot_word;  /* only used for qedma */
+};
+
+void qedma3_start(u32 base, struct edma3_channel_config *cfg);
+void qedma3_stop(u32 base, struct edma3_channel_config *cfg);
+void edma3_slot_configure(u32 base, int slot, struct edma3_slot_config *cfg);
+int edma3_check_for_transfer(u32 base, struct edma3_channel_config *cfg);
+void edma3_write_slot(u32 base, int slot, struct edma3_slot_layout *param);
+void edma3_read_slot(u32 base, int slot, struct edma3_slot_layout *param);
+
+void edma3_set_dest(u32 base, int slot, u32 dst, enum edma3_address_mode mode,
+                   enum edma3_fifo_width width);
+void edma3_set_dest_index(u32 base, unsigned slot, int bidx, int cidx);
+void edma3_set_dest_addr(u32 base, int slot, u32 dst);
+
+void edma3_set_src(u32 base, int slot, u32 src, enum edma3_address_mode mode,
+                  enum edma3_fifo_width width);
+void edma3_set_src_index(u32 base, unsigned slot, int bidx, int cidx);
+void edma3_set_src_addr(u32 base, int slot, u32 src);
+
+void edma3_set_transfer_params(u32 base, int slot, int acnt,
+                              int bcnt, int ccnt, u16 bcnt_rld,
+                              enum edma3_sync_dimension sync_mode);
+
+#endif
index 0d19c8ae2366caee800920d36dce8d79f984b6c2..cdb19751058815b19e274ba32c7293690c5ce99f 100644 (file)
@@ -23,6 +23,8 @@
 #include <asm/bootm.h>
 #include <asm/secure.h>
 #include <linux/compiler.h>
+#include <bootm.h>
+#include <vxworks.h>
 
 #if defined(CONFIG_ARMV7_NONSEC) || defined(CONFIG_ARMV7_VIRT)
 #include <asm/armv7.h>
@@ -300,7 +302,8 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
  * DIFFERENCE: Instead of calling prep and go at the end
  * they are called if subcommand is equal 0.
  */
-int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
+int do_bootm_linux(int flag, int argc, char * const argv[],
+                  bootm_headers_t *images)
 {
        /* No need for those on ARM */
        if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE)
index a79476485274046c2f377ef30ccfea336e024028..acf2b803079e9cf67398a21ff1709a65b9c311ed 100644 (file)
@@ -332,7 +332,7 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(SYS_CLKOUT1),        (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(SYS_CLKOUT2),        (IEN  | PTU | EN  | M0)) \
        /* JTAG */\
-       MUX_VAL(CP(JTAG_nTRST),         (IEN  | PTD | DIS | M0)) \
+       MUX_VAL(CP(JTAG_NTRST),         (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TCK),           (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TMS),           (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TDI),           (IEN  | PTD | DIS | M0)) \
index 55a825d8aa84afb4a853b7ff139fcd5c924f4a73..6cf257322100f0eb03ae702f8c18f183898c0c47 100644 (file)
@@ -1,23 +1,18 @@
 if TARGET_OT1200
 
 config SYS_CPU
-       string
        default "armv7"
 
 config SYS_BOARD
-       string
        default "ot1200"
 
 config SYS_VENDOR
-       string
        default "bachmann"
 
 config SYS_SOC
-       string
        default "mx6"
 
 config SYS_CONFIG_NAME
-       string
        default "ot1200"
 
 endif
index 0d5ede5ca89fc0aa8698086b0a0040185e049482..acf95cb372ac2a48c574bce6005c3bce4575f4c4 100644 (file)
@@ -12,6 +12,7 @@
 #include <malloc.h>
 #include <asm/arch/mx6-pins.h>
 #include <asm/imx-common/iomux-v3.h>
+#include <asm/imx-common/sata.h>
 #include <asm/imx-common/mxc_i2c.h>
 #include <asm/imx-common/boot_mode.h>
 #include <asm/arch/crm_regs.h>
@@ -98,6 +99,11 @@ static void setup_iomux_spi(void)
        imx_iomux_v3_setup_multiple_pads(ecspi1_pads, ARRAY_SIZE(ecspi1_pads));
 }
 
+int board_spi_cs_gpio(unsigned bus, unsigned cs)
+{
+       return (bus == 2 && cs == 0) ? (IMX_GPIO_NR(1, 3)) : -1;
+}
+
 int board_early_init_f(void)
 {
        setup_iomux_uart();
@@ -225,6 +231,10 @@ int board_init(void)
        /* enable ecspi3 clocks */
        enable_cspi_clock(1, 2);
 
+#ifdef CONFIG_CMD_SATA
+       setup_sata();
+#endif
+
        return 0;
 }
 
index 951b820cbba8ab6d4c82150f6224ae7e76434973..fcd4d82c4e7ed8c19a50d11e1468935b42d7d867 100644 (file)
@@ -18,6 +18,7 @@
 #include <asm/imx-common/iomux-v3.h>
 #include <asm/imx-common/mxc_i2c.h>
 #include <asm/imx-common/sata.h>
+#include <asm/imx-common/spi.h>
 #include <asm/imx-common/boot_mode.h>
 #include <asm/imx-common/video.h>
 #include <mmc.h>
index 1f3967995f92366bceaf4f5446446ef73446cd60..59c9d1ac0644c902582e61488aceba6fb1246dcd 100644 (file)
@@ -11,6 +11,7 @@
 #include <common.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/gpio.h>
+#include <asm/imx-common/spi.h>
 #include <fsl_esdhc.h>
 #include "common.h"
 
index 0944903ec8882005b096d8ca7c8750dd1d8a53d8..d0b0930f423ad633cce8aee1cd05a5ee032de64c 100644 (file)
@@ -53,16 +53,6 @@ static u32 gpmc_net_config[GPMC_MAX_REG] = {
        0
 };
 
-static u32 gpmc_nand_config[GPMC_MAX_REG] = {
-       M_NAND_GPMC_CONFIG1,
-       M_NAND_GPMC_CONFIG2,
-       M_NAND_GPMC_CONFIG3,
-       M_NAND_GPMC_CONFIG4,
-       M_NAND_GPMC_CONFIG5,
-       M_NAND_GPMC_CONFIG6,
-       0,
-};
-
 #ifdef CONFIG_LCD
 #ifdef CONFIG_CMD_NAND
 static int splash_load_from_nand(u32 bmp_load_addr)
@@ -148,9 +138,6 @@ int board_init(void)
 {
        gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
 
-       enable_gpmc_cs_config(gpmc_nand_config, &gpmc_cfg->cs[0],
-                             CONFIG_SYS_NAND_BASE, GPMC_SIZE_16M);
-
        /* board id for Linux */
        if (get_cpu_family() == CPU_OMAP34XX)
                gd->bd->bi_arch_number = MACH_TYPE_CM_T35;
@@ -381,7 +368,7 @@ static void cm_t3x_set_common_muxconf(void)
        MUX_VAL(CP(SYS_OFF_MODE),       (IEN  | PTD | DIS | M0)); /*OFF_MODE*/
        MUX_VAL(CP(SYS_CLKOUT1),        (IEN  | PTD | DIS | M0)); /*CLKOUT1*/
        MUX_VAL(CP(SYS_CLKOUT2),        (IDIS | PTU | DIS | M4)); /*green LED*/
-       MUX_VAL(CP(JTAG_nTRST),         (IEN  | PTD | DIS | M0)); /*JTAG_nTRST*/
+       MUX_VAL(CP(JTAG_NTRST),         (IEN  | PTD | DIS | M0)); /*JTAG_NTRST*/
        MUX_VAL(CP(JTAG_TCK),           (IEN  | PTD | DIS | M0)); /*JTAG_TCK*/
        MUX_VAL(CP(JTAG_TMS),           (IEN  | PTD | DIS | M0)); /*JTAG_TMS*/
        MUX_VAL(CP(JTAG_TDI),           (IEN  | PTD | DIS | M0)); /*JTAG_TDI*/
@@ -457,6 +444,8 @@ void set_muxconf_regs(void)
 }
 
 #if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
+#define SB_T35_WP_GPIO 59
+
 int board_mmc_getcd(struct mmc *mmc)
 {
        u8 val;
@@ -469,7 +458,7 @@ int board_mmc_getcd(struct mmc *mmc)
 
 int board_mmc_init(bd_t *bis)
 {
-       return omap_mmc_init(0, 0, 0, -1, 59);
+       return omap_mmc_init(0, 0, 0, -1, SB_T35_WP_GPIO);
 }
 #endif
 
index a725f15a2eb8172b540aac191b4b38ca6d1626df..02fb3fa1a4111a511876af4f37af5b12501937fd 100644 (file)
@@ -23,6 +23,7 @@
 #include <asm/imx-common/iomux-v3.h>
 #include <asm/imx-common/boot_mode.h>
 #include <asm/imx-common/mxc_i2c.h>
+#include <asm/imx-common/spi.h>
 #include <asm/imx-common/video.h>
 #include <i2c.h>
 #include <mmc.h>
index 1cb7561759827acb06706706bcc894391854fd41..0dc0160e19fe9e70510d66668bc2cdef1b341090 100644 (file)
 #include <asm/imx-common/iomux-v3.h>
 #include <asm/imx-common/mxc_i2c.h>
 #include <asm/imx-common/boot_mode.h>
+#include <asm/imx-common/spi.h>
 #include <mmc.h>
 #include <fsl_esdhc.h>
 #include <miiphy.h>
 #include <netdev.h>
 #include <asm/arch/sys_proto.h>
 #include <i2c.h>
+#include <asm/arch/mxc_hdmi.h>
+#include <asm/imx-common/video.h>
+#include <asm/arch/crm_regs.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -234,10 +238,65 @@ u32 get_board_rev(void)
        return (get_cpu_rev() & ~(0xF << 8)) | rev;
 }
 
+#if defined(CONFIG_VIDEO_IPUV3)
+static void do_enable_hdmi(struct display_info_t const *dev)
+{
+       imx_enable_hdmi_phy();
+}
+
+struct display_info_t const displays[] = {{
+       .bus    = -1,
+       .addr   = 0,
+       .pixfmt = IPU_PIX_FMT_RGB24,
+       .detect = detect_hdmi,
+       .enable = do_enable_hdmi,
+       .mode   = {
+               .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,
+} } };
+size_t display_count = ARRAY_SIZE(displays);
+
+static void setup_display(void)
+{
+       struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
+       int reg;
+
+       enable_ipu_clock();
+       imx_setup_hdmi();
+
+       reg = readl(&mxc_ccm->chsccdr);
+       reg |= (CHSCCDR_CLK_SEL_LDB_DI0
+               << MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET);
+       writel(reg, &mxc_ccm->chsccdr);
+}
+#endif /* CONFIG_VIDEO_IPUV3 */
+
+/*
+ * Do not overwrite the console
+ * Use always serial for U-Boot console
+ */
+int overwrite_console(void)
+{
+       return 1;
+}
+
 int board_early_init_f(void)
 {
        setup_iomux_uart();
-
+#ifdef CONFIG_VIDEO_IPUV3
+       setup_display();
+#endif
        return 0;
 }
 
index a0832f4a201e63ce6e8ec99b4d87b99667b2e1dd..a500133efae1b08b3c416dd202bb5ef2b654c0f2 100644 (file)
@@ -13,6 +13,7 @@
 #include <asm/arch/sys_proto.h>
 #include <asm/gpio.h>
 #include <asm/imx-common/iomux-v3.h>
+#include <asm/imx-common/spi.h>
 #include <asm/io.h>
 #include <linux/sizes.h>
 #include <common.h>
index 1038d9d975a4347e8e48a575fc06f96f2919d800..df491a8fc8869afc5a531302a315f5fc713c51d2 100644 (file)
@@ -20,6 +20,7 @@
 #include <asm/imx-common/mxc_i2c.h>
 #include <asm/imx-common/boot_mode.h>
 #include <asm/imx-common/sata.h>
+#include <asm/imx-common/spi.h>
 #include <asm/imx-common/video.h>
 #include <jffs2/load_kernel.h>
 #include <hwconfig.h>
index 137e4ed661030b9ede7f194f2f7f865429ebce1d..6ba55cd08a82f62a5cd420b024ff68cdb0cc171a 100644 (file)
@@ -14,6 +14,7 @@
 #include <asm/arch/sys_proto.h>
 #include <asm/arch/crm_regs.h>
 #include <asm/arch/clock.h>
+#include <asm/imx-common/spi.h>
 #include <i2c.h>
 #include <mmc.h>
 #include <fsl_esdhc.h>
index 17c122cf5093f39578b781766e333bec84fa9b26..d6c5df203e63e09c430d0133641cf7038a230905 100644 (file)
@@ -339,7 +339,7 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(SYS_CLKOUT1),        (IEN  | PTD | DIS | M4))\
        MUX_VAL(CP(SYS_CLKOUT2),        (IDIS | PTU | DIS | M4))\
        /* JTAG */\
-       MUX_VAL(CP(JTAG_nTRST),         (IEN | PTU | EN  | M4)) \
+       MUX_VAL(CP(JTAG_NTRST),         (IEN | PTU | EN  | M4)) \
        MUX_VAL(CP(JTAG_TCK),           (IEN | PTU | EN  | M4)) \
        MUX_VAL(CP(JTAG_TMS),           (IEN | PTU | EN  | M4)) \
        MUX_VAL(CP(JTAG_TDI),           (IEN | PTU | EN  | M4)) \
index d407d66ae69b3e8f5ff98921cb7652255be78470..a6a55eef4918a165eb27d64a26a3839020e1ec94 100644 (file)
@@ -333,7 +333,7 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(SYS_CLKOUT1),        (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(SYS_CLKOUT2),        (IEN  | PTU | EN  | M0)) \
        /* JTAG */\
-       MUX_VAL(CP(JTAG_nTRST),         (IEN  | PTD | DIS | M0)) \
+       MUX_VAL(CP(JTAG_NTRST),         (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TCK),           (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TMS),           (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TDI),           (IEN  | PTD | DIS | M0)) \
index 075fe949ae442f2437f2cb2c88d2778a4fec35c3..1fd9f2cf01cd612dbee9036e463998e24119fa54 100644 (file)
@@ -230,6 +230,6 @@ void set_muxconf_regs(void)
        MUX_VAL(CP(SYS_OFF_MODE),       (IEN  | PTD | DIS | M0));
        MUX_VAL(CP(SYS_CLKOUT1),        (IEN  | PTD | DIS | M0));
        MUX_VAL(CP(SYS_CLKOUT2),        (IEN  | PTU | EN  | M0));
-       MUX_VAL(CP(JTAG_nTRST),         (IEN  | PTD | DIS | M0));
+       MUX_VAL(CP(JTAG_NTRST),         (IEN  | PTD | DIS | M0));
        MUX_VAL(CP(SDRC_CKE0),          (IDIS | PTU | EN  | M0));
 }
index 7506820e349f4174679a9d58ee293831c4cc6da2..dfb8602bafccb8d8c912c58c7d946c06effee2c0 100644 (file)
 #include <asm/mach-types.h>
 #include "overo.h"
 
+#ifdef CONFIG_USB_EHCI
+#include <usb.h>
+#include <asm/ehci-omap.h>
+#endif
+
 DECLARE_GLOBAL_DATA_PTR;
 
 #define TWL4030_I2C_BUS                        0
 #define EXPANSION_EEPROM_I2C_BUS       2
 #define EXPANSION_EEPROM_I2C_ADDRESS   0x51
 
+#define GUMSTIX_EMPTY_EEPROM           0x0
+
 #define GUMSTIX_SUMMIT                 0x01000200
 #define GUMSTIX_TOBI                   0x02000200
 #define GUMSTIX_TOBI_DUO               0x03000200
@@ -58,22 +65,7 @@ static struct {
        char fab_revision[8];
        char env_var[16];
        char env_setting[64];
-} expansion_config;
-
-#if defined(CONFIG_CMD_NET)
-static void setup_net_chip(void);
-#endif
-
-/* GPMC definitions for LAN9221 chips on Tobi expansion boards */
-static const u32 gpmc_lan_config[] = {
-    NET_LAN9221_GPMC_CONFIG1,
-    NET_LAN9221_GPMC_CONFIG2,
-    NET_LAN9221_GPMC_CONFIG3,
-    NET_LAN9221_GPMC_CONFIG4,
-    NET_LAN9221_GPMC_CONFIG5,
-    NET_LAN9221_GPMC_CONFIG6,
-    /*CONFIG7- computed as params */
-};
+} expansion_config = {0x0};
 
 static const struct ns16550_platdata overo_serial = {
        OMAP34XX_UART3,
@@ -226,6 +218,9 @@ int get_sdio2_config(void)
  */
 unsigned int get_expansion_id(void)
 {
+       if (expansion_config.device_vendor != 0x0)
+               return expansion_config.device_vendor;
+
        i2c_set_bus_num(EXPANSION_EEPROM_I2C_BUS);
 
        /* return GUMSTIX_NO_EEPROM if eeprom doesn't respond */
@@ -254,10 +249,6 @@ int misc_init_r(void)
        twl4030_power_init();
        twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON);
 
-#if defined(CONFIG_CMD_NET)
-       setup_net_chip();
-#endif
-
        printf("Board revision: %d\n", get_board_revision());
 
        switch (get_sdio2_config()) {
@@ -279,6 +270,7 @@ int misc_init_r(void)
                printf("Recognized Summit expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                setenv("defaultdisplay", "dvi");
                setenv("expansionname", "summit");
                break;
@@ -286,6 +278,7 @@ int misc_init_r(void)
                printf("Recognized Tobi expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                setenv("defaultdisplay", "dvi");
                setenv("expansionname", "tobi");
                break;
@@ -293,20 +286,20 @@ int misc_init_r(void)
                printf("Recognized Tobi Duo expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
-               /* second lan chip */
-               enable_gpmc_cs_config(gpmc_lan_config, &gpmc_cfg->cs[4],
-                   0x2B000000, GPMC_SIZE_16M);
+               MUX_GUMSTIX();
                break;
        case GUMSTIX_PALO35:
                printf("Recognized Palo35 expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                setenv("defaultdisplay", "lcd35");
                break;
        case GUMSTIX_PALO43:
                printf("Recognized Palo43 expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                setenv("defaultdisplay", "lcd43");
                setenv("expansionname", "palo43");
                break;
@@ -314,6 +307,7 @@ int misc_init_r(void)
                printf("Recognized Chestnut43 expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                setenv("defaultdisplay", "lcd43");
                setenv("expansionname", "chestnut43");
                break;
@@ -321,11 +315,13 @@ int misc_init_r(void)
                printf("Recognized Pinto expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                break;
        case GUMSTIX_GALLOP43:
                printf("Recognized Gallop43 expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                setenv("defaultdisplay", "lcd43");
                setenv("expansionname", "gallop43");
                break;
@@ -333,6 +329,7 @@ int misc_init_r(void)
                printf("Recognized Alto35 expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                MUX_ALTO35();
                setenv("defaultdisplay", "lcd35");
                setenv("expansionname", "alto35");
@@ -341,21 +338,25 @@ int misc_init_r(void)
                printf("Recognized Stagecoach expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                break;
        case GUMSTIX_THUMBO:
                printf("Recognized Thumbo expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                break;
        case GUMSTIX_TURTLECORE:
                printf("Recognized Turtlecore expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                break;
        case GUMSTIX_ARBOR43C:
                printf("Recognized Arbor43C expansion board (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                MUX_ARBOR43C();
                setenv("defaultdisplay", "lcd43");
                break;
@@ -363,16 +364,17 @@ int misc_init_r(void)
                printf("Recognized Ettus Research USRP-E (rev %d %s)\n",
                        expansion_config.revision,
                        expansion_config.fab_revision);
+               MUX_GUMSTIX();
                MUX_USRP_E();
                setenv("defaultdisplay", "dvi");
                break;
        case GUMSTIX_NO_EEPROM:
-               puts("No EEPROM on expansion board\n");
+       case GUMSTIX_EMPTY_EEPROM:
+               puts("No or empty EEPROM on expansion board\n");
+               MUX_GUMSTIX();
                setenv("expansionname", "tobi");
                break;
        default:
-               if (expansion_id == 0x0)
-                       setenv("expansionname", "tobi");
                printf("Unrecognized expansion board 0x%08x\n", expansion_id);
                break;
        }
@@ -401,7 +403,18 @@ void set_muxconf_regs(void)
        MUX_OVERO();
 }
 
-#if defined(CONFIG_CMD_NET)
+#if defined(CONFIG_CMD_NET) && !defined(CONFIG_SPL_BUILD)
+/* GPMC definitions for LAN9221 chips on Tobi expansion boards */
+static const u32 gpmc_lan_config[] = {
+       NET_LAN9221_GPMC_CONFIG1,
+       NET_LAN9221_GPMC_CONFIG2,
+       NET_LAN9221_GPMC_CONFIG3,
+       NET_LAN9221_GPMC_CONFIG4,
+       NET_LAN9221_GPMC_CONFIG5,
+       NET_LAN9221_GPMC_CONFIG6,
+       /*CONFIG7- computed as params */
+};
+
 /*
  * Routine: setup_net_chip
  * Description: Setting up the configuration GPMC registers specific to the
@@ -411,10 +424,6 @@ static void setup_net_chip(void)
 {
        struct ctrl *ctrl_base = (struct ctrl *)OMAP34XX_CTRL_BASE;
 
-       /* first lan chip */
-       enable_gpmc_cs_config(gpmc_lan_config, &gpmc_cfg->cs[5], 0x2C000000,
-                       GPMC_SIZE_16M);
-
        /* Enable off mode for NWE in PADCONF_GPMC_NWE register */
        writew(readw(&ctrl_base ->gpmc_nwe) | 0x0E00, &ctrl_base->gpmc_nwe);
        /* Enable off mode for NOE in PADCONF_GPMC_NADV_ALE register */
@@ -422,7 +431,14 @@ static void setup_net_chip(void)
        /* Enable off mode for ALE in PADCONF_GPMC_NADV_ALE register */
        writew(readw(&ctrl_base->gpmc_nadv_ale) | 0x0E00,
                &ctrl_base->gpmc_nadv_ale);
+}
 
+/*
+ * Routine: reset_net_chip
+ * Description: Reset the Ethernet hardware.
+ */
+static void reset_net_chip(void)
+{
        /* Make GPIO 64 as output pin and send a magic pulse through it */
        if (!gpio_request(64, "")) {
                gpio_direction_output(64, 0);
@@ -433,16 +449,42 @@ static void setup_net_chip(void)
                gpio_set_value(64, 1);
        }
 }
-#endif
 
 int board_eth_init(bd_t *bis)
 {
+       unsigned int expansion_id;
        int rc = 0;
+
 #ifdef CONFIG_SMC911X
-       rc = smc911x_initialize(0, CONFIG_SMC911X_BASE);
+       expansion_id = get_expansion_id();
+       switch (expansion_id) {
+       case GUMSTIX_TOBI_DUO:
+               /* second lan chip */
+               enable_gpmc_cs_config(gpmc_lan_config, &gpmc_cfg->cs[4],
+                                     0x2B000000, GPMC_SIZE_16M);
+               /* no break */
+       case GUMSTIX_TOBI:
+       case GUMSTIX_CHESTNUT43:
+       case GUMSTIX_STAGECOACH:
+       case GUMSTIX_NO_EEPROM:
+       case GUMSTIX_EMPTY_EEPROM:
+               /* first lan chip */
+               enable_gpmc_cs_config(gpmc_lan_config, &gpmc_cfg->cs[5],
+                                     0x2C000000, GPMC_SIZE_16M);
+
+               setup_net_chip();
+               reset_net_chip();
+
+               rc = smc911x_initialize(0, CONFIG_SMC911X_BASE);
+               break;
+       default:
+               break;
+       }
 #endif
+
        return rc;
 }
+#endif
 
 #if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
 int board_mmc_init(bd_t *bis)
@@ -450,3 +492,32 @@ int board_mmc_init(bd_t *bis)
        return omap_mmc_init(0, 0, 0, -1, -1);
 }
 #endif
+
+#if defined(CONFIG_USB_EHCI) &&  !defined(CONFIG_SPL_BUILD)
+static struct omap_usbhs_board_data usbhs_bdata = {
+       .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
+       .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
+       .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED
+};
+
+#define GUMSTIX_GPIO_USBH_CPEN         168
+int ehci_hcd_init(int index, enum usb_init_type init,
+                 struct ehci_hccr **hccr, struct ehci_hcor **hcor)
+{
+       /* Enable USB power */
+       if (!gpio_request(GUMSTIX_GPIO_USBH_CPEN, "usbh_cpen"))
+               gpio_direction_output(GUMSTIX_GPIO_USBH_CPEN, 1);
+
+       return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);
+}
+
+int ehci_hcd_stop(void)
+{
+       /* Disable USB power */
+       gpio_set_value(GUMSTIX_GPIO_USBH_CPEN, 0);
+       gpio_free(GUMSTIX_GPIO_USBH_CPEN);
+
+       return omap_ehci_hcd_stop();
+}
+
+#endif /* CONFIG_USB_EHCI */
index 57725d867f2b3fd7a34226d55a67a94dd59cd45d..d0edf86365a68e0c3a71137f6f4ebc9819ca1f76 100644 (file)
@@ -101,13 +101,9 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(GPMC_D14),           (IEN  | PTU | EN  | M0)) /*GPMC_D14*/\
        MUX_VAL(CP(GPMC_D15),           (IEN  | PTU | EN  | M0)) /*GPMC_D15*/\
        MUX_VAL(CP(GPMC_NCS0),          (IDIS | PTU | EN  | M0)) /*GPMC_nCS0*/\
-       MUX_VAL(CP(GPMC_NCS1),          (IDIS | PTU | EN  | M0)) /*GPMC_nCS1*/\
        MUX_VAL(CP(GPMC_NCS2),          (IDIS | PTU | EN  | M0)) /*GPMC_nCS2*/\
        MUX_VAL(CP(GPMC_NCS3),          (IEN  | PTU | EN  | M4)) /*GPIO_54*/\
                                                                 /* - MMC1_WP*/\
-       MUX_VAL(CP(GPMC_NCS4),          (IDIS | PTU | EN  | M0)) /*GPMC_nCS4*/\
-       MUX_VAL(CP(GPMC_NCS5),          (IDIS | PTU | EN  | M0)) /*GPMC_nCS5*/\
-       MUX_VAL(CP(GPMC_NCS6),          (IEN  | PTD | DIS | M0)) /*GPMC_nCS6*/\
        MUX_VAL(CP(GPMC_NCS7),          (IEN  | PTU | EN  | M0)) /*GPMC_nCS7*/\
        MUX_VAL(CP(GPMC_NBE1),          (IEN  | PTD | DIS | M0)) /*GPMC_nCS3*/\
        MUX_VAL(CP(GPMC_CLK),           (IEN  | PTU | EN  | M0)) /*GPMC_CLK*/\
@@ -117,45 +113,11 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(GPMC_NBE0_CLE),      (IDIS | PTD | DIS | M0)) /*GPMC_nBE0_CLE*/\
        MUX_VAL(CP(GPMC_NWP),           (IEN  | PTD | DIS | M0)) /*GPMC_nWP*/\
        MUX_VAL(CP(GPMC_WAIT0),         (IEN  | PTU | EN  | M0)) /*GPMC_WAIT0*/\
-       MUX_VAL(CP(GPMC_WAIT1),         (IEN  | PTU | EN  | M0)) /*GPMC_WAIT1*/\
-       MUX_VAL(CP(GPMC_WAIT2),         (IEN  | PTU | EN  | M4)) /*GPIO_64*/\
-                                                                /* - SMSC911X_NRES*/\
-       MUX_VAL(CP(GPMC_WAIT3),         (IEN  | PTU | DIS | M4)) /*GPIO_65*/\
- /*DSS*/\
-       MUX_VAL(CP(DSS_PCLK),           (IDIS | PTD | DIS | M0)) /*DSS_PCLK*/\
-       MUX_VAL(CP(DSS_HSYNC),          (IDIS | PTD | DIS | M0)) /*DSS_HSYNC*/\
-       MUX_VAL(CP(DSS_VSYNC),          (IDIS | PTD | DIS | M0)) /*DSS_VSYNC*/\
-       MUX_VAL(CP(DSS_ACBIAS),         (IDIS | PTD | DIS | M0)) /*DSS_ACBIAS*/\
-       MUX_VAL(CP(DSS_DATA0),          (IDIS | PTD | DIS | M0)) /*DSS_DATA0*/\
-       MUX_VAL(CP(DSS_DATA1),          (IDIS | PTD | DIS | M0)) /*DSS_DATA1*/\
-       MUX_VAL(CP(DSS_DATA2),          (IDIS | PTD | DIS | M0)) /*DSS_DATA2*/\
-       MUX_VAL(CP(DSS_DATA3),          (IDIS | PTD | DIS | M0)) /*DSS_DATA3*/\
-       MUX_VAL(CP(DSS_DATA4),          (IDIS | PTD | DIS | M0)) /*DSS_DATA4*/\
-       MUX_VAL(CP(DSS_DATA5),          (IDIS | PTD | DIS | M0)) /*DSS_DATA5*/\
-       MUX_VAL(CP(DSS_DATA6),          (IDIS | PTD | DIS | M0)) /*DSS_DATA6*/\
-       MUX_VAL(CP(DSS_DATA7),          (IDIS | PTD | DIS | M0)) /*DSS_DATA7*/\
-       MUX_VAL(CP(DSS_DATA8),          (IDIS | PTD | DIS | M0)) /*DSS_DATA8*/\
-       MUX_VAL(CP(DSS_DATA9),          (IDIS | PTD | DIS | M0)) /*DSS_DATA9*/\
-       MUX_VAL(CP(DSS_DATA10),         (IDIS | PTD | DIS | M0)) /*DSS_DATA10*/\
-       MUX_VAL(CP(DSS_DATA11),         (IDIS | PTD | DIS | M0)) /*DSS_DATA11*/\
-       MUX_VAL(CP(DSS_DATA12),         (IDIS | PTD | DIS | M0)) /*DSS_DATA12*/\
-       MUX_VAL(CP(DSS_DATA13),         (IDIS | PTD | DIS | M0)) /*DSS_DATA13*/\
-       MUX_VAL(CP(DSS_DATA14),         (IDIS | PTD | DIS | M0)) /*DSS_DATA14*/\
-       MUX_VAL(CP(DSS_DATA15),         (IDIS | PTD | DIS | M0)) /*DSS_DATA15*/\
-       MUX_VAL(CP(DSS_DATA16),         (IDIS | PTD | DIS | M0)) /*DSS_DATA16*/\
-       MUX_VAL(CP(DSS_DATA17),         (IDIS | PTD | DIS | M0)) /*DSS_DATA17*/\
-       MUX_VAL(CP(DSS_DATA18),         (IDIS | PTD | DIS | M0)) /*DSS_DATA18*/\
-       MUX_VAL(CP(DSS_DATA19),         (IDIS | PTD | DIS | M0)) /*DSS_DATA19*/\
-       MUX_VAL(CP(DSS_DATA20),         (IDIS | PTD | DIS | M0)) /*DSS_DATA20*/\
-       MUX_VAL(CP(DSS_DATA21),         (IDIS | PTD | DIS | M0)) /*DSS_DATA21*/\
-       MUX_VAL(CP(DSS_DATA22),         (IDIS | PTD | DIS | M0)) /*DSS_DATA22*/\
-       MUX_VAL(CP(DSS_DATA23),         (IDIS | PTD | DIS | M0)) /*DSS_DATA23*/\
  /*CAMERA*/\
        MUX_VAL(CP(CAM_HS),             (IEN  | PTU | DIS | M0)) /*CAM_HS */\
        MUX_VAL(CP(CAM_VS),             (IEN  | PTU | DIS | M0)) /*CAM_VS */\
        MUX_VAL(CP(CAM_XCLKA),          (IDIS | PTD | DIS | M0)) /*CAM_XCLKA*/\
        MUX_VAL(CP(CAM_PCLK),           (IEN  | PTU | DIS | M0)) /*CAM_PCLK*/\
-       MUX_VAL(CP(CAM_FLD),            (IDIS | PTD | DIS | M4)) /*CAM_FLD*/\
        MUX_VAL(CP(CAM_D0),             (IEN  | PTD | DIS | M0)) /*CAM_D0*/\
        MUX_VAL(CP(CAM_D1),             (IEN  | PTD | DIS | M0)) /*CAM_D1*/\
        MUX_VAL(CP(CAM_D2),             (IEN  | PTD | DIS | M0)) /*CAM_D2*/\
@@ -168,13 +130,8 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(CAM_D9),             (IEN  | PTD | DIS | M0)) /*CAM_D9*/\
        MUX_VAL(CP(CAM_D10),            (IEN  | PTD | DIS | M0)) /*CAM_D10*/\
        MUX_VAL(CP(CAM_D11),            (IEN  | PTD | DIS | M0)) /*CAM_D11*/\
-       MUX_VAL(CP(CAM_XCLKB),          (IDIS | PTD | DIS | M0)) /*CAM_XCLKB*/\
-       MUX_VAL(CP(CAM_WEN),            (IEN  | PTD | DIS | M0)) /*CAM_WEN*/\
-       MUX_VAL(CP(CAM_STROBE),         (IDIS | PTD | DIS | M0)) /*CAM_STROBE*/\
        MUX_VAL(CP(CSI2_DX0),           (IEN  | PTD | EN  | M4)) /*GPIO_112*/\
        MUX_VAL(CP(CSI2_DY0),           (IEN  | PTD | EN  | M4)) /*GPIO_113*/\
-       MUX_VAL(CP(CSI2_DX1),           (IEN  | PTD | EN  | M4)) /*GPIO_114*/\
-                                                                /* - PEN_DOWN*/\
        MUX_VAL(CP(CSI2_DY1),           (IEN  | PTD | EN  | M4)) /*GPIO_115*/\
  /*Audio Interface */\
        MUX_VAL(CP(MCBSP2_FSX),         (IEN  | PTD | DIS | M0)) /*McBSP2_FSX*/\
@@ -208,14 +165,7 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(MCBSP3_DR),          (IDIS | PTD | DIS | M1)) /*UART2_RTS*/\
        MUX_VAL(CP(MCBSP3_CLKX),        (IDIS | PTD | DIS | M1)) /*UART2_TX*/\
        MUX_VAL(CP(MCBSP3_FSX),         (IEN  | PTD | DIS | M1)) /*UART2_RX*/\
-       MUX_VAL(CP(UART2_CTS),          (IEN  | PTD | DIS | M4)) /*GPIO_144 - LCD_EN*/\
-       MUX_VAL(CP(UART2_RTS),          (IEN  | PTD | DIS | M4)) /*GPIO_145*/\
-       MUX_VAL(CP(UART2_TX),           (IEN  | PTD | DIS | M4)) /*GPIO_146*/\
-       MUX_VAL(CP(UART2_RX),           (IEN  | PTD | DIS | M4)) /*GPIO_147*/\
-       MUX_VAL(CP(UART1_TX),           (IDIS | PTD | DIS | M0)) /*UART1_TX*/\
        MUX_VAL(CP(UART1_RTS),          (IEN  | PTU | DIS | M4)) /*GPIO_149*/ \
-       MUX_VAL(CP(UART1_CTS),          (IEN  | PTU | DIS | M4)) /*GPIO_150-MMC3_WP*/\
-       MUX_VAL(CP(UART1_RX),           (IEN  | PTD | DIS | M0)) /*UART1_RX*/\
        MUX_VAL(CP(MCBSP4_CLKX),        (IEN  | PTD | DIS | M0)) /*McBSP4_CLKX*/\
        MUX_VAL(CP(MCBSP4_DR),          (IEN  | PTD | DIS | M0)) /*McBSP4_DR*/\
        MUX_VAL(CP(MCBSP4_DX),          (IEN  | PTD | DIS | M0)) /*McBSP4_DX*/\
@@ -228,7 +178,6 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(MCBSP1_FSX),         (IEN  | PTD | DIS | M0)) /*McBSP1_FSX*/\
        MUX_VAL(CP(MCBSP1_CLKX),        (IEN  | PTD | DIS | M0)) /*McBSP1_CLKX*/\
  /*Serial Interface*/\
-       MUX_VAL(CP(UART3_CTS_RCTX),     (IEN  | PTD | EN  | M0)) /*UART3_CTS_RCTX*/\
        MUX_VAL(CP(UART3_RTS_SD),       (IEN  | PTU | EN  | M4)) /*GPIO_164 W2W_*/\
                                                                 /* BT_NRESET*/\
        MUX_VAL(CP(UART3_RX_IRRX),      (IEN  | PTU | EN  | M0)) /*UART3_RX_IRRX*/\
@@ -255,14 +204,6 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(I2C3_SDA),           (IEN  | PTU | EN  | M0)) /*I2C3_SDA*/\
        MUX_VAL(CP(I2C4_SCL),           (IEN  | PTU | EN  | M0)) /*I2C4_SCL*/\
        MUX_VAL(CP(I2C4_SDA),           (IEN  | PTU | EN  | M0)) /*I2C4_SDA*/\
-       MUX_VAL(CP(HDQ_SIO),            (IDIS | PTU | EN  | M4)) /*HDQ_SIO*/\
-       MUX_VAL(CP(MCSPI1_CLK),         (IEN  | PTD | DIS | M0)) /*McSPI1_CLK*/\
-       MUX_VAL(CP(MCSPI1_SIMO),        (IEN  | PTD | DIS | M0)) /*McSPI1_SIMO */\
-       MUX_VAL(CP(MCSPI1_SOMI),        (IEN  | PTD | DIS | M0)) /*McSPI1_SOMI */\
-       MUX_VAL(CP(MCSPI1_CS0),         (IEN  | PTD | EN  | M0)) /*McSPI1_CS0*/\
-       MUX_VAL(CP(MCSPI1_CS1),         (IDIS | PTD | EN  | M0)) /*McSPI1_CS1*/\
-       MUX_VAL(CP(MCSPI1_CS2),         (IEN  | PTU | DIS | M4)) /*GPIO_176 */\
-                                                                /* - LAN_INTR */\
        MUX_VAL(CP(MCSPI1_CS3),         (IEN  | PTD | DIS | M3)) /*HSUSB2_DATA2*/\
        MUX_VAL(CP(MCSPI2_CLK),         (IEN  | PTD | DIS | M3)) /*HSUSB2_DATA7*/\
        MUX_VAL(CP(MCSPI2_SIMO),        (IEN  | PTD | DIS | M3)) /*HSUSB2_DATA4*/\
@@ -281,21 +222,9 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(SYS_BOOT5),          (IEN  | PTD | DIS | M4)) /*GPIO_7*/\
        MUX_VAL(CP(SYS_BOOT6),          (IDIS | PTD | DIS | M4)) /*GPIO_8*/\
        MUX_VAL(CP(SYS_OFF_MODE),       (IEN  | PTD | DIS | M0)) /*SYS_OFF_MODE*/\
-       MUX_VAL(CP(SYS_CLKOUT1),        (IEN  | PTU | EN  | M4)) /*GPIO_10*/\
-       MUX_VAL(CP(SYS_CLKOUT2),        (IEN  | PTU | EN  | M4)) /*GPIO_186*/\
-       MUX_VAL(CP(ETK_CLK_ES2),        (IEN  | PTU | EN  | M2)) /*MMC3_CLK*/\
-       MUX_VAL(CP(ETK_CTL_ES2),        (IEN  | PTU | EN  | M2)) /*MMC3_CMD*/\
-       MUX_VAL(CP(ETK_D0_ES2),         (IEN  | PTU | EN  | M4)) /*GPIO_14*/\
        MUX_VAL(CP(ETK_D1_ES2),         (IEN  | PTD | EN  | M4)) /*GPIO_15 - X_GATE*/\
        MUX_VAL(CP(ETK_D2_ES2),         (IEN  | PTU | EN  | M4)) /*GPIO_16*/\
                                                                 /* - W2W_NRESET*/\
-       MUX_VAL(CP(ETK_D3_ES2),         (IEN  | PTU | EN  | M2)) /*MMC3_DAT3*/\
-       MUX_VAL(CP(ETK_D4_ES2),         (IEN  | PTU | EN  | M2)) /*MMC3_DAT0*/\
-       MUX_VAL(CP(ETK_D5_ES2),         (IEN  | PTU | EN  | M2)) /*MMC3_DAT1*/\
-       MUX_VAL(CP(ETK_D6_ES2),         (IEN  | PTU | EN  | M2)) /*MMC3_DAT2*/\
-       MUX_VAL(CP(ETK_D7_ES2),         (IEN  | PTU | EN  | M4)) /*GPIO_21*/\
-       MUX_VAL(CP(ETK_D8_ES2),         (IEN  | PTU | EN  | M4)) /*GPIO_22*/\
-       MUX_VAL(CP(ETK_D9_ES2),         (IEN  | PTU | EN  | M4)) /*GPIO_23*/\
        MUX_VAL(CP(ETK_D10_ES2),        (IDIS | PTD | DIS | M3)) /*HSUSB2_CLK*/\
        MUX_VAL(CP(ETK_D11_ES2),        (IDIS | PTD | DIS | M3)) /*HSUSB2_STP*/\
        MUX_VAL(CP(ETK_D12_ES2),        (IEN  | PTD | DIS | M3)) /*HSUSB2_DIR*/\
@@ -369,6 +298,85 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(SDRC_CKE0),          (IDIS | PTU | EN  | M0)) /*sdrc_cke0*/\
        MUX_VAL(CP(SDRC_CKE1),          (IDIS | PTU | EN  | M0)) /*sdrc_cke1*/
 
+#define MUX_GUMSTIX() \
+  /*GPMC*/\
+       MUX_VAL(CP(GPMC_NCS1),          (IDIS | PTU | EN  | M0)) /*GPMC_nCS1*/\
+       MUX_VAL(CP(GPMC_NCS4),          (IDIS | PTU | EN  | M0)) /*GPMC_nCS4*/\
+       MUX_VAL(CP(GPMC_NCS5),          (IDIS | PTU | EN  | M0)) /*GPMC_nCS5*/\
+       MUX_VAL(CP(GPMC_NCS6),          (IEN  | PTD | DIS | M0)) /*GPMC_nCS6*/\
+       MUX_VAL(CP(GPMC_WAIT1),         (IEN  | PTU | EN  | M4)) /*GPIO_63*/\
+                                                                /* - CAM_IRQ*/\
+       MUX_VAL(CP(GPMC_WAIT2),         (IEN  | PTU | EN  | M4)) /*GPIO_64*/\
+                                                                /* - SMSC911X_NRES*/\
+       MUX_VAL(CP(GPMC_WAIT3),         (IEN  | PTU | DIS | M4)) /*GPIO_65*/\
+ /*DSS*/\
+       MUX_VAL(CP(DSS_PCLK),           (IDIS | PTD | DIS | M0)) /*DSS_PCLK*/\
+       MUX_VAL(CP(DSS_HSYNC),          (IDIS | PTD | DIS | M0)) /*DSS_HSYNC*/\
+       MUX_VAL(CP(DSS_VSYNC),          (IDIS | PTD | DIS | M0)) /*DSS_VSYNC*/\
+       MUX_VAL(CP(DSS_ACBIAS),         (IDIS | PTD | DIS | M0)) /*DSS_ACBIAS*/\
+       MUX_VAL(CP(DSS_DATA0),          (IDIS | PTD | DIS | M0)) /*DSS_DATA0*/\
+       MUX_VAL(CP(DSS_DATA1),          (IDIS | PTD | DIS | M0)) /*DSS_DATA1*/\
+       MUX_VAL(CP(DSS_DATA2),          (IDIS | PTD | DIS | M0)) /*DSS_DATA2*/\
+       MUX_VAL(CP(DSS_DATA3),          (IDIS | PTD | DIS | M0)) /*DSS_DATA3*/\
+       MUX_VAL(CP(DSS_DATA4),          (IDIS | PTD | DIS | M0)) /*DSS_DATA4*/\
+       MUX_VAL(CP(DSS_DATA5),          (IDIS | PTD | DIS | M0)) /*DSS_DATA5*/\
+       MUX_VAL(CP(DSS_DATA6),          (IDIS | PTD | DIS | M0)) /*DSS_DATA6*/\
+       MUX_VAL(CP(DSS_DATA7),          (IDIS | PTD | DIS | M0)) /*DSS_DATA7*/\
+       MUX_VAL(CP(DSS_DATA8),          (IDIS | PTD | DIS | M0)) /*DSS_DATA8*/\
+       MUX_VAL(CP(DSS_DATA9),          (IDIS | PTD | DIS | M0)) /*DSS_DATA9*/\
+       MUX_VAL(CP(DSS_DATA10),         (IDIS | PTD | DIS | M0)) /*DSS_DATA10*/\
+       MUX_VAL(CP(DSS_DATA11),         (IDIS | PTD | DIS | M0)) /*DSS_DATA11*/\
+       MUX_VAL(CP(DSS_DATA12),         (IDIS | PTD | DIS | M0)) /*DSS_DATA12*/\
+       MUX_VAL(CP(DSS_DATA13),         (IDIS | PTD | DIS | M0)) /*DSS_DATA13*/\
+       MUX_VAL(CP(DSS_DATA14),         (IDIS | PTD | DIS | M0)) /*DSS_DATA14*/\
+       MUX_VAL(CP(DSS_DATA15),         (IDIS | PTD | DIS | M0)) /*DSS_DATA15*/\
+       MUX_VAL(CP(DSS_DATA16),         (IDIS | PTD | DIS | M0)) /*DSS_DATA16*/\
+       MUX_VAL(CP(DSS_DATA17),         (IDIS | PTD | DIS | M0)) /*DSS_DATA17*/\
+       MUX_VAL(CP(DSS_DATA18),         (IDIS | PTD | DIS | M0)) /*DSS_DATA18*/\
+       MUX_VAL(CP(DSS_DATA19),         (IDIS | PTD | DIS | M0)) /*DSS_DATA19*/\
+       MUX_VAL(CP(DSS_DATA20),         (IDIS | PTD | DIS | M0)) /*DSS_DATA20*/\
+       MUX_VAL(CP(DSS_DATA21),         (IDIS | PTD | DIS | M0)) /*DSS_DATA21*/\
+       MUX_VAL(CP(DSS_DATA22),         (IDIS | PTD | DIS | M0)) /*DSS_DATA22*/\
+       MUX_VAL(CP(DSS_DATA23),         (IDIS | PTD | DIS | M0)) /*DSS_DATA23*/\
+ /*CAMERA*/\
+       MUX_VAL(CP(CAM_FLD),            (IDIS | PTD | DIS | M4)) /*CAM_FLD*/\
+       MUX_VAL(CP(CAM_XCLKB),          (IDIS | PTD | DIS | M0)) /*CAM_XCLKB*/\
+       MUX_VAL(CP(CAM_WEN),            (IEN  | PTD | DIS | M0)) /*CAM_WEN*/\
+       MUX_VAL(CP(CAM_STROBE),         (IDIS | PTD | DIS | M0)) /*CAM_STROBE*/\
+       MUX_VAL(CP(CSI2_DX1),           (IEN  | PTD | EN  | M4)) /*GPIO_114*/\
+                                                                /* - PEN_DOWN*/\
+ /*Bluetooth*/\
+       MUX_VAL(CP(UART2_CTS),          (IEN  | PTD | DIS | M4)) /*GPIO_144 - LCD_EN*/\
+       MUX_VAL(CP(UART2_RTS),          (IEN  | PTD | DIS | M4)) /*GPIO_145*/\
+       MUX_VAL(CP(UART2_TX),           (IEN  | PTD | DIS | M4)) /*GPIO_146*/\
+       MUX_VAL(CP(UART2_RX),           (IEN  | PTD | DIS | M4)) /*GPIO_147*/\
+       MUX_VAL(CP(UART1_TX),           (IDIS | PTD | DIS | M0)) /*UART1_TX*/\
+       MUX_VAL(CP(UART1_CTS),          (IEN  | PTU | DIS | M4)) /*GPIO_150-MMC3_WP*/\
+       MUX_VAL(CP(UART1_RX),           (IEN  | PTD | DIS | M0)) /*UART1_RX*/\
+ /*Serial Interface*/\
+       MUX_VAL(CP(UART3_CTS_RCTX),     (IEN  | PTD | EN  | M0)) /*UART3_CTS_RCTX*/\
+       MUX_VAL(CP(HDQ_SIO),            (IDIS | PTU | EN  | M4)) /*HDQ_SIO*/\
+       MUX_VAL(CP(MCSPI1_CLK),         (IEN  | PTD | DIS | M0)) /*McSPI1_CLK*/\
+       MUX_VAL(CP(MCSPI1_SIMO),        (IEN  | PTD | DIS | M0)) /*McSPI1_SIMO */\
+       MUX_VAL(CP(MCSPI1_SOMI),        (IEN  | PTD | DIS | M0)) /*McSPI1_SOMI */\
+       MUX_VAL(CP(MCSPI1_CS0),         (IEN  | PTD | EN  | M0)) /*McSPI1_CS0*/\
+       MUX_VAL(CP(MCSPI1_CS1),         (IDIS | PTD | EN  | M0)) /*McSPI1_CS1*/\
+       MUX_VAL(CP(MCSPI1_CS2),         (IEN  | PTU | DIS | M4)) /*GPIO_176 */\
+                                                                /* - LAN_INTR */\
+ /*Control and debug */\
+       MUX_VAL(CP(SYS_CLKOUT1),        (IEN  | PTU | EN  | M4)) /*GPIO_10*/\
+       MUX_VAL(CP(SYS_CLKOUT2),        (IEN  | PTU | EN  | M4)) /*GPIO_186*/\
+       MUX_VAL(CP(ETK_CLK_ES2),        (IEN  | PTU | EN  | M2)) /*MMC3_CLK*/\
+       MUX_VAL(CP(ETK_CTL_ES2),        (IEN  | PTU | EN  | M2)) /*MMC3_CMD*/\
+       MUX_VAL(CP(ETK_D0_ES2),         (IEN  | PTU | EN  | M4)) /*GPIO_14*/\
+       MUX_VAL(CP(ETK_D3_ES2),         (IEN  | PTU | EN  | M2)) /*MMC3_DAT3*/\
+       MUX_VAL(CP(ETK_D4_ES2),         (IEN  | PTU | EN  | M2)) /*MMC3_DAT0*/\
+       MUX_VAL(CP(ETK_D5_ES2),         (IEN  | PTU | EN  | M2)) /*MMC3_DAT1*/\
+       MUX_VAL(CP(ETK_D6_ES2),         (IEN  | PTU | EN  | M2)) /*MMC3_DAT2*/\
+       MUX_VAL(CP(ETK_D7_ES2),         (IEN  | PTU | EN  | M4)) /*GPIO_21*/\
+       MUX_VAL(CP(ETK_D8_ES2),         (IEN  | PTU | EN  | M4)) /*GPIO_22*/\
+       MUX_VAL(CP(ETK_D9_ES2),         (IEN  | PTU | EN  | M4)) /*GPIO_23*/\
+
 #define MUX_OVERO_SDIO2_DIRECT() \
        MUX_VAL(CP(MMC2_CLK),           (IEN  | PTU | EN  | M0)) /*MMC2_CLK*/\
        MUX_VAL(CP(MMC2_CMD),           (IEN  | PTU | EN  | M0)) /*MMC2_CMD*/\
index cbf4186f71e912f0e8cb9fdfa1db2aebc6301383..268b92998f66ccbec0cea9ef8a9e39a922f0c4b9 100644 (file)
@@ -310,7 +310,7 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(SYS_BOOT6),          (IEN  | PTD | DIS | M4)) /*GPIO_8*/\
        MUX_VAL(CP(SYS_OFF_MODE),       (IEN  | PTD | DIS | M0)) /*SYS_OFF_MODE*/\
  /*JTAG*/\
-       MUX_VAL(CP(JTAG_nTRST),         (IEN  | PTD | DIS | M0)) /*JTAG_nTRST*/\
+       MUX_VAL(CP(JTAG_NTRST),         (IEN  | PTD | DIS | M0)) /*JTAG_NTRST*/\
        MUX_VAL(CP(JTAG_TCK),           (IEN  | PTD | DIS | M0)) /*JTAG_TCK*/\
        MUX_VAL(CP(JTAG_TMS),           (IEN  | PTD | DIS | M0)) /*JTAG_TMS*/\
        MUX_VAL(CP(JTAG_TDI),           (IEN  | PTD | DIS | M0)) /*JTAG_TDI*/\
index daff1094802fd2bb406a99702b8d3737c57541e8..4a94399fc98232f118c9c847b35bfabe65fa80d4 100644 (file)
@@ -275,7 +275,7 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(SYS_OFF_MODE), (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(SYS_CLKOUT1), (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(SYS_CLKOUT2), (IEN  | PTU | EN  | M0)) \
-       MUX_VAL(CP(JTAG_nTRST), (IEN  | PTD | DIS | M0)) \
+       MUX_VAL(CP(JTAG_NTRST), (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TCK),   (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TMS),   (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TDI),   (IEN  | PTD | DIS | M0)) \
index 62fbfdfed64332a1a8da4e643d16cd9fd1a739da..e286bd4522f0b0ba4b270ba8b47b1bec642091be 100644 (file)
@@ -337,7 +337,7 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(SYS_CLKOUT1),        (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(SYS_CLKOUT2),        (IEN  | PTU | EN  | M0)) \
        /* JTAG */\
-       MUX_VAL(CP(JTAG_nTRST),         (IEN  | PTD | DIS | M0)) \
+       MUX_VAL(CP(JTAG_NTRST),         (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TCK),           (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TMS),           (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TDI),           (IEN  | PTD | DIS | M0)) \
index aba71a84bf9d8af9ce5ee24b3468b169bfebad6c..bc85ad4350a914de7f044c3f3473dce250ea5dff 100644 (file)
@@ -339,7 +339,7 @@ const omap3_sysinfo sysinfo = {
                        /* gpio_10 */\
        MUX_VAL(CP(SYS_CLKOUT2),        (IEN  | PTU | EN  | M0)) \
        /* JTAG */\
-       MUX_VAL(CP(JTAG_nTRST),         (IEN  | PTD | DIS | M0)) \
+       MUX_VAL(CP(JTAG_NTRST),         (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TCK),           (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TMS),           (IEN  | PTD | DIS | M0)) \
        MUX_VAL(CP(JTAG_TDI),           (IEN  | PTD | DIS | M0)) \
index f4bb9f890b5bf4bdb7cca8ecd67dcfadb0cd650a..680f6560f25780897fa01792464066bc320ab5c8 100644 (file)
@@ -359,9 +359,9 @@ void enable_board_pin_mux(struct am335x_baseboard_id *header)
                configure_module_pin_mux(i2c1_pin_mux);
                configure_module_pin_mux(mii1_pin_mux);
                configure_module_pin_mux(mmc0_pin_mux);
-#if defined(CONFIG_NAND)
+#if defined(CONFIG_NAND) && defined(CONFIG_EMMC_BOOT)
                configure_module_pin_mux(nand_pin_mux);
-#elif defined(CONFIG_NOR)
+#elif defined(CONFIG_NOR) && defined(CONFIG_EMMC_BOOT)
                configure_module_pin_mux(bone_norcape_pin_mux);
 #else
                configure_module_pin_mux(mmc1_pin_mux);
index e131c8fb99fb58ab293c752f71bb9b0af52a0214..6289ca787c1fc33026d6dd426b31b52076b273e7 100644 (file)
@@ -284,7 +284,7 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(SYS_CLKOUT1),    (IEN  | PTD | DIS | M4))/*GPIO_10 TP*/\
        MUX_VAL(CP(SYS_CLKOUT2),        (IEN  | PTU | EN  | M0))\
        /*JTAG*/\
-       MUX_VAL(CP(JTAG_nTRST), (IEN  | PTD | DIS | M0))\
+       MUX_VAL(CP(JTAG_NTRST), (IEN  | PTD | DIS | M0))\
        MUX_VAL(CP(JTAG_TCK),   (IEN  | PTD | DIS | M0))\
        MUX_VAL(CP(JTAG_TMS),   (IEN  | PTD | DIS | M0))\
        MUX_VAL(CP(JTAG_TDI),   (IEN  | PTD | DIS | M0))\
index f50193d99af5d5f7e6d184abc175309688223504..91e9b88c548c3b19f7ff72727579656ec1a21365 100644 (file)
@@ -300,7 +300,7 @@ static void reset_net_chip(void);
        MUX_VAL(CP(SYS_OFF_MODE),       (IEN  | PTD | DIS | M0)) /*SYS_OFF_MODE*/\
        MUX_VAL(CP(SYS_CLKOUT1),        (IEN  | PTD | DIS | M0)) /*SYS_CLKOUT1*/\
        MUX_VAL(CP(SYS_CLKOUT2),        (IEN  | PTU | EN  | M0)) /*SYS_CLKOUT2*/\
-       MUX_VAL(CP(JTAG_nTRST),         (IEN  | PTD | DIS | M0)) /*JTAG_nTRST*/\
+       MUX_VAL(CP(JTAG_NTRST),         (IEN  | PTD | DIS | M0)) /*JTAG_NTRST*/\
        MUX_VAL(CP(JTAG_TCK),           (IEN  | PTD | DIS | M0)) /*JTAG_TCK*/\
        MUX_VAL(CP(JTAG_TMS),           (IEN  | PTD | DIS | M0)) /*JTAG_TMS*/\
        MUX_VAL(CP(JTAG_TDI),           (IEN  | PTD | DIS | M0)) /*JTAG_TDI*/\
index 9c1e103a20fcda9ca9e8c7110e56e90b5c0e5531..96c5f22eadeb544f47b7459356210cb8bea7c6d9 100644 (file)
@@ -23,3 +23,19 @@ config SYS_CONFIG_NAME
        default "k2hk_evm"
 
 endif
+
+if TARGET_K2L_EVM
+
+config SYS_BOARD
+       string
+       default "ks2_evm"
+
+config SYS_VENDOR
+       string
+       default "ti"
+
+config SYS_CONFIG_NAME
+       string
+       default "k2l_evm"
+
+endif
index 595a80a8bc6fbd201f5737701dca41a9cf7072e1..87c36c9d14a2a8ad6546e735b58dcf5228ac17b7 100644 (file)
@@ -6,3 +6,5 @@ F:      include/configs/k2hk_evm.h
 F:     configs/k2hk_evm_defconfig
 F:     include/configs/k2e_evm.h
 F:     configs/k2e_evm_defconfig
+F:     include/configs/k2l_evm.h
+F:     configs/k2l_evm_defconfig
index 00f1164833c29f9483c714047167c9c7d6e7b330..071dbee180ad466221f16a88e745ac30f6b36bf7 100644 (file)
@@ -11,3 +11,5 @@ obj-$(CONFIG_K2HK_EVM) += board_k2hk.o
 obj-$(CONFIG_K2HK_EVM) += ddr3_k2hk.o
 obj-$(CONFIG_K2E_EVM) += board_k2e.o
 obj-$(CONFIG_K2E_EVM) += ddr3_k2e.o
+obj-$(CONFIG_K2L_EVM) += board_k2l.o
+obj-$(CONFIG_K2L_EVM) += ddr3_k2l.o
index dfe7be60e71befcd1c314b8f4a2cb05feca5a929..40294934525c9b0518d2a53118c45c6da22fdc13 100644 (file)
@@ -9,11 +9,13 @@
 
 #include "board.h"
 #include <common.h>
+#include <spl.h>
 #include <exports.h>
 #include <fdt_support.h>
 #include <asm/arch/ddr3.h>
-#include <asm/arch/emac_defs.h>
+#include <asm/arch/psc_defs.h>
 #include <asm/ti-common/ti-aemif.h>
+#include <asm/ti-common/keystone_net.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -38,6 +40,7 @@ int dram_init(void)
        gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE,
                                    CONFIG_MAX_RAM_BANK_SIZE);
        aemif_init(ARRAY_SIZE(aemif_configs), aemif_configs);
+       ddr3_init_ecc(KS2_DDR3A_EMIF_CTRL_BASE);
        return 0;
 }
 
@@ -68,6 +71,15 @@ int board_eth_init(bd_t *bis)
        int port_num;
        char link_type_name[32];
 
+       /* By default, select PA PLL clock as PA clock source */
+       if (psc_enable_module(KS2_LPSC_PA))
+               return -1;
+       if (psc_enable_module(KS2_LPSC_CPGMAC))
+               return -1;
+       if (psc_enable_module(KS2_LPSC_CRYPTO))
+               return -1;
+       pass_pll_pa_clk_enable();
+
        port_num = get_num_eth_ports();
 
        for (j = 0; j < port_num; j++) {
@@ -83,6 +95,24 @@ int board_eth_init(bd_t *bis)
 }
 #endif
 
+#ifdef CONFIG_SPL_BUILD
+void spl_board_init(void)
+{
+       spl_init_keystone_plls();
+       preloader_console_init();
+}
+
+u32 spl_boot_device(void)
+{
+#if defined(CONFIG_SPL_SPI_LOAD)
+       return BOOT_DEVICE_SPI;
+#else
+       puts("Unknown boot device\n");
+       hang();
+#endif
+}
+#endif
+
 #if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
 void ft_board_setup(void *blob, bd_t *bd)
 {
@@ -225,5 +255,7 @@ void ft_board_setup_ex(void *blob, bd_t *bd)
                        reserve_start += 2;
                }
        }
+
+       ddr3_check_ecc_int(KS2_DDR3A_EMIF_CTRL_BASE);
 }
 #endif
index d91ef736129fa3c2309d143f215322f108566d8b..2bbd79245baa438983439872db0bb9ca275f1770 100644 (file)
 #ifndef _KS2_BOARD
 #define _KS2_BOARD
 
-#include <asm/arch/emac_defs.h>
+#include <asm/ti-common/keystone_net.h>
 
 extern struct eth_priv_t eth_priv_cfg[];
 
 int get_num_eth_ports(void);
+void spl_init_keystone_plls(void);
 
 #endif
index 5472a43c43f105c4ca3ec3bbc5e268a2f6cc5c76..43dfc48a53da2085f699450c698dd34af2d71163 100644 (file)
@@ -10,6 +10,7 @@
 #include <common.h>
 #include <asm/arch/ddr3.h>
 #include <asm/arch/hardware.h>
+#include <asm/ti-common/keystone_net.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -35,10 +36,75 @@ static struct pll_init_data core_pll_config[] = {
        CORE_PLL_1500,
 };
 
-
 static struct pll_init_data pa_pll_config =
        PASS_PLL_1000;
 
+#ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
+struct eth_priv_t eth_priv_cfg[] = {
+       {
+               .int_name        = "K2E_EMAC0",
+               .rx_flow         = 0,
+               .phy_addr        = 0,
+               .slave_port      = 1,
+               .sgmii_link_type = SGMII_LINK_MAC_PHY,
+       },
+       {
+               .int_name        = "K2E_EMAC1",
+               .rx_flow         = 8,
+               .phy_addr        = 1,
+               .slave_port      = 2,
+               .sgmii_link_type = SGMII_LINK_MAC_PHY,
+       },
+       {
+               .int_name        = "K2E_EMAC2",
+               .rx_flow         = 16,
+               .phy_addr        = 2,
+               .slave_port      = 3,
+               .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
+       },
+       {
+               .int_name        = "K2E_EMAC3",
+               .rx_flow         = 24,
+               .phy_addr        = 3,
+               .slave_port      = 4,
+               .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
+       },
+       {
+               .int_name        = "K2E_EMAC4",
+               .rx_flow         = 32,
+               .phy_addr        = 4,
+               .slave_port      = 5,
+               .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
+       },
+       {
+               .int_name        = "K2E_EMAC5",
+               .rx_flow         = 40,
+               .phy_addr        = 5,
+               .slave_port      = 6,
+               .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
+       },
+       {
+               .int_name        = "K2E_EMAC6",
+               .rx_flow         = 48,
+               .phy_addr        = 6,
+               .slave_port      = 7,
+               .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
+       },
+       {
+               .int_name        = "K2E_EMAC7",
+               .rx_flow         = 56,
+               .phy_addr        = 7,
+               .slave_port      = 8,
+               .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
+       },
+};
+
+int get_num_eth_ports(void)
+{
+       return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t);
+}
+#endif
+
 #if defined(CONFIG_BOARD_EARLY_INIT_F)
 int board_early_init_f(void)
 {
@@ -52,3 +118,14 @@ int board_early_init_f(void)
        return 0;
 }
 #endif
+
+#ifdef CONFIG_SPL_BUILD
+static struct pll_init_data spl_pll_config[] = {
+       CORE_PLL_800,
+};
+
+void spl_init_keystone_plls(void)
+{
+       init_plls(ARRAY_SIZE(spl_pll_config), spl_pll_config);
+}
+#endif
index 6fb3d2123df0a5183ec921f608735ab714f4e9e7..ed181f44b8974a229b23b8fd838e02c304ebe94c 100644 (file)
@@ -10,7 +10,7 @@
 #include <common.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/hardware.h>
-#include <asm/arch/emac_defs.h>
+#include <asm/ti-common/keystone_net.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -100,3 +100,15 @@ int board_early_init_f(void)
        return 0;
 }
 #endif
+
+#ifdef CONFIG_SPL_BUILD
+static struct pll_init_data spl_pll_config[] = {
+       CORE_PLL_799,
+       TETRIS_PLL_500,
+};
+
+void spl_init_keystone_plls(void)
+{
+       init_plls(ARRAY_SIZE(spl_pll_config), spl_pll_config);
+}
+#endif
diff --git a/board/ti/ks2_evm/board_k2l.c b/board/ti/ks2_evm/board_k2l.c
new file mode 100644 (file)
index 0000000..559d20c
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * K2L EVM : Board initialization
+ *
+ * (C) Copyright 2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/arch/ddr3.h>
+#include <asm/arch/hardware.h>
+#include <asm/ti-common/ti-aemif.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+unsigned int external_clk[ext_clk_count] = {
+       [sys_clk]       = 122880000,
+       [alt_core_clk]  = 100000000,
+       [pa_clk]        = 122880000,
+       [tetris_clk]    = 122880000,
+       [ddr3_clk]      = 100000000,
+       [pcie_clk]      = 100000000,
+       [sgmii_clk]     = 156250000,
+       [usb_clk]       = 100000000,
+};
+
+static struct pll_init_data core_pll_config[] = {
+       CORE_PLL_799,
+       CORE_PLL_1000,
+       CORE_PLL_1198,
+};
+
+static struct pll_init_data tetris_pll_config[] = {
+       TETRIS_PLL_799,
+       TETRIS_PLL_1000,
+       TETRIS_PLL_1198,
+       TETRIS_PLL_1352,
+       TETRIS_PLL_1401,
+};
+
+static struct pll_init_data pa_pll_config =
+       PASS_PLL_983;
+
+#ifdef CONFIG_BOARD_EARLY_INIT_F
+int board_early_init_f(void)
+{
+       int speed;
+
+       speed = get_max_dev_speed();
+       init_pll(&core_pll_config[speed]);
+
+       init_pll(&pa_pll_config);
+
+       speed = get_max_arm_speed();
+       init_pll(&tetris_pll_config[speed]);
+
+       return 0;
+}
+#endif
+
+#ifdef CONFIG_SPL_BUILD
+static struct pll_init_data spl_pll_config[] = {
+       CORE_PLL_799,
+       TETRIS_PLL_491,
+};
+
+void spl_init_keystone_plls(void)
+{
+       init_plls(ARRAY_SIZE(spl_pll_config), spl_pll_config);
+}
+#endif
index f7da9f2bcbaab775f3a80e1ecad375286f4c141a..ab44676793c0b4617ec70ca7cc89117ed51890b8 100644 (file)
@@ -133,6 +133,42 @@ struct ddr3_emif_config ddr3_1600_4g = {
 };
 #endif
 
+struct ddr3_phy_config ddr3phy_1600_2g = {
+       .pllcr          = 0x0001C000ul,
+       .pgcr1_mask     = (IODDRM_MASK | ZCKSEL_MASK),
+       .pgcr1_val      = ((1 << 2) | (1 << 7) | (1 << 23)),
+       .ptr0           = 0x42C21590ul,
+       .ptr1           = 0xD05612C0ul,
+       .ptr2           = 0, /* not set in gel */
+       .ptr3           = 0x0D861A80ul,
+       .ptr4           = 0x0C827100ul,
+       .dcr_mask       = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK),
+       .dcr_val        = ((1 << 10)),
+       .dtpr0          = 0x9D5CBB66ul,
+       .dtpr1          = 0x12868300ul,
+       .dtpr2          = 0x5002D200ul,
+       .mr0            = 0x00001C70ul,
+       .mr1            = 0x00000006ul,
+       .mr2            = 0x00000018ul,
+       .dtcr           = 0x710035C7ul,
+       .pgcr2          = 0x00F07A12ul,
+       .zq0cr1         = 0x0001005Dul,
+       .zq1cr1         = 0x0001005Bul,
+       .zq2cr1         = 0x0001005Bul,
+       .pir_v1         = 0x00000033ul,
+       .pir_v2         = 0x0000FF81ul,
+};
+
+struct ddr3_emif_config ddr3_1600_2g = {
+       .sdcfg          = 0x6200CE62ul,
+       .sdtim1         = 0x166C9855ul,
+       .sdtim2         = 0x00001D4Aul,
+       .sdtim3         = 0x435DFF53ul,
+       .sdtim4         = 0x543F0CFFul,
+       .zqcfg          = 0x70073200ul,
+       .sdrfc          = 0x00001869ul,
+};
+
 int ddr3_get_dimm_params(char *dimm_name)
 {
        int ret;
index 15fcf52ef1980aec5303467f58f3b628c4739368..5bd786cff8e9f6e4ab918229b402c4ad782e71e6 100644 (file)
@@ -19,6 +19,9 @@ extern struct ddr3_emif_config ddr3_1333_2g;
 extern struct ddr3_phy_config ddr3phy_1600_4g;
 extern struct ddr3_emif_config ddr3_1600_4g;
 
+extern struct ddr3_phy_config ddr3phy_1600_2g;
+extern struct ddr3_emif_config ddr3_1600_2g;
+
 int ddr3_get_dimm_params(char *dimm_name);
 
 #endif /* __DDR3_CFG_H */
index 6070a9977029ad1fc8d222bd9f4381b0f823264e..a1c3d05f8e50e2f7d4f2a62097f8e46379f0aaaa 100644 (file)
@@ -12,6 +12,8 @@
 #include <asm/arch/ddr3.h>
 #include <asm/arch/hardware.h>
 
+static int ddr3_size;
+
 struct pll_init_data ddr3a_333 = DDR3_PLL_333(A);
 struct pll_init_data ddr3a_400 = DDR3_PLL_400(A);
 
@@ -44,12 +46,14 @@ void ddr3_init(void)
                        ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE,
                                          &ddr3_1600_8g);
                        printf("DRAM:  Capacity 8 GiB (includes reported below)\n");
+                       ddr3_size = 8;
                } else {
                        ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_1600_8g);
                        ddr3_1600_8g.sdcfg |= 0x1000;
                        ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE,
                                          &ddr3_1600_8g);
                        printf("DRAM:  Capacity 4 GiB (includes reported below)\n");
+                       ddr3_size = 4;
                }
        } else if (!strcmp(dimm_name, "SQR-SD3T-2G1333SED")) {
                init_pll(&ddr3a_333);
@@ -70,11 +74,15 @@ void ddr3_init(void)
                        }
                        ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE,
                                          &ddr3_1333_2g);
+                       ddr3_size = 2;
+                       printf("DRAM:  2 GiB");
                } else {
                        ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_1333_2g);
                        ddr3_1333_2g.sdcfg |= 0x1000;
                        ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE,
                                          &ddr3_1333_2g);
+                       ddr3_size = 1;
+                       printf("DRAM:  1 GiB");
                }
        } else {
                printf("Unknown SO-DIMM. Cannot configure DDR3\n");
@@ -86,3 +94,11 @@ void ddr3_init(void)
        if (cpu_revision() <= 1)
                ddr3_err_reset_workaround();
 }
+
+/**
+ * ddr3_get_size - return ddr3 size in GiB
+ */
+int ddr3_get_size(void)
+{
+       return ddr3_size;
+}
diff --git a/board/ti/ks2_evm/ddr3_k2l.c b/board/ti/ks2_evm/ddr3_k2l.c
new file mode 100644 (file)
index 0000000..15a14f2
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Keystone2: DDR3 initialization
+ *
+ * (C) Copyright 2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <common.h>
+#include "ddr3_cfg.h"
+#include <asm/arch/ddr3.h>
+
+static int ddr3_size;
+static struct pll_init_data ddr3_400 = DDR3_PLL_400;
+
+void ddr3_init(void)
+{
+       init_pll(&ddr3_400);
+
+       /* No SO-DIMM, 2GB discreet DDR */
+       printf("DRAM: 2 GiB\n");
+       ddr3_size = 2;
+
+       /* Reset DDR3 PHY after PLL enabled */
+       ddr3_reset_ddrphy();
+
+       ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_1600_2g);
+       ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE, &ddr3_1600_2g);
+}
+
+/**
+ * ddr3_get_size - return ddr3 size in GiB
+ */
+int ddr3_get_size(void)
+{
+       return ddr3_size;
+}
index 2acb302591ee1025d1a073bd1d478bc64d5d159d..0e631897e38e24f38e0ddecf01057408489a0836 100644 (file)
        MUX_VAL(CP(SYS_OFF_MODE), (IEN | PTD | DIS | M0))\
        MUX_VAL(CP(SYS_CLKOUT1), (IEN | PTD | DIS | M0))\
        MUX_VAL(CP(SYS_CLKOUT2), (OFF_IN_PD | IEN | PTU | EN | M4))/*GPIO_186*/\
-       MUX_VAL(CP(JTAG_nTRST), (IEN | PTD | DIS | M0))\
+       MUX_VAL(CP(JTAG_NTRST), (IEN | PTD | DIS | M0))\
        MUX_VAL(CP(JTAG_TCK), (IEN | PTD | DIS | M0))\
        MUX_VAL(CP(JTAG_TMS), (IEN | PTD | DIS | M0))\
        MUX_VAL(CP(JTAG_TDI), (IEN | PTD | DIS | M0))\
index b5249e74a779a3a1b1f16a9be3a5c9a9c5c32521..247991d5888900629c494d3ff987a600012f4b50 100644 (file)
@@ -15,6 +15,7 @@
 #include <asm/arch/iomux-mx51.h>
 #include <asm/gpio.h>
 #include <asm/arch/sys_proto.h>
+#include <asm/imx-common/spi.h>
 #include <i2c.h>
 #include <mmc.h>
 #include <power/pmic.h>
index c84b3bc102a418d3f62bd68934c6f7aa53286c11..6cc4de8a73f6ab24a20760ded2d64e395b65a94f 100644 (file)
@@ -233,6 +233,7 @@ obj-$(CONFIG_SPL_ENV_SUPPORT) += env_flags.o
 obj-$(CONFIG_SPL_ENV_SUPPORT) += env_callback.o
 obj-$(CONFIG_ENV_IS_NOWHERE) += env_nowhere.o
 obj-$(CONFIG_ENV_IS_IN_MMC) += env_mmc.o
+obj-$(CONFIG_ENV_IS_IN_FAT) += env_fat.o
 obj-$(CONFIG_ENV_IS_IN_NAND) += env_nand.o
 obj-$(CONFIG_ENV_IS_IN_SPI_FLASH) += env_sf.o
 obj-$(CONFIG_ENV_IS_IN_FLASH) += env_flash.o
diff --git a/configs/k2l_evm_defconfig b/configs/k2l_evm_defconfig
new file mode 100644 (file)
index 0000000..45399ce
--- /dev/null
@@ -0,0 +1,4 @@
+CONFIG_SPL=y
++S:CONFIG_ARM=y
++S:CONFIG_ARCH_KEYSTONE=y
++S:CONFIG_TARGET_K2L_EVM=y
index d8361d95fd15ea8dab26b6e408cb8d4fb17d0eeb..33227c8bd6de003d170962e7f7778ed1b091c460 100644 (file)
@@ -19,3 +19,5 @@ obj-$(CONFIG_QE) += qe/
 obj-y += memory/
 obj-y += pwm/
 obj-y += input/
+# SOC specific infrastructure drivers.
+obj-y += soc/
index a79c3919ddc7d452a41ca8bc8676b2c97c88ad54..4c8fcc257568042d7168deb0ea267aeb74e11c7b 100644 (file)
@@ -8,3 +8,5 @@
 obj-$(CONFIG_FSLDMAFEC) += MCD_tasksInit.o MCD_dmaApi.o MCD_tasks.o
 obj-$(CONFIG_APBH_DMA) += apbh_dma.o
 obj-$(CONFIG_FSL_DMA) += fsl_dma.o
+obj-$(CONFIG_TI_KSNAV) += keystone_nav.o keystone_nav_cfg.o
+obj-$(CONFIG_TI_EDMA3) += ti-edma3.o
similarity index 53%
rename from arch/arm/cpu/armv7/keystone/keystone_nav.c
rename to drivers/dma/keystone_nav.c
index 39d6f995f7bd9c7cd700504bb32b102758c8e80c..77707c21098f45ca1c33d42470416717f8851f62 100644 (file)
@@ -8,28 +8,23 @@
  */
 #include <common.h>
 #include <asm/io.h>
-#include <asm/arch/keystone_nav.h>
-
-static int soc_type =
-#ifdef CONFIG_SOC_K2HK
-       k2hk;
-#endif
-
-struct qm_config k2hk_qm_memmap = {
-       .stat_cfg       = 0x02a40000,
-       .queue          = (struct qm_reg_queue *)0x02a80000,
-       .mngr_vbusm     = 0x23a80000,
-       .i_lram         = 0x00100000,
-       .proxy          = (struct qm_reg_queue *)0x02ac0000,
-       .status_ram     = 0x02a06000,
-       .mngr_cfg       = (struct qm_cfg_reg *)0x02a02000,
-       .intd_cfg       = 0x02a0c000,
-       .desc_mem       = (struct descr_mem_setup_reg *)0x02a03000,
-       .region_num     = 64,
-       .pdsp_cmd       = 0x02a20000,
-       .pdsp_ctl       = 0x02a0f000,
-       .pdsp_iram      = 0x02a10000,
-       .qpool_num      = 4000,
+#include <asm/ti-common/keystone_nav.h>
+
+struct qm_config qm_memmap = {
+       .stat_cfg       = CONFIG_KSNAV_QM_QUEUE_STATUS_BASE,
+       .queue          = (void *)CONFIG_KSNAV_QM_MANAGER_QUEUES_BASE,
+       .mngr_vbusm     = CONFIG_KSNAV_QM_BASE_ADDRESS,
+       .i_lram         = CONFIG_KSNAV_QM_LINK_RAM_BASE,
+       .proxy          = (void *)CONFIG_KSNAV_QM_MANAGER_Q_PROXY_BASE,
+       .status_ram     = CONFIG_KSNAV_QM_STATUS_RAM_BASE,
+       .mngr_cfg       = (void *)CONFIG_KSNAV_QM_CONF_BASE,
+       .intd_cfg       = CONFIG_KSNAV_QM_INTD_CONF_BASE,
+       .desc_mem       = (void *)CONFIG_KSNAV_QM_DESC_SETUP_BASE,
+       .region_num     = CONFIG_KSNAV_QM_REGION_NUM,
+       .pdsp_cmd       = CONFIG_KSNAV_QM_PDSP1_CMD_BASE,
+       .pdsp_ctl       = CONFIG_KSNAV_QM_PDSP1_CTRL_BASE,
+       .pdsp_iram      = CONFIG_KSNAV_QM_PDSP1_IRAM_BASE,
+       .qpool_num      = CONFIG_KSNAV_QM_QPOOL_NUM,
 };
 
 /*
@@ -52,12 +47,9 @@ inline int num_of_desc_to_reg(int num_descr)
        return 15;
 }
 
-static int _qm_init(struct qm_config *cfg)
+int _qm_init(struct qm_config *cfg)
 {
-       u32     j;
-
-       if (cfg == NULL)
-               return QM_ERR;
+       u32 j;
 
        qm_cfg = cfg;
 
@@ -82,12 +74,7 @@ static int _qm_init(struct qm_config *cfg)
 
 int qm_init(void)
 {
-       switch (soc_type) {
-       case k2hk:
-               return _qm_init(&k2hk_qm_memmap);
-       }
-
-       return QM_ERR;
+       return _qm_init(&qm_memmap);
 }
 
 void qm_close(void)
@@ -166,39 +153,23 @@ void queue_close(u32 qnum)
                ;
 }
 
-/*
+/**
  * DMA API
  */
 
-struct pktdma_cfg k2hk_netcp_pktdma = {
-       .global         = (struct global_ctl_regs *)0x02004000,
-       .tx_ch          = (struct tx_chan_regs *)0x02004400,
-       .tx_ch_num      = 9,
-       .rx_ch          = (struct rx_chan_regs *)0x02004800,
-       .rx_ch_num      = 26,
-       .tx_sched       = (u32 *)0x02004c00,
-       .rx_flows       = (struct rx_flow_regs *)0x02005000,
-       .rx_flow_num    = 32,
-       .rx_free_q      = 4001,
-       .rx_rcv_q       = 4002,
-       .tx_snd_q       = 648,
-};
-
-struct pktdma_cfg *netcp;
-
-static int netcp_rx_disable(void)
+static int ksnav_rx_disable(struct pktdma_cfg *pktdma)
 {
        u32 j, v, k;
 
-       for (j = 0; j < netcp->rx_ch_num; j++) {
-               v = readl(&netcp->rx_ch[j].cfg_a);
+       for (j = 0; j < pktdma->rx_ch_num; j++) {
+               v = readl(&pktdma->rx_ch[j].cfg_a);
                if (!(v & CPDMA_CHAN_A_ENABLE))
                        continue;
 
-               writel(v | CPDMA_CHAN_A_TDOWN, &netcp->rx_ch[j].cfg_a);
+               writel(v | CPDMA_CHAN_A_TDOWN, &pktdma->rx_ch[j].cfg_a);
                for (k = 0; k < TDOWN_TIMEOUT_COUNT; k++) {
                        udelay(100);
-                       v = readl(&netcp->rx_ch[j].cfg_a);
+                       v = readl(&pktdma->rx_ch[j].cfg_a);
                        if (!(v & CPDMA_CHAN_A_ENABLE))
                                continue;
                }
@@ -206,33 +177,33 @@ static int netcp_rx_disable(void)
        }
 
        /* Clear all of the flow registers */
-       for (j = 0; j < netcp->rx_flow_num; j++) {
-               writel(0, &netcp->rx_flows[j].control);
-               writel(0, &netcp->rx_flows[j].tags);
-               writel(0, &netcp->rx_flows[j].tag_sel);
-               writel(0, &netcp->rx_flows[j].fdq_sel[0]);
-               writel(0, &netcp->rx_flows[j].fdq_sel[1]);
-               writel(0, &netcp->rx_flows[j].thresh[0]);
-               writel(0, &netcp->rx_flows[j].thresh[1]);
-               writel(0, &netcp->rx_flows[j].thresh[2]);
+       for (j = 0; j < pktdma->rx_flow_num; j++) {
+               writel(0, &pktdma->rx_flows[j].control);
+               writel(0, &pktdma->rx_flows[j].tags);
+               writel(0, &pktdma->rx_flows[j].tag_sel);
+               writel(0, &pktdma->rx_flows[j].fdq_sel[0]);
+               writel(0, &pktdma->rx_flows[j].fdq_sel[1]);
+               writel(0, &pktdma->rx_flows[j].thresh[0]);
+               writel(0, &pktdma->rx_flows[j].thresh[1]);
+               writel(0, &pktdma->rx_flows[j].thresh[2]);
        }
 
        return QM_OK;
 }
 
-static int netcp_tx_disable(void)
+static int ksnav_tx_disable(struct pktdma_cfg *pktdma)
 {
        u32 j, v, k;
 
-       for (j = 0; j < netcp->tx_ch_num; j++) {
-               v = readl(&netcp->tx_ch[j].cfg_a);
+       for (j = 0; j < pktdma->tx_ch_num; j++) {
+               v = readl(&pktdma->tx_ch[j].cfg_a);
                if (!(v & CPDMA_CHAN_A_ENABLE))
                        continue;
 
-               writel(v | CPDMA_CHAN_A_TDOWN, &netcp->tx_ch[j].cfg_a);
+               writel(v | CPDMA_CHAN_A_TDOWN, &pktdma->tx_ch[j].cfg_a);
                for (k = 0; k < TDOWN_TIMEOUT_COUNT; k++) {
                        udelay(100);
-                       v = readl(&netcp->tx_ch[j].cfg_a);
+                       v = readl(&pktdma->tx_ch[j].cfg_a);
                        if (!(v & CPDMA_CHAN_A_ENABLE))
                                continue;
                }
@@ -242,19 +213,17 @@ static int netcp_tx_disable(void)
        return QM_OK;
 }
 
-static int _netcp_init(struct pktdma_cfg *netcp_cfg,
-                      struct rx_buff_desc *rx_buffers)
+int ksnav_init(struct pktdma_cfg *pktdma, struct rx_buff_desc *rx_buffers)
 {
        u32 j, v;
        struct qm_host_desc *hd;
        u8 *rx_ptr;
 
-       if (netcp_cfg == NULL || rx_buffers == NULL ||
+       if (pktdma == NULL || rx_buffers == NULL ||
            rx_buffers->buff_ptr == NULL || qm_cfg == NULL)
                return QM_ERR;
 
-       netcp = netcp_cfg;
-       netcp->rx_flow = rx_buffers->rx_flow;
+       pktdma->rx_flow = rx_buffers->rx_flow;
 
        /* init rx queue */
        rx_ptr = rx_buffers->buff_ptr;
@@ -264,77 +233,64 @@ static int _netcp_init(struct pktdma_cfg *netcp_cfg,
                if (hd == NULL)
                        return QM_ERR;
 
-               qm_buff_push(hd, netcp->rx_free_q,
+               qm_buff_push(hd, pktdma->rx_free_q,
                             rx_ptr, rx_buffers->buff_len);
 
                rx_ptr += rx_buffers->buff_len;
        }
 
-       netcp_rx_disable();
+       ksnav_rx_disable(pktdma);
 
        /* configure rx channels */
-       v = CPDMA_REG_VAL_MAKE_RX_FLOW_A(1, 1, 0, 0, 0, 0, 0, netcp->rx_rcv_q);
-       writel(v, &netcp->rx_flows[netcp->rx_flow].control);
-       writel(0, &netcp->rx_flows[netcp->rx_flow].tags);
-       writel(0, &netcp->rx_flows[netcp->rx_flow].tag_sel);
+       v = CPDMA_REG_VAL_MAKE_RX_FLOW_A(1, 1, 0, 0, 0, 0, 0, pktdma->rx_rcv_q);
+       writel(v, &pktdma->rx_flows[pktdma->rx_flow].control);
+       writel(0, &pktdma->rx_flows[pktdma->rx_flow].tags);
+       writel(0, &pktdma->rx_flows[pktdma->rx_flow].tag_sel);
 
-       v = CPDMA_REG_VAL_MAKE_RX_FLOW_D(0, netcp->rx_free_q, 0,
-                                        netcp->rx_free_q);
+       v = CPDMA_REG_VAL_MAKE_RX_FLOW_D(0, pktdma->rx_free_q, 0,
+                                        pktdma->rx_free_q);
 
-       writel(v, &netcp->rx_flows[netcp->rx_flow].fdq_sel[0]);
-       writel(v, &netcp->rx_flows[netcp->rx_flow].fdq_sel[1]);
-       writel(0, &netcp->rx_flows[netcp->rx_flow].thresh[0]);
-       writel(0, &netcp->rx_flows[netcp->rx_flow].thresh[1]);
-       writel(0, &netcp->rx_flows[netcp->rx_flow].thresh[2]);
+       writel(v, &pktdma->rx_flows[pktdma->rx_flow].fdq_sel[0]);
+       writel(v, &pktdma->rx_flows[pktdma->rx_flow].fdq_sel[1]);
+       writel(0, &pktdma->rx_flows[pktdma->rx_flow].thresh[0]);
+       writel(0, &pktdma->rx_flows[pktdma->rx_flow].thresh[1]);
+       writel(0, &pktdma->rx_flows[pktdma->rx_flow].thresh[2]);
 
-       for (j = 0; j < netcp->rx_ch_num; j++)
-               writel(CPDMA_CHAN_A_ENABLE, &netcp->rx_ch[j].cfg_a);
+       for (j = 0; j < pktdma->rx_ch_num; j++)
+               writel(CPDMA_CHAN_A_ENABLE, &pktdma->rx_ch[j].cfg_a);
 
        /* configure tx channels */
        /* Disable loopback in the tx direction */
-       writel(0, &netcp->global->emulation_control);
+       writel(0, &pktdma->global->emulation_control);
 
-/* TODO: make it dependend on a soc type variable */
-#ifdef CONFIG_SOC_K2HK
        /* Set QM base address, only for K2x devices */
-       writel(0x23a80000, &netcp->global->qm_base_addr[0]);
-#endif
+       writel(CONFIG_KSNAV_QM_BASE_ADDRESS, &pktdma->global->qm_base_addr[0]);
 
        /* Enable all channels. The current state isn't important */
-       for (j = 0; j < netcp->tx_ch_num; j++)  {
-               writel(0, &netcp->tx_ch[j].cfg_b);
-               writel(CPDMA_CHAN_A_ENABLE, &netcp->tx_ch[j].cfg_a);
+       for (j = 0; j < pktdma->tx_ch_num; j++)  {
+               writel(0, &pktdma->tx_ch[j].cfg_b);
+               writel(CPDMA_CHAN_A_ENABLE, &pktdma->tx_ch[j].cfg_a);
        }
 
        return QM_OK;
 }
 
-int netcp_init(struct rx_buff_desc *rx_buffers)
-{
-       switch (soc_type) {
-       case k2hk:
-               _netcp_init(&k2hk_netcp_pktdma, rx_buffers);
-               return QM_OK;
-       }
-       return QM_ERR;
-}
-
-int netcp_close(void)
+int ksnav_close(struct pktdma_cfg *pktdma)
 {
-       if (!netcp)
+       if (!pktdma)
                return QM_ERR;
 
-       netcp_tx_disable();
-       netcp_rx_disable();
+       ksnav_tx_disable(pktdma);
+       ksnav_rx_disable(pktdma);
 
-       queue_close(netcp->rx_free_q);
-       queue_close(netcp->rx_rcv_q);
-       queue_close(netcp->tx_snd_q);
+       queue_close(pktdma->rx_free_q);
+       queue_close(pktdma->rx_rcv_q);
+       queue_close(pktdma->tx_snd_q);
 
        return QM_OK;
 }
 
-int netcp_send(u32 *pkt, int num_bytes, u32 swinfo2)
+int ksnav_send(struct pktdma_cfg *pktdma, u32 *pkt, int num_bytes, u32 swinfo2)
 {
        struct qm_host_desc *hd;
 
@@ -346,16 +302,16 @@ int netcp_send(u32 *pkt, int num_bytes, u32 swinfo2)
        hd->swinfo[2]   = swinfo2;
        hd->packet_info = qm_cfg->qpool_num;
 
-       qm_buff_push(hd, netcp->tx_snd_q, pkt, num_bytes);
+       qm_buff_push(hd, pktdma->tx_snd_q, pkt, num_bytes);
 
        return QM_OK;
 }
 
-void *netcp_recv(u32 **pkt, int *num_bytes)
+void *ksnav_recv(struct pktdma_cfg *pktdma, u32 **pkt, int *num_bytes)
 {
        struct qm_host_desc *hd;
 
-       hd = qm_pop(netcp->rx_rcv_q);
+       hd = qm_pop(pktdma->rx_rcv_q);
        if (!hd)
                return NULL;
 
@@ -365,12 +321,12 @@ void *netcp_recv(u32 **pkt, int *num_bytes)
        return hd;
 }
 
-void netcp_release_rxhd(void *hd)
+void ksnav_release_rxhd(struct pktdma_cfg *pktdma, void *hd)
 {
        struct qm_host_desc *_hd = (struct qm_host_desc *)hd;
 
        _hd->buff_len = _hd->orig_buff_len;
        _hd->buff_ptr = _hd->orig_buff_ptr;
 
-       qm_push(_hd, netcp->rx_free_q);
+       qm_push(_hd, pktdma->rx_free_q);
 }
diff --git a/drivers/dma/keystone_nav_cfg.c b/drivers/dma/keystone_nav_cfg.c
new file mode 100644 (file)
index 0000000..bdd30a0
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Multicore Navigator driver for TI Keystone 2 devices.
+ *
+ * (C) Copyright 2012-2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <asm/ti-common/keystone_nav.h>
+
+#ifdef CONFIG_KSNAV_PKTDMA_NETCP
+/* NETCP Pktdma */
+struct pktdma_cfg netcp_pktdma = {
+       .global         = (void *)CONFIG_KSNAV_NETCP_PDMA_CTRL_BASE,
+       .tx_ch          = (void *)CONFIG_KSNAV_NETCP_PDMA_TX_BASE,
+       .tx_ch_num      = CONFIG_KSNAV_NETCP_PDMA_TX_CH_NUM,
+       .rx_ch          = (void *)CONFIG_KSNAV_NETCP_PDMA_RX_BASE,
+       .rx_ch_num      = CONFIG_KSNAV_NETCP_PDMA_RX_CH_NUM,
+       .tx_sched       = (u32 *)CONFIG_KSNAV_NETCP_PDMA_SCHED_BASE,
+       .rx_flows       = (void *)CONFIG_KSNAV_NETCP_PDMA_RX_FLOW_BASE,
+       .rx_flow_num    = CONFIG_KSNAV_NETCP_PDMA_RX_FLOW_NUM,
+       .rx_free_q      = CONFIG_KSNAV_NETCP_PDMA_RX_FREE_QUEUE,
+       .rx_rcv_q       = CONFIG_KSNAV_NETCP_PDMA_RX_RCV_QUEUE,
+       .tx_snd_q       = CONFIG_KSNAV_NETCP_PDMA_TX_SND_QUEUE,
+};
+#endif
diff --git a/drivers/dma/ti-edma3.c b/drivers/dma/ti-edma3.c
new file mode 100644 (file)
index 0000000..8184ded
--- /dev/null
@@ -0,0 +1,384 @@
+/*
+ * Enhanced Direct Memory Access (EDMA3) Controller
+ *
+ * (C) Copyright 2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * Author: Ivan Khoronzhuk <ivan.khoronzhuk@ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <asm/io.h>
+#include <common.h>
+#include <asm/ti-common/ti-edma3.h>
+
+#define EDMA3_SL_BASE(slot)                    (0x4000 + ((slot) << 5))
+#define EDMA3_SL_MAX_NUM                       512
+#define EDMA3_SLOPT_FIFO_WIDTH_MASK            (0x7 << 8)
+
+#define EDMA3_QCHMAP(ch)                       0x0200 + ((ch) << 2)
+#define EDMA3_CHMAP_PARSET_MASK                        0x1ff
+#define EDMA3_CHMAP_PARSET_SHIFT               0x5
+#define EDMA3_CHMAP_TRIGWORD_SHIFT             0x2
+
+#define EDMA3_QEMCR                            0x314
+#define EDMA3_IPR                              0x1068
+#define EDMA3_IPRH                             0x106c
+#define EDMA3_ICR                              0x1070
+#define EDMA3_ICRH                             0x1074
+#define EDMA3_QEECR                            0x1088
+#define EDMA3_QEESR                            0x108c
+#define EDMA3_QSECR                            0x1094
+
+/**
+ * qedma3_start - start qdma on a channel
+ * @base: base address of edma
+ * @cfg: pinter to struct edma3_channel_config where you can set
+ * the slot number to associate with, the chnum, which corresponds
+ * your quick channel number 0-7, complete code - transfer complete code
+ * and trigger slot word - which has to correspond to the word number in
+ * edma3_slot_layout struct for generating event.
+ *
+ */
+void qedma3_start(u32 base, struct edma3_channel_config *cfg)
+{
+       u32 qchmap;
+
+       /* Clear the pending int bit */
+       if (cfg->complete_code < 32)
+               __raw_writel(1 << cfg->complete_code, base + EDMA3_ICR);
+       else
+               __raw_writel(1 << cfg->complete_code, base + EDMA3_ICRH);
+
+       /* Map parameter set and trigger word 7 to quick channel */
+       qchmap = ((EDMA3_CHMAP_PARSET_MASK & cfg->slot)
+                 << EDMA3_CHMAP_PARSET_SHIFT) |
+                 (cfg->trigger_slot_word << EDMA3_CHMAP_TRIGWORD_SHIFT);
+
+       __raw_writel(qchmap, base + EDMA3_QCHMAP(cfg->chnum));
+
+       /* Clear missed event if set*/
+       __raw_writel(1 << cfg->chnum, base + EDMA3_QSECR);
+       __raw_writel(1 << cfg->chnum, base + EDMA3_QEMCR);
+
+       /* Enable qdma channel event */
+       __raw_writel(1 << cfg->chnum, base + EDMA3_QEESR);
+}
+
+/**
+ * edma3_set_dest - set initial DMA destination address in parameter RAM slot
+ * @base: base address of edma
+ * @slot: parameter RAM slot being configured
+ * @dst: physical address of destination (memory, controller FIFO, etc)
+ * @addressMode: INCR, except in very rare cases
+ * @width: ignored unless @addressMode is FIFO, else specifies the
+ *     width to use when addressing the fifo (e.g. W8BIT, W32BIT)
+ *
+ * Note that the destination address is modified during the DMA transfer
+ * according to edma3_set_dest_index().
+ */
+void edma3_set_dest(u32 base, int slot, u32 dst, enum edma3_address_mode mode,
+                   enum edma3_fifo_width width)
+{
+       u32 opt;
+       struct edma3_slot_layout *rg;
+
+       rg = (struct edma3_slot_layout *)(base + EDMA3_SL_BASE(slot));
+
+       opt = __raw_readl(&rg->opt);
+       if (mode == FIFO)
+               opt = (opt & EDMA3_SLOPT_FIFO_WIDTH_MASK) |
+                      (EDMA3_SLOPT_DST_ADDR_CONST_MODE |
+                       EDMA3_SLOPT_FIFO_WIDTH_SET(width));
+       else
+               opt &= ~EDMA3_SLOPT_DST_ADDR_CONST_MODE;
+
+       __raw_writel(opt, &rg->opt);
+       __raw_writel(dst, &rg->dst);
+}
+
+/**
+ * edma3_set_dest_index - configure DMA destination address indexing
+ * @base: base address of edma
+ * @slot: parameter RAM slot being configured
+ * @bidx: byte offset between destination arrays in a frame
+ * @cidx: byte offset between destination frames in a block
+ *
+ * Offsets are specified to support either contiguous or discontiguous
+ * memory transfers, or repeated access to a hardware register, as needed.
+ * When accessing hardware registers, both offsets are normally zero.
+ */
+void edma3_set_dest_index(u32 base, unsigned slot, int bidx, int cidx)
+{
+       u32 src_dst_bidx;
+       u32 src_dst_cidx;
+       struct edma3_slot_layout *rg;
+
+       rg = (struct edma3_slot_layout *)(base + EDMA3_SL_BASE(slot));
+
+       src_dst_bidx = __raw_readl(&rg->src_dst_bidx);
+       src_dst_cidx = __raw_readl(&rg->src_dst_cidx);
+
+       __raw_writel((src_dst_bidx & 0x0000ffff) | (bidx << 16),
+                    &rg->src_dst_bidx);
+       __raw_writel((src_dst_cidx & 0x0000ffff) | (cidx << 16),
+                    &rg->src_dst_cidx);
+}
+
+/**
+ * edma3_set_dest_addr - set destination address for slot only
+ */
+void edma3_set_dest_addr(u32 base, int slot, u32 dst)
+{
+       struct edma3_slot_layout *rg;
+
+       rg = (struct edma3_slot_layout *)(base + EDMA3_SL_BASE(slot));
+       __raw_writel(dst, &rg->dst);
+}
+
+/**
+ * edma3_set_src - set initial DMA source address in parameter RAM slot
+ * @base: base address of edma
+ * @slot: parameter RAM slot being configured
+ * @src_port: physical address of source (memory, controller FIFO, etc)
+ * @mode: INCR, except in very rare cases
+ * @width: ignored unless @addressMode is FIFO, else specifies the
+ *     width to use when addressing the fifo (e.g. W8BIT, W32BIT)
+ *
+ * Note that the source address is modified during the DMA transfer
+ * according to edma3_set_src_index().
+ */
+void edma3_set_src(u32 base, int slot, u32 src, enum edma3_address_mode mode,
+                  enum edma3_fifo_width width)
+{
+       u32 opt;
+       struct edma3_slot_layout *rg;
+
+       rg = (struct edma3_slot_layout *)(base + EDMA3_SL_BASE(slot));
+
+       opt = __raw_readl(&rg->opt);
+       if (mode == FIFO)
+               opt = (opt & EDMA3_SLOPT_FIFO_WIDTH_MASK) |
+                      (EDMA3_SLOPT_DST_ADDR_CONST_MODE |
+                       EDMA3_SLOPT_FIFO_WIDTH_SET(width));
+       else
+               opt &= ~EDMA3_SLOPT_DST_ADDR_CONST_MODE;
+
+       __raw_writel(opt, &rg->opt);
+       __raw_writel(src, &rg->src);
+}
+
+/**
+ * edma3_set_src_index - configure DMA source address indexing
+ * @base: base address of edma
+ * @slot: parameter RAM slot being configured
+ * @bidx: byte offset between source arrays in a frame
+ * @cidx: byte offset between source frames in a block
+ *
+ * Offsets are specified to support either contiguous or discontiguous
+ * memory transfers, or repeated access to a hardware register, as needed.
+ * When accessing hardware registers, both offsets are normally zero.
+ */
+void edma3_set_src_index(u32 base, unsigned slot, int bidx, int cidx)
+{
+       u32 src_dst_bidx;
+       u32 src_dst_cidx;
+       struct edma3_slot_layout *rg;
+
+       rg = (struct edma3_slot_layout *)(base + EDMA3_SL_BASE(slot));
+
+       src_dst_bidx = __raw_readl(&rg->src_dst_bidx);
+       src_dst_cidx = __raw_readl(&rg->src_dst_cidx);
+
+       __raw_writel((src_dst_bidx & 0xffff0000) | bidx,
+                    &rg->src_dst_bidx);
+       __raw_writel((src_dst_cidx & 0xffff0000) | cidx,
+                    &rg->src_dst_cidx);
+}
+
+/**
+ * edma3_set_src_addr - set source address for slot only
+ */
+void edma3_set_src_addr(u32 base, int slot, u32 src)
+{
+       struct edma3_slot_layout *rg;
+
+       rg = (struct edma3_slot_layout *)(base + EDMA3_SL_BASE(slot));
+       __raw_writel(src, &rg->src);
+}
+
+/**
+ * edma3_set_transfer_params - configure DMA transfer parameters
+ * @base: base address of edma
+ * @slot: parameter RAM slot being configured
+ * @acnt: how many bytes per array (at least one)
+ * @bcnt: how many arrays per frame (at least one)
+ * @ccnt: how many frames per block (at least one)
+ * @bcnt_rld: used only for A-Synchronized transfers; this specifies
+ *     the value to reload into bcnt when it decrements to zero
+ * @sync_mode: ASYNC or ABSYNC
+ *
+ * See the EDMA3 documentation to understand how to configure and link
+ * transfers using the fields in PaRAM slots.  If you are not doing it
+ * all at once with edma3_write_slot(), you will use this routine
+ * plus two calls each for source and destination, setting the initial
+ * address and saying how to index that address.
+ *
+ * An example of an A-Synchronized transfer is a serial link using a
+ * single word shift register.  In that case, @acnt would be equal to
+ * that word size; the serial controller issues a DMA synchronization
+ * event to transfer each word, and memory access by the DMA transfer
+ * controller will be word-at-a-time.
+ *
+ * An example of an AB-Synchronized transfer is a device using a FIFO.
+ * In that case, @acnt equals the FIFO width and @bcnt equals its depth.
+ * The controller with the FIFO issues DMA synchronization events when
+ * the FIFO threshold is reached, and the DMA transfer controller will
+ * transfer one frame to (or from) the FIFO.  It will probably use
+ * efficient burst modes to access memory.
+ */
+void edma3_set_transfer_params(u32 base, int slot, int acnt,
+                              int bcnt, int ccnt, u16 bcnt_rld,
+                              enum edma3_sync_dimension sync_mode)
+{
+       u32 opt;
+       u32 link_bcntrld;
+       struct edma3_slot_layout *rg;
+
+       rg = (struct edma3_slot_layout *)(base + EDMA3_SL_BASE(slot));
+
+       link_bcntrld = __raw_readl(&rg->link_bcntrld);
+
+       __raw_writel((bcnt_rld << 16) | (0x0000ffff & link_bcntrld),
+                    &rg->link_bcntrld);
+
+       opt = __raw_readl(&rg->opt);
+       if (sync_mode == ASYNC)
+               __raw_writel(opt & ~EDMA3_SLOPT_AB_SYNC, &rg->opt);
+       else
+               __raw_writel(opt | EDMA3_SLOPT_AB_SYNC, &rg->opt);
+
+       /* Set the acount, bcount, ccount registers */
+       __raw_writel((bcnt << 16) | (acnt & 0xffff), &rg->a_b_cnt);
+       __raw_writel(0xffff & ccnt, &rg->ccnt);
+}
+
+/**
+ * edma3_write_slot - write parameter RAM data for slot
+ * @base: base address of edma
+ * @slot: number of parameter RAM slot being modified
+ * @param: data to be written into parameter RAM slot
+ *
+ * Use this to assign all parameters of a transfer at once.  This
+ * allows more efficient setup of transfers than issuing multiple
+ * calls to set up those parameters in small pieces, and provides
+ * complete control over all transfer options.
+ */
+void edma3_write_slot(u32 base, int slot, struct edma3_slot_layout *param)
+{
+       int i;
+       u32 *p = (u32 *)param;
+       u32 *addr = (u32 *)(base + EDMA3_SL_BASE(slot));
+
+       for (i = 0; i < sizeof(struct edma3_slot_layout)/4; i += 4)
+               __raw_writel(*p++, addr++);
+}
+
+/**
+ * edma3_read_slot - read parameter RAM data from slot
+ * @base: base address of edma
+ * @slot: number of parameter RAM slot being copied
+ * @param: where to store copy of parameter RAM data
+ *
+ * Use this to read data from a parameter RAM slot, perhaps to
+ * save them as a template for later reuse.
+ */
+void edma3_read_slot(u32 base, int slot, struct edma3_slot_layout *param)
+{
+       int i;
+       u32 *p = (u32 *)param;
+       u32 *addr = (u32 *)(base + EDMA3_SL_BASE(slot));
+
+       for (i = 0; i < sizeof(struct edma3_slot_layout)/4; i += 4)
+               *p++ = __raw_readl(addr++);
+}
+
+void edma3_slot_configure(u32 base, int slot, struct edma3_slot_config *cfg)
+{
+       struct edma3_slot_layout *rg;
+
+       rg = (struct edma3_slot_layout *)(base + EDMA3_SL_BASE(slot));
+
+       __raw_writel(cfg->opt, &rg->opt);
+       __raw_writel(cfg->src, &rg->src);
+       __raw_writel((cfg->bcnt << 16) | (cfg->acnt & 0xffff), &rg->a_b_cnt);
+       __raw_writel(cfg->dst, &rg->dst);
+       __raw_writel((cfg->dst_bidx << 16) |
+                    (cfg->src_bidx & 0xffff), &rg->src_dst_bidx);
+       __raw_writel((cfg->bcntrld << 16) |
+                    (cfg->link & 0xffff), &rg->link_bcntrld);
+       __raw_writel((cfg->dst_cidx << 16) |
+                    (cfg->src_cidx & 0xffff), &rg->src_dst_cidx);
+       __raw_writel(0xffff & cfg->ccnt, &rg->ccnt);
+}
+
+/**
+ * edma3_check_for_transfer - check if transfer coplete by checking
+ * interrupt pending bit. Clear interrupt pending bit if complete.
+ * @base: base address of edma
+ * @cfg: pinter to struct edma3_channel_config which was passed
+ * to qedma3_start when you started qdma channel
+ *
+ * Return 0 if complete, 1 if not.
+ */
+int edma3_check_for_transfer(u32 base, struct edma3_channel_config *cfg)
+{
+       u32 inum;
+       u32 ipr_base;
+       u32 icr_base;
+
+       if (cfg->complete_code < 32) {
+               ipr_base = base + EDMA3_IPR;
+               icr_base = base + EDMA3_ICR;
+               inum = 1 << cfg->complete_code;
+       } else {
+               ipr_base = base + EDMA3_IPRH;
+               icr_base = base + EDMA3_ICRH;
+               inum = 1 << (cfg->complete_code - 32);
+       }
+
+       /* check complete interrupt */
+       if (!(__raw_readl(ipr_base) & inum))
+               return 1;
+
+       /* clean up the pending int bit */
+       __raw_writel(inum, icr_base);
+
+       return 0;
+}
+
+/**
+ * qedma3_stop - stops dma on the channel passed
+ * @base: base address of edma
+ * @cfg: pinter to struct edma3_channel_config which was passed
+ * to qedma3_start when you started qdma channel
+ */
+void qedma3_stop(u32 base, struct edma3_channel_config *cfg)
+{
+       /* Disable qdma channel event */
+       __raw_writel(1 << cfg->chnum, base + EDMA3_QEECR);
+
+       /* clean up the interrupt indication */
+       if (cfg->complete_code < 32)
+               __raw_writel(1 << cfg->complete_code, base + EDMA3_ICR);
+       else
+               __raw_writel(1 << cfg->complete_code, base + EDMA3_ICRH);
+
+       /* Clear missed event if set*/
+       __raw_writel(1 << cfg->chnum, base + EDMA3_QSECR);
+       __raw_writel(1 << cfg->chnum, base + EDMA3_QEMCR);
+
+       /* Clear the channel map */
+       __raw_writel(0, base + EDMA3_QCHMAP(cfg->chnum));
+}
index d22b722bc53de033f162171eee3da22b766a1db7..c8681d02234b3b7d692d57c416328d83ce72790e 100644 (file)
 #include <command.h>
 
 #include <net.h>
+#include <phy.h>
+#include <errno.h>
 #include <miiphy.h>
 #include <malloc.h>
-#include <asm/arch/emac_defs.h>
-#include <asm/arch/psc_defs.h>
-#include <asm/arch/keystone_nav.h>
-
-unsigned int emac_dbg;
+#include <asm/ti-common/keystone_nav.h>
+#include <asm/ti-common/keystone_net.h>
+#include <asm/ti-common/keystone_serdes.h>
 
 unsigned int emac_open;
+static struct mii_dev *mdio_bus;
 static unsigned int sys_has_mdio = 1;
 
 #ifdef KEYSTONE2_EMAC_GIG_ENABLE
@@ -30,6 +31,7 @@ static unsigned int sys_has_mdio = 1;
 #define RX_BUFF_NUMS   24
 #define RX_BUFF_LEN    1520
 #define MAX_SIZE_STREAM_BUFFER RX_BUFF_LEN
+#define SGMII_ANEG_TIMEOUT             4000
 
 static u8 rx_buffs[RX_BUFF_NUMS * RX_BUFF_LEN] __aligned(16);
 
@@ -40,15 +42,7 @@ struct rx_buff_desc net_rx_buffs = {
        .rx_flow        = 22,
 };
 
-static void keystone2_eth_mdio_enable(void);
-
-static int gen_get_link_speed(int phy_addr);
-
-/* EMAC Addresses */
-static volatile struct emac_regs       *adap_emac =
-       (struct emac_regs *)EMAC_EMACSL_BASE_ADDR;
-static volatile struct mdio_regs       *adap_mdio =
-       (struct mdio_regs *)EMAC_MDIO_BASE_ADDR;
+static void keystone2_net_serdes_setup(void);
 
 int keystone2_eth_read_mac_addr(struct eth_device *dev)
 {
@@ -74,64 +68,67 @@ int keystone2_eth_read_mac_addr(struct eth_device *dev)
        return 0;
 }
 
-static void keystone2_eth_mdio_enable(void)
+/* MDIO */
+
+static int keystone2_mdio_reset(struct mii_dev *bus)
 {
-       u_int32_t       clkdiv;
+       u_int32_t clkdiv;
+       struct mdio_regs *adap_mdio = bus->priv;
 
        clkdiv = (EMAC_MDIO_BUS_FREQ / EMAC_MDIO_CLOCK_FREQ) - 1;
 
-       writel((clkdiv & 0xffff) |
-              MDIO_CONTROL_ENABLE |
-              MDIO_CONTROL_FAULT |
-              MDIO_CONTROL_FAULT_ENABLE,
+       writel((clkdiv & 0xffff) | MDIO_CONTROL_ENABLE |
+              MDIO_CONTROL_FAULT | MDIO_CONTROL_FAULT_ENABLE,
               &adap_mdio->control);
 
        while (readl(&adap_mdio->control) & MDIO_CONTROL_IDLE)
                ;
+
+       return 0;
 }
 
-/* Read a PHY register via MDIO inteface. Returns 1 on success, 0 otherwise */
-int keystone2_eth_phy_read(u_int8_t phy_addr, u_int8_t reg_num, u_int16_t *data)
+/**
+ * keystone2_mdio_read - read a PHY register via MDIO interface.
+ * Blocks until operation is complete.
+ */
+static int keystone2_mdio_read(struct mii_dev *bus,
+                              int addr, int devad, int reg)
 {
-       int     tmp;
+       int tmp;
+       struct mdio_regs *adap_mdio = bus->priv;
 
        while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
                ;
 
-       writel(MDIO_USERACCESS0_GO |
-              MDIO_USERACCESS0_WRITE_READ |
-              ((reg_num & 0x1f) << 21) |
-              ((phy_addr & 0x1f) << 16),
+       writel(MDIO_USERACCESS0_GO | MDIO_USERACCESS0_WRITE_READ |
+              ((reg & 0x1f) << 21) | ((addr & 0x1f) << 16),
               &adap_mdio->useraccess0);
 
        /* Wait for command to complete */
        while ((tmp = readl(&adap_mdio->useraccess0)) & MDIO_USERACCESS0_GO)
                ;
 
-       if (tmp & MDIO_USERACCESS0_ACK) {
-               *data = tmp & 0xffff;
-               return 0;
-       }
+       if (tmp & MDIO_USERACCESS0_ACK)
+               return tmp & 0xffff;
 
-       *data = -1;
        return -1;
 }
 
-/*
- * Write to a PHY register via MDIO inteface.
+/**
+ * keystone2_mdio_write - write to a PHY register via MDIO interface.
  * Blocks until operation is complete.
  */
-int keystone2_eth_phy_write(u_int8_t phy_addr, u_int8_t reg_num, u_int16_t data)
+static int keystone2_mdio_write(struct mii_dev *bus,
+                               int addr, int devad, int reg, u16 val)
 {
+       struct mdio_regs *adap_mdio = bus->priv;
+
        while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
                ;
 
-       writel(MDIO_USERACCESS0_GO |
-              MDIO_USERACCESS0_WRITE_WRITE |
-              ((reg_num & 0x1f) << 21) |
-              ((phy_addr & 0x1f) << 16) |
-              (data & 0xffff),
-              &adap_mdio->useraccess0);
+       writel(MDIO_USERACCESS0_GO | MDIO_USERACCESS0_WRITE_WRITE |
+              ((reg & 0x1f) << 21) | ((addr & 0x1f) << 16) |
+              (val & 0xffff), &adap_mdio->useraccess0);
 
        /* Wait for command to complete */
        while (readl(&adap_mdio->useraccess0) & MDIO_USERACCESS0_GO)
@@ -140,19 +137,6 @@ int keystone2_eth_phy_write(u_int8_t phy_addr, u_int8_t reg_num, u_int16_t data)
        return 0;
 }
 
-/* PHY functions for a generic PHY */
-static int gen_get_link_speed(int phy_addr)
-{
-       u_int16_t       tmp;
-
-       if ((!keystone2_eth_phy_read(phy_addr, MII_STATUS_REG, &tmp)) &&
-           (tmp & 0x04)) {
-               return 0;
-       }
-
-       return -1;
-}
-
 static void  __attribute__((unused))
        keystone2_eth_gigabit_enable(struct eth_device *dev)
 {
@@ -160,8 +144,10 @@ static void  __attribute__((unused))
        struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
 
        if (sys_has_mdio) {
-               if (keystone2_eth_phy_read(eth_priv->phy_addr, 0, &data) ||
-                   !(data & (1 << 6))) /* speed selection MSB */
+               data = keystone2_mdio_read(mdio_bus, eth_priv->phy_addr,
+                                          MDIO_DEVAD_NONE, 0);
+               /* speed selection MSB */
+               if (!(data & (1 << 6)))
                        return;
        }
 
@@ -169,10 +155,10 @@ static void  __attribute__((unused))
         * Check if link detected is giga-bit
         * If Gigabit mode detected, enable gigbit in MAC
         */
-       writel(readl(&(adap_emac[eth_priv->slave_port - 1].maccontrol)) |
+       writel(readl(DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) +
+                    CPGMACSL_REG_CTL) |
               EMAC_MACCONTROL_GIGFORCE | EMAC_MACCONTROL_GIGABIT_ENABLE,
-              &(adap_emac[eth_priv->slave_port - 1].maccontrol))
-               ;
+              DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) + CPGMACSL_REG_CTL);
 }
 
 int keystone_sgmii_link_status(int port)
@@ -181,38 +167,11 @@ int keystone_sgmii_link_status(int port)
 
        status = __raw_readl(SGMII_STATUS_REG(port));
 
-       return status & SGMII_REG_STATUS_LINK;
+       return (status & SGMII_REG_STATUS_LOCK) &&
+              (status & SGMII_REG_STATUS_LINK);
 }
 
-
-int keystone_get_link_status(struct eth_device *dev)
-{
-       struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
-       int sgmii_link;
-       int link_state = 0;
-#if CONFIG_GET_LINK_STATUS_ATTEMPTS > 1
-       int j;
-
-       for (j = 0; (j < CONFIG_GET_LINK_STATUS_ATTEMPTS) && (link_state == 0);
-            j++) {
-#endif
-               sgmii_link =
-                       keystone_sgmii_link_status(eth_priv->slave_port - 1);
-
-               if (sgmii_link) {
-                       link_state = 1;
-
-                       if (eth_priv->sgmii_link_type == SGMII_LINK_MAC_PHY)
-                               if (gen_get_link_speed(eth_priv->phy_addr))
-                                       link_state = 0;
-               }
-#if CONFIG_GET_LINK_STATUS_ATTEMPTS > 1
-       }
-#endif
-       return link_state;
-}
-
-int keystone_sgmii_config(int port, int interface)
+int keystone_sgmii_config(struct phy_device *phy_dev, int port, int interface)
 {
        unsigned int i, status, mask;
        unsigned int mr_adv_ability, control;
@@ -273,11 +232,35 @@ int keystone_sgmii_config(int port, int interface)
        if (control & SGMII_REG_CONTROL_AUTONEG)
                mask |= SGMII_REG_STATUS_AUTONEG;
 
-       for (i = 0; i < 1000; i++) {
+       status = __raw_readl(SGMII_STATUS_REG(port));
+       if ((status & mask) == mask)
+               return 0;
+
+       printf("\n%s Waiting for SGMII auto negotiation to complete",
+              phy_dev->dev->name);
+       while ((status & mask) != mask) {
+               /*
+                * Timeout reached ?
+                */
+               if (i > SGMII_ANEG_TIMEOUT) {
+                       puts(" TIMEOUT !\n");
+                       phy_dev->link = 0;
+                       return 0;
+               }
+
+               if (ctrlc()) {
+                       puts("user interrupt!\n");
+                       phy_dev->link = 0;
+                       return -EINTR;
+               }
+
+               if ((i++ % 500) == 0)
+                       printf(".");
+
+               udelay(1000);   /* 1 ms */
                status = __raw_readl(SGMII_STATUS_REG(port));
-               if ((status & mask) == mask)
-                       break;
        }
+       puts(" done\n");
 
        return 0;
 }
@@ -332,6 +315,11 @@ int mac_sl_config(u_int16_t port, struct mac_sl_cfg *cfg)
        writel(cfg->max_rx_len, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_MAXLEN);
        writel(cfg->ctl, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_CTL);
 
+#ifdef CONFIG_K2E_EVM
+       /* Map RX packet flow priority to 0 */
+       writel(0, DEVICE_EMACSL_BASE(port) + CPGMACSL_REG_RX_PRI_MAP);
+#endif
+
        return ret;
 }
 
@@ -393,15 +381,15 @@ int32_t cpmac_drv_send(u32 *buffer, int num_bytes, int slave_port_num)
        if (num_bytes < EMAC_MIN_ETHERNET_PKT_SIZE)
                num_bytes = EMAC_MIN_ETHERNET_PKT_SIZE;
 
-       return netcp_send(buffer, num_bytes, (slave_port_num) << 16);
+       return ksnav_send(&netcp_pktdma, buffer,
+                         num_bytes, (slave_port_num) << 16);
 }
 
 /* Eth device open */
 static int keystone2_eth_open(struct eth_device *dev, bd_t *bis)
 {
-       u_int32_t clkdiv;
-       int link;
        struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
+       struct phy_device *phy_dev = eth_priv->phy_dev;
 
        debug("+ emac_open\n");
 
@@ -410,15 +398,9 @@ static int keystone2_eth_open(struct eth_device *dev, bd_t *bis)
        sys_has_mdio =
                (eth_priv->sgmii_link_type == SGMII_LINK_MAC_PHY) ? 1 : 0;
 
-       psc_enable_module(KS2_LPSC_PA);
-       psc_enable_module(KS2_LPSC_CPGMAC);
-
-       sgmii_serdes_setup_156p25mhz();
-
-       if (sys_has_mdio)
-               keystone2_eth_mdio_enable();
+       keystone2_net_serdes_setup();
 
-       keystone_sgmii_config(eth_priv->slave_port - 1,
+       keystone_sgmii_config(phy_dev, eth_priv->slave_port - 1,
                              eth_priv->sgmii_link_type);
 
        udelay(10000);
@@ -431,7 +413,7 @@ static int keystone2_eth_open(struct eth_device *dev, bd_t *bis)
                printf("ERROR: qm_init()\n");
                return -1;
        }
-       if (netcp_init(&net_rx_buffs)) {
+       if (ksnav_init(&netcp_pktdma, &net_rx_buffs)) {
                qm_close();
                printf("ERROR: netcp_init()\n");
                return -1;
@@ -445,18 +427,11 @@ static int keystone2_eth_open(struct eth_device *dev, bd_t *bis)
        hw_config_streaming_switch();
 
        if (sys_has_mdio) {
-               /* Init MDIO & get link state */
-               clkdiv = (EMAC_MDIO_BUS_FREQ / EMAC_MDIO_CLOCK_FREQ) - 1;
-               writel((clkdiv & 0xff) | MDIO_CONTROL_ENABLE |
-                      MDIO_CONTROL_FAULT, &adap_mdio->control)
-                       ;
-
-               /* We need to wait for MDIO to start */
-               udelay(1000);
-
-               link = keystone_get_link_status(dev);
-               if (link == 0) {
-                       netcp_close();
+               keystone2_mdio_reset(mdio_bus);
+
+               phy_startup(phy_dev);
+               if (phy_dev->link == 0) {
+                       ksnav_close(&netcp_pktdma);
                        qm_close();
                        return -1;
                }
@@ -476,6 +451,9 @@ static int keystone2_eth_open(struct eth_device *dev, bd_t *bis)
 /* Eth device close */
 void keystone2_eth_close(struct eth_device *dev)
 {
+       struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
+       struct phy_device *phy_dev = eth_priv->phy_dev;
+
        debug("+ emac_close\n");
 
        if (!emac_open)
@@ -483,16 +461,15 @@ void keystone2_eth_close(struct eth_device *dev)
 
        ethss_stop();
 
-       netcp_close();
+       ksnav_close(&netcp_pktdma);
        qm_close();
+       phy_shutdown(phy_dev);
 
        emac_open = 0;
 
        debug("- emac_close\n");
 }
 
-static int tx_send_loop;
-
 /*
  * This function sends a single packet on the network and returns
  * positive number (number of bytes transmitted) or negative for error
@@ -502,22 +479,15 @@ static int keystone2_eth_send_packet(struct eth_device *dev,
 {
        int ret_status = -1;
        struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
+       struct phy_device *phy_dev = eth_priv->phy_dev;
 
-       tx_send_loop = 0;
-
-       if (keystone_get_link_status(dev) == 0)
+       genphy_update_link(phy_dev);
+       if (phy_dev->link == 0)
                return -1;
 
-       emac_gigabit_enable(dev);
-
        if (cpmac_drv_send((u32 *)packet, length, eth_priv->slave_port) != 0)
                return ret_status;
 
-       if (keystone_get_link_status(dev) == 0)
-               return -1;
-
-       emac_gigabit_enable(dev);
-
        return length;
 }
 
@@ -530,13 +500,13 @@ static int keystone2_eth_rcv_packet(struct eth_device *dev)
        int  pkt_size;
        u32  *pkt;
 
-       hd = netcp_recv(&pkt, &pkt_size);
+       hd = ksnav_recv(&netcp_pktdma, &pkt, &pkt_size);
        if (hd == NULL)
                return 0;
 
        NetReceive((uchar *)pkt, pkt_size);
 
-       netcp_release_rxhd(hd);
+       ksnav_release_rxhd(&netcp_pktdma, hd);
 
        return pkt_size;
 }
@@ -546,7 +516,9 @@ static int keystone2_eth_rcv_packet(struct eth_device *dev)
  */
 int keystone2_emac_initialize(struct eth_priv_t *eth_priv)
 {
+       int res;
        struct eth_device *dev;
+       struct phy_device *phy_dev;
 
        dev = malloc(sizeof(struct eth_device));
        if (dev == NULL)
@@ -567,145 +539,55 @@ int keystone2_emac_initialize(struct eth_priv_t *eth_priv)
 
        eth_register(dev);
 
-       return 0;
-}
-
-void sgmii_serdes_setup_156p25mhz(void)
-{
-       unsigned int cnt;
-
-       /*
-        * configure Serializer/Deserializer (SerDes) hardware. SerDes IP
-        * hardware vendor published only register addresses and their values
-        * to be used for configuring SerDes. So had to use hardcoded values
-        * below.
-        */
-       clrsetbits_le32(0x0232a000, 0xffff0000, 0x00800000);
-       clrsetbits_le32(0x0232a014, 0x0000ffff, 0x00008282);
-       clrsetbits_le32(0x0232a060, 0x00ffffff, 0x00142438);
-       clrsetbits_le32(0x0232a064, 0x00ffff00, 0x00c3c700);
-       clrsetbits_le32(0x0232a078, 0x0000ff00, 0x0000c000);
-
-       clrsetbits_le32(0x0232a204, 0xff0000ff, 0x38000080);
-       clrsetbits_le32(0x0232a208, 0x000000ff, 0x00000000);
-       clrsetbits_le32(0x0232a20c, 0xff000000, 0x02000000);
-       clrsetbits_le32(0x0232a210, 0xff000000, 0x1b000000);
-       clrsetbits_le32(0x0232a214, 0x0000ffff, 0x00006fb8);
-       clrsetbits_le32(0x0232a218, 0xffff00ff, 0x758000e4);
-       clrsetbits_le32(0x0232a2ac, 0x0000ff00, 0x00004400);
-       clrsetbits_le32(0x0232a22c, 0x00ffff00, 0x00200800);
-       clrsetbits_le32(0x0232a280, 0x00ff00ff, 0x00820082);
-       clrsetbits_le32(0x0232a284, 0xffffffff, 0x1d0f0385);
-
-       clrsetbits_le32(0x0232a404, 0xff0000ff, 0x38000080);
-       clrsetbits_le32(0x0232a408, 0x000000ff, 0x00000000);
-       clrsetbits_le32(0x0232a40c, 0xff000000, 0x02000000);
-       clrsetbits_le32(0x0232a410, 0xff000000, 0x1b000000);
-       clrsetbits_le32(0x0232a414, 0x0000ffff, 0x00006fb8);
-       clrsetbits_le32(0x0232a418, 0xffff00ff, 0x758000e4);
-       clrsetbits_le32(0x0232a4ac, 0x0000ff00, 0x00004400);
-       clrsetbits_le32(0x0232a42c, 0x00ffff00, 0x00200800);
-       clrsetbits_le32(0x0232a480, 0x00ff00ff, 0x00820082);
-       clrsetbits_le32(0x0232a484, 0xffffffff, 0x1d0f0385);
-
-       clrsetbits_le32(0x0232a604, 0xff0000ff, 0x38000080);
-       clrsetbits_le32(0x0232a608, 0x000000ff, 0x00000000);
-       clrsetbits_le32(0x0232a60c, 0xff000000, 0x02000000);
-       clrsetbits_le32(0x0232a610, 0xff000000, 0x1b000000);
-       clrsetbits_le32(0x0232a614, 0x0000ffff, 0x00006fb8);
-       clrsetbits_le32(0x0232a618, 0xffff00ff, 0x758000e4);
-       clrsetbits_le32(0x0232a6ac, 0x0000ff00, 0x00004400);
-       clrsetbits_le32(0x0232a62c, 0x00ffff00, 0x00200800);
-       clrsetbits_le32(0x0232a680, 0x00ff00ff, 0x00820082);
-       clrsetbits_le32(0x0232a684, 0xffffffff, 0x1d0f0385);
-
-       clrsetbits_le32(0x0232a804, 0xff0000ff, 0x38000080);
-       clrsetbits_le32(0x0232a808, 0x000000ff, 0x00000000);
-       clrsetbits_le32(0x0232a80c, 0xff000000, 0x02000000);
-       clrsetbits_le32(0x0232a810, 0xff000000, 0x1b000000);
-       clrsetbits_le32(0x0232a814, 0x0000ffff, 0x00006fb8);
-       clrsetbits_le32(0x0232a818, 0xffff00ff, 0x758000e4);
-       clrsetbits_le32(0x0232a8ac, 0x0000ff00, 0x00004400);
-       clrsetbits_le32(0x0232a82c, 0x00ffff00, 0x00200800);
-       clrsetbits_le32(0x0232a880, 0x00ff00ff, 0x00820082);
-       clrsetbits_le32(0x0232a884, 0xffffffff, 0x1d0f0385);
-
-       clrsetbits_le32(0x0232aa00, 0x0000ff00, 0x00000800);
-       clrsetbits_le32(0x0232aa08, 0xffff0000, 0x38a20000);
-       clrsetbits_le32(0x0232aa30, 0x00ffff00, 0x008a8a00);
-       clrsetbits_le32(0x0232aa84, 0x0000ff00, 0x00000600);
-       clrsetbits_le32(0x0232aa94, 0xff000000, 0x10000000);
-       clrsetbits_le32(0x0232aaa0, 0xff000000, 0x81000000);
-       clrsetbits_le32(0x0232aabc, 0xff000000, 0xff000000);
-       clrsetbits_le32(0x0232aac0, 0x000000ff, 0x0000008b);
-       clrsetbits_le32(0x0232ab08, 0xffff0000, 0x583f0000);
-       clrsetbits_le32(0x0232ab0c, 0x000000ff, 0x0000004e);
-       clrsetbits_le32(0x0232a000, 0x000000ff, 0x00000003);
-       clrsetbits_le32(0x0232aa00, 0x000000ff, 0x0000005f);
-
-       clrsetbits_le32(0x0232aa48, 0x00ffff00, 0x00fd8c00);
-       clrsetbits_le32(0x0232aa54, 0x00ffffff, 0x002fec72);
-       clrsetbits_le32(0x0232aa58, 0xffffff00, 0x00f92100);
-       clrsetbits_le32(0x0232aa5c, 0xffffffff, 0x00040060);
-       clrsetbits_le32(0x0232aa60, 0xffffffff, 0x00008000);
-       clrsetbits_le32(0x0232aa64, 0xffffffff, 0x0c581220);
-       clrsetbits_le32(0x0232aa68, 0xffffffff, 0xe13b0602);
-       clrsetbits_le32(0x0232aa6c, 0xffffffff, 0xb8074cc1);
-       clrsetbits_le32(0x0232aa70, 0xffffffff, 0x3f02e989);
-       clrsetbits_le32(0x0232aa74, 0x000000ff, 0x00000001);
-       clrsetbits_le32(0x0232ab20, 0x00ff0000, 0x00370000);
-       clrsetbits_le32(0x0232ab1c, 0xff000000, 0x37000000);
-       clrsetbits_le32(0x0232ab20, 0x000000ff, 0x0000005d);
-
-       /*Bring SerDes out of Reset if SerDes is Shutdown & is in Reset Mode*/
-       clrbits_le32(0x0232a010, 1 << 28);
-
-       /* Enable TX and RX via the LANExCTL_STS 0x0000 + x*4 */
-       clrbits_le32(0x0232a228, 1 << 29);
-       writel(0xF800F8C0, 0x0232bfe0);
-       clrbits_le32(0x0232a428, 1 << 29);
-       writel(0xF800F8C0, 0x0232bfe4);
-       clrbits_le32(0x0232a628, 1 << 29);
-       writel(0xF800F8C0, 0x0232bfe8);
-       clrbits_le32(0x0232a828, 1 << 29);
-       writel(0xF800F8C0, 0x0232bfec);
-
-       /*Enable pll via the pll_ctrl 0x0014*/
-       writel(0xe0000000, 0x0232bff4)
-               ;
-
-       /*Waiting for SGMII Serdes PLL lock.*/
-       for (cnt = 10000; cnt > 0 && ((readl(0x02090114) & 0x10) == 0); cnt--)
-               ;
-
-       for (cnt = 10000; cnt > 0 && ((readl(0x02090214) & 0x10) == 0); cnt--)
-               ;
-
-       for (cnt = 10000; cnt > 0 && ((readl(0x02090414) & 0x10) == 0); cnt--)
-               ;
+       /* Register MDIO bus if it's not registered yet */
+       if (!mdio_bus) {
+               mdio_bus        = mdio_alloc();
+               mdio_bus->read  = keystone2_mdio_read;
+               mdio_bus->write = keystone2_mdio_write;
+               mdio_bus->reset = keystone2_mdio_reset;
+               mdio_bus->priv  = (void *)EMAC_MDIO_BASE_ADDR;
+               sprintf(mdio_bus->name, "ethernet-mdio");
+
+               res = mdio_register(mdio_bus);
+               if (res)
+                       return res;
+       }
 
-       for (cnt = 10000; cnt > 0 && ((readl(0x02090514) & 0x10) == 0); cnt--)
-               ;
+       /* Create phy device and bind it with driver */
+#ifdef CONFIG_KSNET_MDIO_PHY_CONFIG_ENABLE
+       phy_dev = phy_connect(mdio_bus, eth_priv->phy_addr,
+                             dev, PHY_INTERFACE_MODE_SGMII);
+       phy_config(phy_dev);
+#else
+       phy_dev = phy_find_by_mask(mdio_bus, 1 << eth_priv->phy_addr,
+                                  PHY_INTERFACE_MODE_SGMII);
+       phy_dev->dev = dev;
+#endif
+       eth_priv->phy_dev = phy_dev;
 
-       udelay(45000);
+       return 0;
 }
 
-void sgmii_serdes_shutdown(void)
+struct ks2_serdes ks2_serdes_sgmii_156p25mhz = {
+       .clk = SERDES_CLOCK_156P25M,
+       .rate = SERDES_RATE_5G,
+       .rate_mode = SERDES_QUARTER_RATE,
+       .intf = SERDES_PHY_SGMII,
+       .loopback = 0,
+};
+
+static void keystone2_net_serdes_setup(void)
 {
-       /*
-        * shutdown SerDes hardware. SerDes hardware vendor published only
-        * register addresses and their values. So had to use hardcoded
-        * values below.
-        */
-       clrbits_le32(0x0232bfe0, 3 << 29 | 3 << 13);
-       setbits_le32(0x02320228, 1 << 29);
-       clrbits_le32(0x0232bfe4, 3 << 29 | 3 << 13);
-       setbits_le32(0x02320428, 1 << 29);
-       clrbits_le32(0x0232bfe8, 3 << 29 | 3 << 13);
-       setbits_le32(0x02320628, 1 << 29);
-       clrbits_le32(0x0232bfec, 3 << 29 | 3 << 13);
-       setbits_le32(0x02320828, 1 << 29);
-
-       clrbits_le32(0x02320034, 3 << 29);
-       setbits_le32(0x02320010, 1 << 28);
+       ks2_serdes_init(CONFIG_KSNET_SERDES_SGMII_BASE,
+                       &ks2_serdes_sgmii_156p25mhz,
+                       CONFIG_KSNET_SERDES_LANES_PER_SGMII);
+
+#ifdef CONFIG_SOC_K2E
+       ks2_serdes_init(CONFIG_KSNET_SERDES_SGMII2_BASE,
+                       &ks2_serdes_sgmii_156p25mhz,
+                       CONFIG_KSNET_SERDES_LANES_PER_SGMII);
+#endif
+
+       /* wait till setup */
+       udelay(5000);
 }
index f1ace3c8421004d6ba0b7f2d61051a215c25372b..467c97224313328e2aa7e2f04edabc15def84792 100644 (file)
@@ -648,7 +648,7 @@ static struct phy_device *get_phy_device_by_mask(struct mii_dev *bus,
                if (phydev)
                        return phydev;
        }
-       printf("Phy not found\n");
+       printf("Phy %d not found\n", ffs(phy_mask) - 1);
        return phy_device_create(bus, ffs(phy_mask) - 1, 0xffffffff, interface);
 }
 
diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile
new file mode 100644 (file)
index 0000000..3d4baa5
--- /dev/null
@@ -0,0 +1,5 @@
+#
+# Makefile for the U-boot SOC specific device drivers.
+#
+
+obj-$(CONFIG_ARCH_KEYSTONE)    += keystone/
diff --git a/drivers/soc/keystone/Makefile b/drivers/soc/keystone/Makefile
new file mode 100644 (file)
index 0000000..c000eca
--- /dev/null
@@ -0,0 +1 @@
+obj-$(CONFIG_TI_KEYSTONE_SERDES) += keystone_serdes.o
diff --git a/drivers/soc/keystone/keystone_serdes.c b/drivers/soc/keystone/keystone_serdes.c
new file mode 100644 (file)
index 0000000..dd5eac9
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+ * TI serdes driver for keystone2.
+ *
+ * (C) Copyright 2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <errno.h>
+#include <common.h>
+#include <asm/ti-common/keystone_serdes.h>
+
+#define SERDES_CMU_REGS(x)             (0x0000 + (0x0c00 * (x)))
+#define SERDES_LANE_REGS(x)            (0x0200 + (0x200 * (x)))
+#define SERDES_COMLANE_REGS            0x0a00
+#define SERDES_WIZ_REGS                        0x1fc0
+
+#define SERDES_CMU_REG_000(x)          (SERDES_CMU_REGS(x) + 0x000)
+#define SERDES_CMU_REG_010(x)          (SERDES_CMU_REGS(x) + 0x010)
+#define SERDES_COMLANE_REG_000         (SERDES_COMLANE_REGS + 0x000)
+#define SERDES_LANE_REG_000(x)         (SERDES_LANE_REGS(x) + 0x000)
+#define SERDES_LANE_REG_028(x)         (SERDES_LANE_REGS(x) + 0x028)
+#define SERDES_LANE_CTL_STATUS_REG(x)  (SERDES_WIZ_REGS + 0x0020 + (4 * (x)))
+#define SERDES_PLL_CTL_REG             (SERDES_WIZ_REGS + 0x0034)
+
+#define SERDES_RESET                   BIT(28)
+#define SERDES_LANE_RESET              BIT(29)
+#define SERDES_LANE_LOOPBACK           BIT(30)
+#define SERDES_LANE_EN_VAL(x, y, z)    (x[y] | (z << 26) | (z << 10))
+
+#define SERDES_CMU_CFG_NUM             5
+#define SERDES_COMLANE_CFG_NUM         10
+#define SERDES_LANE_CFG_NUM            10
+
+struct serdes_cfg {
+       u32 ofs;
+       u32 val;
+       u32 mask;
+};
+
+struct cfg_entry {
+       enum ks2_serdes_clock clk;
+       enum ks2_serdes_rate rate;
+       struct serdes_cfg cmu[SERDES_CMU_CFG_NUM];
+       struct serdes_cfg comlane[SERDES_COMLANE_CFG_NUM];
+       struct serdes_cfg lane[SERDES_LANE_CFG_NUM];
+};
+
+/* SERDES PHY lane enable configuration value, indexed by PHY interface */
+static u32 serdes_cfg_lane_enable[] = {
+       0xf000f0c0,     /* SGMII */
+       0xf0e9f038,     /* PCSR */
+};
+
+/* SERDES PHY PLL enable configuration value, indexed by PHY interface  */
+static u32 serdes_cfg_pll_enable[] = {
+       0xe0000000,     /* SGMII */
+       0xee000000,     /* PCSR */
+};
+
+/**
+ * Array to hold all possible serdes configurations.
+ * Combination for 5 clock settings and 6 baud rates.
+ */
+static struct cfg_entry cfgs[] = {
+       {
+               .clk = SERDES_CLOCK_156P25M,
+               .rate = SERDES_RATE_5G,
+               .cmu = {
+                       {0x0000, 0x00800000, 0xffff0000},
+                       {0x0014, 0x00008282, 0x0000ffff},
+                       {0x0060, 0x00142438, 0x00ffffff},
+                       {0x0064, 0x00c3c700, 0x00ffff00},
+                       {0x0078, 0x0000c000, 0x0000ff00}
+               },
+               .comlane = {
+                       {0x0a00, 0x00000800, 0x0000ff00},
+                       {0x0a08, 0x38a20000, 0xffff0000},
+                       {0x0a30, 0x008a8a00, 0x00ffff00},
+                       {0x0a84, 0x00000600, 0x0000ff00},
+                       {0x0a94, 0x10000000, 0xff000000},
+                       {0x0aa0, 0x81000000, 0xff000000},
+                       {0x0abc, 0xff000000, 0xff000000},
+                       {0x0ac0, 0x0000008b, 0x000000ff},
+                       {0x0b08, 0x583f0000, 0xffff0000},
+                       {0x0b0c, 0x0000004e, 0x000000ff}
+               },
+               .lane = {
+                       {0x0004, 0x38000080, 0xff0000ff},
+                       {0x0008, 0x00000000, 0x000000ff},
+                       {0x000c, 0x02000000, 0xff000000},
+                       {0x0010, 0x1b000000, 0xff000000},
+                       {0x0014, 0x00006fb8, 0x0000ffff},
+                       {0x0018, 0x758000e4, 0xffff00ff},
+                       {0x00ac, 0x00004400, 0x0000ff00},
+                       {0x002c, 0x00100800, 0x00ffff00},
+                       {0x0080, 0x00820082, 0x00ff00ff},
+                       {0x0084, 0x1d0f0385, 0xffffffff}
+               },
+       },
+};
+
+static inline void ks2_serdes_rmw(u32 addr, u32 value, u32 mask)
+{
+       writel(((readl(addr) & (~mask)) | (value & mask)), addr);
+}
+
+static void ks2_serdes_cfg_setup(u32 base, struct serdes_cfg *cfg, u32 size)
+{
+       u32 i;
+
+       for (i = 0; i < size; i++)
+               ks2_serdes_rmw(base + cfg[i].ofs, cfg[i].val, cfg[i].mask);
+}
+
+static void ks2_serdes_lane_config(u32 base, struct serdes_cfg *cfg_lane,
+                                  u32 size, u32 lane)
+{
+       u32 i;
+
+       for (i = 0; i < size; i++)
+               ks2_serdes_rmw(base + cfg_lane[i].ofs + SERDES_LANE_REGS(lane),
+                              cfg_lane[i].val, cfg_lane[i].mask);
+}
+
+static int ks2_serdes_init_cfg(u32 base, struct cfg_entry *cfg, u32 num_lanes)
+{
+       u32 i;
+
+       ks2_serdes_cfg_setup(base, cfg->cmu, SERDES_CMU_CFG_NUM);
+       ks2_serdes_cfg_setup(base, cfg->comlane, SERDES_COMLANE_CFG_NUM);
+
+       for (i = 0; i < num_lanes; i++)
+               ks2_serdes_lane_config(base, cfg->lane, SERDES_LANE_CFG_NUM, i);
+
+       return 0;
+}
+
+static void ks2_serdes_cmu_comlane_enable(u32 base, struct ks2_serdes *serdes)
+{
+       /* Bring SerDes out of Reset */
+       ks2_serdes_rmw(base + SERDES_CMU_REG_010(0), 0x0, SERDES_RESET);
+       if (serdes->intf == SERDES_PHY_PCSR)
+               ks2_serdes_rmw(base + SERDES_CMU_REG_010(1), 0x0, SERDES_RESET);
+
+       /* Enable CMU and COMLANE */
+       ks2_serdes_rmw(base + SERDES_CMU_REG_000(0), 0x03, 0x000000ff);
+       if (serdes->intf == SERDES_PHY_PCSR)
+               ks2_serdes_rmw(base + SERDES_CMU_REG_000(1), 0x03, 0x000000ff);
+
+       ks2_serdes_rmw(base + SERDES_COMLANE_REG_000, 0x5f, 0x000000ff);
+}
+
+static void ks2_serdes_pll_enable(u32 base, struct ks2_serdes *serdes)
+{
+       writel(serdes_cfg_pll_enable[serdes->intf],
+              base + SERDES_PLL_CTL_REG);
+}
+
+static void ks2_serdes_lane_reset(u32 base, u32 reset, u32 lane)
+{
+       if (reset)
+               ks2_serdes_rmw(base + SERDES_LANE_REG_028(lane),
+                              0x1, SERDES_LANE_RESET);
+       else
+               ks2_serdes_rmw(base + SERDES_LANE_REG_028(lane),
+                              0x0, SERDES_LANE_RESET);
+}
+
+static void ks2_serdes_lane_enable(u32 base,
+                                  struct ks2_serdes *serdes, u32 lane)
+{
+       /* Bring lane out of reset */
+       ks2_serdes_lane_reset(base, 0, lane);
+
+       writel(SERDES_LANE_EN_VAL(serdes_cfg_lane_enable, serdes->intf,
+                                 serdes->rate_mode),
+              base + SERDES_LANE_CTL_STATUS_REG(lane));
+
+       /* Set NES bit if Loopback Enabled */
+       if (serdes->loopback)
+               ks2_serdes_rmw(base + SERDES_LANE_REG_000(lane),
+                              0x1, SERDES_LANE_LOOPBACK);
+}
+
+int ks2_serdes_init(u32 base, struct ks2_serdes *serdes, u32 num_lanes)
+{
+       int i;
+       int ret = 0;
+
+       for (i = 0; i < ARRAY_SIZE(cfgs); i++)
+               if (serdes->clk == cfgs[i].clk && serdes->rate == cfgs[i].rate)
+                       break;
+
+       if (i >= ARRAY_SIZE(cfgs)) {
+               puts("Cannot find keystone SerDes configuration");
+               return -EINVAL;
+       }
+
+       ks2_serdes_init_cfg(base, &cfgs[i], num_lanes);
+
+       ks2_serdes_cmu_comlane_enable(base, serdes);
+       for (i = 0; i < num_lanes; i++)
+               ks2_serdes_lane_enable(base, serdes, i);
+
+       ks2_serdes_pll_enable(base, serdes);
+
+       return ret;
+}
index 026f680d80d90e60591d04bb3b092058df371883..be102692d446450528886c998440ecefc8a32fbf 100644 (file)
@@ -12,6 +12,7 @@
 #include <asm/gpio.h>
 #include <asm/arch/imx-regs.h>
 #include <asm/arch/clock.h>
+#include <asm/imx-common/spi.h>
 
 #ifdef CONFIG_MX27
 /* i.MX27 has a completely wrong register layout and register definitions in the
index c9d2ed50cf498aa8119eec86b353af31fb8823ed..1c3592914dcf363c71de68f05a69cf5b21b5d845 100644 (file)
@@ -43,6 +43,7 @@ obj-$(CONFIG_USB_EHCI_ZYNQ) += ehci-zynq.o
 
 # xhci
 obj-$(CONFIG_USB_XHCI) += xhci.o xhci-mem.o xhci-ring.o
+obj-$(CONFIG_USB_XHCI_KEYSTONE) += xhci-keystone.o
 obj-$(CONFIG_USB_XHCI_EXYNOS) += xhci-exynos5.o
 obj-$(CONFIG_USB_XHCI_OMAP) += xhci-omap.o
 
diff --git a/drivers/usb/host/xhci-keystone.c b/drivers/usb/host/xhci-keystone.c
new file mode 100644 (file)
index 0000000..05d338f
--- /dev/null
@@ -0,0 +1,329 @@
+/*
+ * USB 3.0 DRD Controller
+ *
+ * (C) Copyright 2012-2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <common.h>
+#include <watchdog.h>
+#include <usb.h>
+#include <asm/arch/psc_defs.h>
+#include <asm/io.h>
+#include <linux/usb/dwc3.h>
+#include <asm/arch/xhci-keystone.h>
+#include <asm-generic/errno.h>
+#include <linux/list.h>
+#include "xhci.h"
+
+struct kdwc3_irq_regs {
+       u32 revision;   /* 0x000 */
+       u32 rsvd0[3];
+       u32 sysconfig;  /* 0x010 */
+       u32 rsvd1[1];
+       u32 irq_eoi;
+       u32 rsvd2[1];
+       struct {
+               u32 raw_status;
+               u32 status;
+               u32 enable_set;
+               u32 enable_clr;
+       } irqs[16];
+};
+
+struct keystone_xhci {
+       struct xhci_hccr *hcd;
+       struct dwc3 *dwc3_reg;
+       struct xhci_hcor *hcor;
+       struct kdwc3_irq_regs *usbss;
+       struct keystone_xhci_phy *phy;
+};
+
+struct keystone_xhci keystone;
+
+static void keystone_xhci_phy_set(struct keystone_xhci_phy *phy)
+{
+       u32 val;
+
+       /*
+        * VBUSVLDEXTSEL has a default value of 1 in BootCfg but shouldn't.
+        * It should always be cleared because our USB PHY has an onchip VBUS
+        * analog comparator.
+        */
+       val = readl(&phy->phy_clock);
+       /* quit selecting the vbusvldextsel by default! */
+       val &= ~USB3_PHY_OTG_VBUSVLDECTSEL;
+       writel(val, &phy->phy_clock);
+}
+
+static void keystone_xhci_phy_unset(struct keystone_xhci_phy *phy)
+{
+       u32 val;
+
+       /* Disable the PHY REFCLK clock gate */
+       val = readl(&phy->phy_clock);
+       val &= ~USB3_PHY_REF_SSP_EN;
+       writel(val, &phy->phy_clock);
+}
+
+static void dwc3_set_mode(struct dwc3 *dwc3_reg, u32 mode)
+{
+       clrsetbits_le32(&dwc3_reg->g_ctl,
+                       DWC3_GCTL_PRTCAPDIR(DWC3_GCTL_PRTCAP_OTG),
+                       DWC3_GCTL_PRTCAPDIR(mode));
+}
+
+static void dwc3_core_soft_reset(struct dwc3 *dwc3_reg)
+{
+       /* Before Resetting PHY, put Core in Reset */
+       setbits_le32(&dwc3_reg->g_ctl, DWC3_GCTL_CORESOFTRESET);
+
+       /* Assert USB3 PHY reset */
+       setbits_le32(&dwc3_reg->g_usb3pipectl[0], DWC3_GUSB3PIPECTL_PHYSOFTRST);
+
+       /* Assert USB2 PHY reset */
+       setbits_le32(&dwc3_reg->g_usb2phycfg[0], DWC3_GUSB2PHYCFG_PHYSOFTRST);
+
+       mdelay(100);
+
+       /* Clear USB3 PHY reset */
+       clrbits_le32(&dwc3_reg->g_usb3pipectl[0], DWC3_GUSB3PIPECTL_PHYSOFTRST);
+
+       /* Clear USB2 PHY reset */
+       clrbits_le32(&dwc3_reg->g_usb2phycfg[0], DWC3_GUSB2PHYCFG_PHYSOFTRST);
+
+       /* After PHYs are stable we can take Core out of reset state */
+       clrbits_le32(&dwc3_reg->g_ctl, DWC3_GCTL_CORESOFTRESET);
+}
+
+static int dwc3_core_init(struct dwc3 *dwc3_reg)
+{
+       u32 revision, val;
+       unsigned long t_rst;
+       unsigned int dwc3_hwparams1;
+
+       revision = readl(&dwc3_reg->g_snpsid);
+       /* This should read as U3 followed by revision number */
+       if ((revision & DWC3_GSNPSID_MASK) != 0x55330000) {
+               puts("this is not a DesignWare USB3 DRD Core\n");
+               return -EINVAL;
+       }
+
+       /* issue device SoftReset too */
+       writel(DWC3_DCTL_CSFTRST, &dwc3_reg->d_ctl);
+
+       t_rst = get_timer(0);
+       do {
+               val = readl(&dwc3_reg->d_ctl);
+               if (!(val & DWC3_DCTL_CSFTRST))
+                       break;
+               WATCHDOG_RESET();
+       } while (get_timer(t_rst) < 500);
+
+       if (val & DWC3_DCTL_CSFTRST) {
+               debug("Reset timed out\n");
+               return -2;
+       }
+
+       dwc3_core_soft_reset(dwc3_reg);
+
+       dwc3_hwparams1 = readl(&dwc3_reg->g_hwparams1);
+
+       val = readl(&dwc3_reg->g_ctl);
+       val &= ~DWC3_GCTL_SCALEDOWN_MASK;
+       val &= ~DWC3_GCTL_DISSCRAMBLE;
+       switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc3_hwparams1)) {
+       case DWC3_GHWPARAMS1_EN_PWROPT_CLK:
+               val &= ~DWC3_GCTL_DSBLCLKGTNG;
+               break;
+       default:
+               printf("No power optimization available\n");
+       }
+
+       /*
+        * WORKAROUND: DWC3 revisions <1.90a have a bug
+        * where the device can fail to connect at SuperSpeed
+        * and falls back to high-speed mode which causes
+        * the device to enter a Connect/Disconnect loop
+        */
+       if ((revision & DWC3_REVISION_MASK) < 0x190a)
+               val |= DWC3_GCTL_U2RSTECN;
+
+       writel(val, &dwc3_reg->g_ctl);
+
+       return 0;
+}
+
+static int keystone_xhci_core_init(struct dwc3 *dwc3_reg)
+{
+       int ret;
+
+       ret = dwc3_core_init(dwc3_reg);
+       if (ret) {
+               debug("failed to initialize core\n");
+               return -EINVAL;
+       }
+
+       /* We are hard-coding DWC3 core to Host Mode */
+       dwc3_set_mode(dwc3_reg, DWC3_GCTL_PRTCAP_HOST);
+
+       return 0;
+}
+
+int xhci_hcd_init(int index,
+                 struct xhci_hccr **ret_hccr, struct xhci_hcor **ret_hcor)
+{
+       u32 val;
+       int ret;
+       struct xhci_hccr *hcd;
+       struct xhci_hcor *hcor;
+       struct kdwc3_irq_regs *usbss;
+       struct keystone_xhci_phy *phy;
+
+       usbss = (struct kdwc3_irq_regs *)CONFIG_USB_SS_BASE;
+       phy = (struct keystone_xhci_phy *)CONFIG_DEV_USB_PHY_BASE;
+
+       /* Enable the PHY REFCLK clock gate with phy_ref_ssp_en = 1 */
+       val = readl(&(phy->phy_clock));
+       val |= USB3_PHY_REF_SSP_EN;
+       writel(val, &phy->phy_clock);
+
+       mdelay(100);
+
+       /* Release USB from reset */
+       ret = psc_enable_module(KS2_LPSC_USB);
+       if (ret) {
+               puts("Cannot enable USB module");
+               return -1;
+       }
+
+       mdelay(100);
+
+       /* Initialize usb phy */
+       keystone_xhci_phy_set(phy);
+
+       /* soft reset usbss */
+       writel(1, &usbss->sysconfig);
+       while (readl(&usbss->sysconfig) & 1)
+               ;
+
+       val = readl(&usbss->revision);
+       debug("usbss revision %x\n", val);
+
+       /* Initialize usb core */
+       hcd = (struct xhci_hccr *)CONFIG_USB_HOST_XHCI_BASE;
+       keystone.dwc3_reg = (struct dwc3 *)(CONFIG_USB_HOST_XHCI_BASE +
+                                           DWC3_REG_OFFSET);
+
+       keystone_xhci_core_init(keystone.dwc3_reg);
+
+       /* set register addresses */
+       hcor = (struct xhci_hcor *)((uint32_t)hcd +
+               HC_LENGTH(readl(&hcd->cr_capbase)));
+
+       debug("Keystone2-xhci: init hccr %08x and hcor %08x hc_length %d\n",
+             (u32)hcd, (u32)hcor,
+             (u32)HC_LENGTH(xhci_readl(&hcd->cr_capbase)));
+
+       keystone.usbss = usbss;
+       keystone.phy = phy;
+       keystone.hcd = hcd;
+       keystone.hcor = hcor;
+
+       *ret_hccr = hcd;
+       *ret_hcor = hcor;
+
+       return 0;
+}
+
+static int keystone_xhci_phy_suspend(void)
+{
+       int loop_cnt = 0;
+       struct xhci_hcor *hcor;
+       uint32_t *portsc_1 = NULL;
+       uint32_t *portsc_2 = NULL;
+       u32 val, usb2_pls, usb3_pls, event_q;
+       struct dwc3 *dwc3_reg = keystone.dwc3_reg;
+
+       /* set register addresses */
+       hcor = keystone.hcor;
+
+       /* Bypass Scrambling and Set Shorter Training sequence for simulation */
+       val = DWC3_GCTL_PWRDNSCALE(0x4b0) | DWC3_GCTL_PRTCAPDIR(0x2);
+       writel(val, &dwc3_reg->g_ctl);
+
+       /* GUSB2PHYCFG */
+       val = readl(&dwc3_reg->g_usb2phycfg[0]);
+
+       /* assert bit 6 (SusPhy) */
+       val |= DWC3_GUSB2PHYCFG_SUSPHY;
+       writel(val, &dwc3_reg->g_usb2phycfg[0]);
+
+       /* GUSB3PIPECTL */
+       val = readl(&dwc3_reg->g_usb3pipectl[0]);
+
+       /*
+        * assert bit 29 to allow PHY to go to suspend when idle
+        * and cause the USB3 SS PHY to enter suspend mode
+        */
+       val |= (BIT(29) | DWC3_GUSB3PIPECTL_SUSPHY);
+       writel(val, &dwc3_reg->g_usb3pipectl[0]);
+
+       /*
+        * Steps necessary to allow controller to suspend even when
+        * VBUS is HIGH:
+        * - Init DCFG[2:0] (DevSpd) to: 1=FS
+        * - Init GEVNTADR0 to point to an eventQ
+        * - Init GEVNTSIZ0 to 0x0100 to specify the size of the eventQ
+        * - Init DCTL::Run_nStop = 1
+        */
+       writel(0x00020001, &dwc3_reg->d_cfg);
+       /* TODO: local2global( (Uint32) eventQ )? */
+       writel((u32)&event_q, &dwc3_reg->g_evnt_buf[0].g_evntadrlo);
+       writel(0, &dwc3_reg->g_evnt_buf[0].g_evntadrhi);
+       writel(0x4, &dwc3_reg->g_evnt_buf[0].g_evntsiz);
+       /* Run */
+       writel(DWC3_DCTL_RUN_STOP, &dwc3_reg->d_ctl);
+
+       mdelay(100);
+
+       /* Wait for USB2 & USB3 PORTSC::PortLinkState to indicate suspend */
+       portsc_1 = (uint32_t *)(&hcor->portregs[0].or_portsc);
+       portsc_2 = (uint32_t *)(&hcor->portregs[1].or_portsc);
+       usb2_pls = 0;
+       usb3_pls = 0;
+       do {
+               ++loop_cnt;
+               usb2_pls = (readl(portsc_1) & PORT_PLS_MASK) >> 5;
+               usb3_pls = (readl(portsc_2) & PORT_PLS_MASK) >> 5;
+       } while (((usb2_pls != 0x4) || (usb3_pls != 0x4)) && loop_cnt < 1000);
+
+       if (usb2_pls != 0x4 || usb3_pls != 0x4) {
+               debug("USB suspend failed - PLS USB2=%02x, USB3=%02x\n",
+                     usb2_pls, usb3_pls);
+               return -1;
+       }
+
+       debug("USB2 and USB3 PLS - Disabled, loop_cnt=%d\n", loop_cnt);
+       return 0;
+}
+
+void xhci_hcd_stop(int index)
+{
+       /* Disable USB */
+       if (keystone_xhci_phy_suspend())
+               return;
+
+       if (psc_disable_module(KS2_LPSC_USB)) {
+               debug("PSC disable module USB failed!\n");
+               return;
+       }
+
+       /* Disable PHY */
+       keystone_xhci_phy_unset(keystone.phy);
+
+/*     memset(&keystone, 0, sizeof(struct keystone_xhci)); */
+       debug("xhci_hcd_stop OK.\n");
+}
index 476430ddd08310853c6e3ea6df9dfcb26b28f9a4..1ec783daf4f9b69c3d51d4ad4784175eaa262be0 100644 (file)
        "boot part 0 1;" \
        "rootfs part 0 2;" \
        "MLO fat 0 1;" \
-       "MLO.raw mmc 0x100 0x100;" \
-       "u-boot.img.raw mmc 0x300 0x400;" \
-       "spl-os-args.raw mmc 0x80 0x80;" \
-       "spl-os-image.raw mmc 0x900 0x2000;" \
+       "MLO.raw raw 0x100 0x100;" \
+       "u-boot.img.raw raw 0x300 0x400;" \
+       "spl-os-args.raw raw 0x80 0x80;" \
+       "spl-os-image.raw raw 0x900 0x2000;" \
        "spl-os-args fat 0 1;" \
        "spl-os-image fat 0 1;" \
        "u-boot.img fat 0 1;" \
        "fdt ram 0x80F80000 0x80000;" \
        "ramdisk ram 0x81000000 0x4000000\0"
 #define DFUARGS \
-       "dfu_alt_info_emmc=rawemmc mmc 0 3751936\0" \
+       "dfu_alt_info_emmc=rawemmc raw 0 3751936\0" \
        DFU_ALT_INFO_MMC \
        DFU_ALT_INFO_RAM \
        DFU_ALT_INFO_NAND
index 070782774d945ca7119e487076a4b11bf424185e..4472c3e5558065d6efe33eb0cfd4a48126914ee3 100644 (file)
@@ -11,6 +11,9 @@
 
 #define CONFIG_AM43XX
 
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_SAVEENV
+
 #define CONFIG_BOARD_LATE_INIT
 #define CONFIG_ARCH_CPU_INIT
 #define CONFIG_SYS_CACHELINE_SIZE       32
 /* NS16550 Configuration */
 #define CONFIG_SYS_NS16550_COM1                0x44e09000      /* Base EVM has UART0 */
 
-#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_ENV_IS_IN_FAT
+#define FAT_ENV_INTERFACE              "mmc"
+#define FAT_ENV_DEVICE_AND_PART                "0:1"
+#define FAT_ENV_FILE                   "uboot.env"
+#define CONFIG_FAT_WRITE
 
 #define CONFIG_SPL_LDSCRIPT            "$(CPUDIR)/omap-common/u-boot-spl.lds"
 
 
 #ifdef CONFIG_QSPI_BOOT
 #define CONFIG_SYS_TEXT_BASE           0x30000000
-#undef CONFIG_ENV_IS_NOWHERE
+#undef CONFIG_ENV_IS_IN_FAT
 #define CONFIG_ENV_IS_IN_SPI_FLASH
 #define CONFIG_SYS_REDUNDAND_ENVIRONMENT
 #define CONFIG_ENV_SPI_MAX_HZ           CONFIG_SF_DEFAULT_SPEED
index 3502d104720a6a938a38902df8212f783bd16f28..7c8065ad187e8bc5ed9fac5b19e08ed9c5d8a50d 100644 (file)
 /* NAND Configuration */
 #define CONFIG_SYS_NAND_PAGE_2K
 
+/* Network */
+#define CONFIG_DRIVER_TI_KEYSTONE_NET
+#define CONFIG_TI_KSNAV
+#define CONFIG_KSNAV_PKTDMA_NETCP
+#define CONFIG_KSNET_NETCP_V1_5
+#define CONFIG_KSNET_CPSW_NUM_PORTS    9
+#define CONFIG_KSNET_MDIO_PHY_CONFIG_ENABLE
+
+/* SerDes */
+#define CONFIG_TI_KEYSTONE_SERDES
+
 #endif /* __CONFIG_K2E_EVM_H */
index 8aa616da0e0d7ce717440e4eaa46fb04f71b891a..034cbfd4d7815ec283cf4fbeab64fe2fdd40ef13 100644 (file)
 
 /* Network */
 #define CONFIG_DRIVER_TI_KEYSTONE_NET
+#define CONFIG_TI_KSNAV
+#define CONFIG_KSNAV_PKTDMA_NETCP
+#define CONFIG_KSNET_NETCP_V1_0
+#define CONFIG_KSNET_CPSW_NUM_PORTS    5
+
+/* SerDes */
+#define CONFIG_TI_KEYSTONE_SERDES
 
 #endif /* __CONFIG_K2HK_EVM_H */
diff --git a/include/configs/k2l_evm.h b/include/configs/k2l_evm.h
new file mode 100644 (file)
index 0000000..0e1f725
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Configuration header file for TI's k2l-evm
+ *
+ * (C) Copyright 2012-2014
+ *     Texas Instruments Incorporated, <www.ti.com>
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef __CONFIG_K2L_EVM_H
+#define __CONFIG_K2L_EVM_H
+
+/* Platform type */
+#define CONFIG_SOC_K2L
+#define CONFIG_K2L_EVM
+
+/* U-Boot general configuration */
+#define CONFIG_SYS_PROMPT              "K2L EVM # "
+
+#define KS2_ARGS_UBI   "args_ubi=setenv bootargs ${bootargs} rootfstype=ubifs "\
+                      "root=ubi0:rootfs rootflags=sync rw ubi.mtd=2,4096\0"
+
+#define KS2_FDT_NAME   "name_fdt=k2l-evm.dtb\0"
+#define KS2_ADDR_MON   "addr_mon=0x0c140000\0"
+#define KS2_NAME_MON   "name_mon=skern-k2l-evm.bin\0"
+#define NAME_UBOOT     "name_uboot=u-boot-spi-k2l-evm.gph\0"
+#define NAME_UBI       "name_ubi=k2l-evm-ubifs.ubi\0"
+
+#include <configs/ks2_evm.h>
+
+/* SPL SPI Loader Configuration */
+#define CONFIG_SPL_TEXT_BASE           0x0c100000
+
+/* NAND Configuration */
+#define CONFIG_SYS_NAND_PAGE_4K
+
+#endif /* __CONFIG_K2L_EVM_H */
index 137d9b0d32f2793ba8c2571ef32ff39d240f8345..b0c91d8dcb599a6f91ff0b32ba4b968e68aed0cb 100644 (file)
@@ -91,6 +91,8 @@
 #define CONFIG_SYS_SPI2_NUM_CS         4
 
 /* Network Configuration */
+#define CONFIG_PHYLIB
+#define CONFIG_PHY_MARVELL
 #define CONFIG_MII
 #define CONFIG_BOOTP_DEFAULT
 #define CONFIG_BOOTP_DNS
 #define CONFIG_BOOTP_SEND_HOSTNAME
 #define CONFIG_NET_RETRY_COUNT         32
 #define CONFIG_NET_MULTI
-#define CONFIG_GET_LINK_STATUS_ATTEMPTS        5
 #define CONFIG_SYS_SGMII_REFCLK_MHZ    312
 #define CONFIG_SYS_SGMII_LINERATE_MHZ  1250
 #define CONFIG_SYS_SGMII_RATESCALE     2
 
+/* Keyston Navigator Configuration */
+#define CONFIG_KSNAV_QM_BASE_ADDRESS           KS2_QM_BASE_ADDRESS
+#define CONFIG_KSNAV_QM_CONF_BASE              KS2_QM_CONF_BASE
+#define CONFIG_KSNAV_QM_DESC_SETUP_BASE                KS2_QM_DESC_SETUP_BASE
+#define CONFIG_KSNAV_QM_STATUS_RAM_BASE                KS2_QM_STATUS_RAM_BASE
+#define CONFIG_KSNAV_QM_INTD_CONF_BASE         KS2_QM_INTD_CONF_BASE
+#define CONFIG_KSNAV_QM_PDSP1_CMD_BASE         KS2_QM_PDSP1_CMD_BASE
+#define CONFIG_KSNAV_QM_PDSP1_CTRL_BASE                KS2_QM_PDSP1_CTRL_BASE
+#define CONFIG_KSNAV_QM_PDSP1_IRAM_BASE                KS2_QM_PDSP1_IRAM_BASE
+#define CONFIG_KSNAV_QM_MANAGER_QUEUES_BASE    KS2_QM_MANAGER_QUEUES_BASE
+#define CONFIG_KSNAV_QM_MANAGER_Q_PROXY_BASE   KS2_QM_MANAGER_Q_PROXY_BASE
+#define CONFIG_KSNAV_QM_QUEUE_STATUS_BASE      KS2_QM_QUEUE_STATUS_BASE
+#define CONFIG_KSNAV_QM_LINK_RAM_BASE          KS2_QM_LINK_RAM_BASE
+#define CONFIG_KSNAV_QM_REGION_NUM             KS2_QM_REGION_NUM
+#define CONFIG_KSNAV_QM_QPOOL_NUM              KS2_QM_QPOOL_NUM
+
+/* NETCP pktdma */
+#define CONFIG_KSNAV_NETCP_PDMA_CTRL_BASE      KS2_NETCP_PDMA_CTRL_BASE
+#define CONFIG_KSNAV_NETCP_PDMA_TX_BASE                KS2_NETCP_PDMA_TX_BASE
+#define CONFIG_KSNAV_NETCP_PDMA_TX_CH_NUM      KS2_NETCP_PDMA_TX_CH_NUM
+#define CONFIG_KSNAV_NETCP_PDMA_RX_BASE                KS2_NETCP_PDMA_RX_BASE
+#define CONFIG_KSNAV_NETCP_PDMA_RX_CH_NUM      KS2_NETCP_PDMA_RX_CH_NUM
+#define CONFIG_KSNAV_NETCP_PDMA_SCHED_BASE     KS2_NETCP_PDMA_SCHED_BASE
+#define CONFIG_KSNAV_NETCP_PDMA_RX_FLOW_BASE   KS2_NETCP_PDMA_RX_FLOW_BASE
+#define CONFIG_KSNAV_NETCP_PDMA_RX_FLOW_NUM    KS2_NETCP_PDMA_RX_FLOW_NUM
+#define CONFIG_KSNAV_NETCP_PDMA_RX_FREE_QUEUE  KS2_NETCP_PDMA_RX_FREE_QUEUE
+#define CONFIG_KSNAV_NETCP_PDMA_RX_RCV_QUEUE   KS2_NETCP_PDMA_RX_RCV_QUEUE
+#define CONFIG_KSNAV_NETCP_PDMA_TX_SND_QUEUE   KS2_NETCP_PDMA_TX_SND_QUEUE
+
+/* Keystone net */
+#define CONFIG_KSNET_MAC_ID_BASE               KS2_MAC_ID_BASE_ADDR
+#define CONFIG_KSNET_NETCP_BASE                        KS2_NETCP_BASE
+#define CONFIG_KSNET_SERDES_SGMII_BASE         KS2_SGMII_SERDES_BASE
+#define CONFIG_KSNET_SERDES_SGMII2_BASE                KS2_SGMII_SERDES2_BASE
+#define CONFIG_KSNET_SERDES_LANES_PER_SGMII    KS2_LANES_PER_SGMII_SERDES
+
 /* AEMIF */
 #define CONFIG_TI_AEMIF
 #define CONFIG_AEMIF_CNTRL_BASE                KS2_AEMIF_CNTRL_BASE
                                        "1024k(bootloader)ro,512k(params)ro," \
                                        "-(ubifs)"
 
+/* USB Configuration */
+#define CONFIG_USB_XHCI
+#define CONFIG_USB_XHCI_KEYSTONE
+#define CONFIG_SYS_USB_XHCI_MAX_ROOT_PORTS     2
+#define CONFIG_USB_STORAGE
+#define CONFIG_DOS_PARTITION
+#define CONFIG_EFI_PARTITION
+#define CONFIG_FS_FAT
+#define CONFIG_SYS_CACHELINE_SIZE              64
+#define CONFIG_USB_SS_BASE                     KS2_USB_SS_BASE
+#define CONFIG_USB_HOST_XHCI_BASE              KS2_USB_HOST_XHCI_BASE
+#define CONFIG_DEV_USB_PHY_BASE                        KS2_DEV_USB_PHY_BASE
+#define CONFIG_USB_PHY_CFG_BASE                        KS2_USB_PHY_CFG_BASE
+
 /* U-Boot command configuration */
 #include <config_cmd_default.h>
 #define CONFIG_CMD_ASKENV
 #define CONFIG_CMD_UBIFS
 #define CONFIG_CMD_SF
 #define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_USB
 
 /* U-Boot general configuration */
 #define CONFIG_SYS_GENERIC_BOARD
+#define CONFIG_MISC_INIT_R
 #define CONFIG_SYS_CBSIZE              1024
 #define CONFIG_SYS_PBSIZE              2048
 #define CONFIG_SYS_MAXARGS             16
 #include <asm/arch/clock.h>
 #define CONFIG_SYS_HZ_CLOCK            clk_get_rate(KS2_CLK1_6)
 
-/* Maximum memory size for relocated U-boot at the end of the DDR3 memory
-   which is NOT applicable for DDR ECC test */
-#define CONFIG_MAX_UBOOT_MEM_SIZE      (4 << 20)       /* 4 MiB */
-
 #endif /* __CONFIG_KS2_EVM_H */
index 2d93d6c70076fb2a18423773192afa68936084bc..c81e9e9747fdceed70fd9a977458e7dd41f97985 100644 (file)
 #define CONFIG_CMD_CACHE
 #endif
 
+/* 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
+#define CONFIG_IMX_HDMI
+#define CONFIG_IMX_VIDEO_SKIP
+
 #endif                         /* __MX6QSABRE_COMMON_CONFIG_H */
index e666ebb9984ab8de88a9a103e35ed8be54829529..938030d56d69d989f5e79bb295257d9cd77d568e 100644 (file)
 #define CONFIG_SYS_MMC_ENV_DEV         1       /* SDHC3 */
 #endif
 
-/* 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
-#define CONFIG_IMX_HDMI
-#define CONFIG_IMX_VIDEO_SKIP
-
 #define CONFIG_CMD_PCI
 #ifdef CONFIG_CMD_PCI
 #define CONFIG_PCI
index b17e495f5f7915af44e75c8841932299a810e2a2..c58636a5417e765e62ebc7176ffc0d321a2808a6 100644 (file)
 /* TWL4030 LED */
 #define CONFIG_TWL4030_LED
 
+/* USB EHCI */
+#define CONFIG_USB_EHCI
+#define CONFIG_USB_EHCI_OMAP
+#define CONFIG_USB_STORAGE
+#define CONFIG_OMAP_EHCI_PHY1_RESET_GPIO       183
+#define CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS     3
+
 /* Initialize GPIOs by default */
 #define CONFIG_OMAP3_GPIO_2    /* GPIO32..63 is in GPIO Bank 2 */
 #define CONFIG_OMAP3_GPIO_3    /* GPIO64..95 is in GPIO Bank 3 */
@@ -44,6 +51,7 @@
 
 /* commands to include */
 #define CONFIG_CMD_CACHE
+#define CONFIG_CMD_USB
 #undef CONFIG_CMD_FPGA         /* FPGA configuration Support   */
 #undef CONFIG_CMD_IMI          /* iminfo                       */
 #undef CONFIG_CMD_NFS          /* NFS support                  */
                "bootz ${loadaddr} - ${fdtaddr}\0" \
        "nandboot=echo Booting from nand ...; " \
                "run nandargs; " \
-               "nand read ${loadaddr} linux; " \
-               "bootm ${loadaddr}\0" \
+               "if nand read ${loadaddr} linux; then " \
+                       "bootm ${loadaddr};" \
+               "fi;\0" \
 
 #define CONFIG_BOOTCOMMAND \
        "mmc dev ${mmcdev}; if mmc rescan; then " \
index 071880fe7599864348d723beed698d46811ac0cb..d7696bd203c622f8ec56e5a70cd210eddb6e2089 100644 (file)
@@ -47,7 +47,7 @@
 #define CONFIG_SPI_FLASH_SST
 #define CONFIG_MXC_SPI
 #define CONFIG_SF_DEFAULT_BUS  2
-#define CONFIG_SF_DEFAULT_CS   (0|(IMX_GPIO_NR(1, 3)<<8))
+#define CONFIG_SF_DEFAULT_CS   0
 #define CONFIG_SF_DEFAULT_SPEED 25000000
 #define CONFIG_SF_DEFAULT_MODE (SPI_MODE_0)
 
index 49504dcafbc23278000c965058364b892b59c931..83a1bcdfbe34354980713f7e1c01e2c2ec788c7e 100644 (file)
@@ -22,7 +22,7 @@
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_DISPLAY_BOARDINFO
 #define CONFIG_BOARD_EARLY_INIT_F
-#define CONFIG_MISC_INIT_R
+#define CONFIG_ARCH_EARLY_INIT_R
 #define CONFIG_SYS_NO_FLASH
 #define CONFIG_CLOCKS
 
 #define CONFIG_CONS_INDEX              1
 #define CONFIG_BAUDRATE                        115200
 
+/*
+ * USB
+ */
+#ifdef CONFIG_CMD_USB
+#define CONFIG_USB_DWC2
+#define CONFIG_USB_STORAGE
+/*
+ * NOTE: User must define either of the following to select which
+ *       of the two USB controllers available on SoCFPGA to use.
+ *       The DWC2 driver doesn't support multiple USB controllers.
+ * #define CONFIG_USB_DWC2_REG_ADDR    SOCFPGA_USB0_ADDRESS
+ * #define CONFIG_USB_DWC2_REG_ADDR    SOCFPGA_USB1_ADDRESS
+ */
+#endif
+
 /*
  * U-Boot environment
  */
 
 /*
  * SPL
+ *
+ * SRAM Memory layout:
+ *
+ * 0xFFFF_0000 ...... Start of SRAM
+ * 0xFFFF_xxxx ...... Top of stack (grows down)
+ * 0xFFFF_yyyy ...... Malloc area
+ * 0xFFFF_zzzz ...... Global Data
+ * 0xFFFF_FF00 ...... End of SRAM
  */
 #define CONFIG_SPL_FRAMEWORK
 #define CONFIG_SPL_BOARD_INIT
 #define CONFIG_SPL_RAM_DEVICE
-#define CONFIG_SPL_TEXT_BASE           0xFFFF0000
-#define CONFIG_SPL_STACK               CONFIG_SYS_INIT_SP_ADDR
-#define CONFIG_SPL_STACK_SIZE          (4 * 1024)
-#define CONFIG_SPL_MALLOC_SIZE         (5 * 1024)      /* FIXME */
-#define CONFIG_SYS_SPL_MALLOC_START    ((unsigned long) (&__malloc_start))
-#define CONFIG_SYS_SPL_MALLOC_SIZE     (&__malloc_end - &__malloc_start)
+#define CONFIG_SPL_TEXT_BASE           CONFIG_SYS_INIT_RAM_ADDR
+#define CONFIG_SYS_SPL_MALLOC_START    CONFIG_SYS_INIT_SP_ADDR
+#define CONFIG_SYS_SPL_MALLOC_SIZE     (5 * 1024)
 
 #define CHUNKSZ_CRC32                  (1 * 1024)      /* FIXME: ewww */
 #define CONFIG_CRC32_VERIFY
index 60d7e20e83b2678254e129127f221b5e6a74d0c4..942738c138bef60597e12fcefb5b70c90d18a109 100644 (file)
 #if defined(CONFIG_CMD_NET)
 #define CONFIG_EMAC_BASE               SOCFPGA_EMAC1_ADDRESS
 #define CONFIG_PHY_INTERFACE_MODE      PHY_INTERFACE_MODE_RGMII
-#define CONFIG_EPHY0_PHY_ADDR          0
 
 /* PHY */
-#define CONFIG_EPHY1_PHY_ADDR          4
 #define CONFIG_PHY_MICREL
 #define CONFIG_PHY_MICREL_KSZ9021
 #define CONFIG_KSZ9021_CLK_SKEW_ENV    "micrel-ksz9021-clk-skew"
index 97d179a6e9e747ab657c4025796bfeb047f3a0bb..7edc760c7b204b676f19596fc81e29a90f1d40a2 100644 (file)
@@ -41,7 +41,8 @@
 #define DWC3_REG_OFFSET                                0xC100
 
 struct g_event_buffer {
-       u64 g_evntadr;
+       u32 g_evntadrlo;
+       u32 g_evntadrhi;
        u32 g_evntsiz;
        u32 g_evntcount;
 };
@@ -185,4 +186,9 @@ struct dwc3 {                                       /* offset: 0xC100 */
 #define DWC3_GTXFIFOSIZ_TXFDEF(n)              ((n) & 0xffff)
 #define DWC3_GTXFIFOSIZ_TXFSTADDR(n)           ((n) & 0xffff0000)
 
+/* Device Control Register */
+#define DWC3_DCTL_RUN_STOP                     (1 << 31)
+#define DWC3_DCTL_CSFTRST                      (1 << 30)
+#define DWC3_DCTL_LSFTRST                      (1 << 29)
+
 #endif /* __DWC3_H_ */
index 396d8a5472f90ce0981515e26c4ebb9c0d2541e8..917873e7b3ce83487cb16a9a9d577f495192f5f6 100644 (file)
@@ -74,12 +74,12 @@ static uint16_t hdr_checksum(struct socfpga_header *header)
 static void build_header(uint8_t *buf, uint8_t version, uint8_t flags,
                         uint16_t length_bytes)
 {
-       header.validation = htole32(VALIDATION_WORD);
+       header.validation = cpu_to_le32(VALIDATION_WORD);
        header.version = version;
        header.flags = flags;
-       header.length_u32 = htole16(length_bytes/4);
+       header.length_u32 = cpu_to_le16(length_bytes/4);
        header.zero = 0;
-       header.checksum = htole16(hdr_checksum(&header));
+       header.checksum = cpu_to_le16(hdr_checksum(&header));
 
        memcpy(buf, &header, sizeof(header));
 }
@@ -92,12 +92,12 @@ static int verify_header(const uint8_t *buf)
 {
        memcpy(&header, buf, sizeof(header));
 
-       if (le32toh(header.validation) != VALIDATION_WORD)
+       if (le32_to_cpu(header.validation) != VALIDATION_WORD)
                return -1;
-       if (le16toh(header.checksum) != hdr_checksum(&header))
+       if (le16_to_cpu(header.checksum) != hdr_checksum(&header))
                return -1;
 
-       return le16toh(header.length_u32) * 4;
+       return le16_to_cpu(header.length_u32) * 4;
 }
 
 /* Sign the buffer and return the signed buffer size */
@@ -116,7 +116,7 @@ static int sign_buffer(uint8_t *buf,
        /* Calculate and apply the CRC */
        calc_crc = ~pbl_crc32(0, (char *)buf, len);
 
-       *((uint32_t *)(buf + len)) = htole32(calc_crc);
+       *((uint32_t *)(buf + len)) = cpu_to_le32(calc_crc);
 
        if (!pad_64k)
                return len + 4;
@@ -150,7 +150,7 @@ static int verify_buffer(const uint8_t *buf)
 
        calc_crc = ~pbl_crc32(0, (const char *)buf, len);
 
-       buf_crc = le32toh(*((uint32_t *)(buf + len)));
+       buf_crc = le32_to_cpu(*((uint32_t *)(buf + len)));
 
        if (buf_crc != calc_crc) {
                fprintf(stderr, "CRC32 does not match (%08x != %08x)\n",