From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Babic Date: Fri, 17 Mar 2017 12:09:08 +0100 Subject: [U-Boot] [PATCH 11/14] imx: ventana: add GW5904 support In-Reply-To: <1489420274-2691-12-git-send-email-tharvey@gateworks.com> References: <1489420274-2691-1-git-send-email-tharvey@gateworks.com> <1489420274-2691-12-git-send-email-tharvey@gateworks.com> Message-ID: <227931f4-e50b-712d-6c82-9d52d497fd6b@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 13/03/2017 16:51, Tim Harvey wrote: > Signed-off-by: Tim Harvey > --- > board/gateworks/gw_ventana/common.c | 222 ++++++++++++++++++++++++++-- > board/gateworks/gw_ventana/common.h | 2 +- > board/gateworks/gw_ventana/eeprom.c | 9 +- > board/gateworks/gw_ventana/gw_ventana.c | 35 ++++- > board/gateworks/gw_ventana/gw_ventana_spl.c | 14 ++ > board/gateworks/gw_ventana/ventana_eeprom.h | 1 + > configs/gwventana_gw5904_defconfig | 68 +++++++++ > 7 files changed, 336 insertions(+), 15 deletions(-) > create mode 100644 configs/gwventana_gw5904_defconfig > > diff --git a/board/gateworks/gw_ventana/common.c b/board/gateworks/gw_ventana/common.c > index 3dc5f88..f7e93e2 100644 > --- a/board/gateworks/gw_ventana/common.c > +++ b/board/gateworks/gw_ventana/common.c > @@ -38,6 +38,19 @@ void setup_iomux_uart(void) > } > > /* MMC */ > +static iomux_v3_cfg_t const gw5904_emmc_pads[] = { > + IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > + IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > + IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > + IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > + IOMUX_PADS(PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > + IOMUX_PADS(PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > + IOMUX_PADS(PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > + IOMUX_PADS(PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > + IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > + IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > + IOMUX_PADS(PAD_SD3_RST__SD3_RESET | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > +}; > static iomux_v3_cfg_t const usdhc3_pads[] = { > IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), > @@ -352,6 +365,41 @@ static iomux_v3_cfg_t const gw553x_gpio_pads[] = { > IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), > }; > > +static iomux_v3_cfg_t const gw5904_gpio_pads[] = { > + /* USB_HUBRST# */ > + IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), > + /* PANLEDG# */ > + IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), > + /* PANLEDR# */ > + IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), > + /* MX6_LOCLED# */ > + IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), > + /* IOEXP_PWREN# */ > + IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), > + /* IOEXP_IRQ# */ > + IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), > + /* DIOI2C_DIS# */ > + IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), > + /* UART_RS485 */ > + IOMUX_PADS(PAD_DISP0_DAT2__GPIO4_IO23 | DIO_PAD_CFG), > + /* UART_HALF */ > + IOMUX_PADS(PAD_DISP0_DAT3__GPIO4_IO24 | DIO_PAD_CFG), > + /* SKT1_WDIS# */ > + IOMUX_PADS(PAD_DISP0_DAT17__GPIO5_IO11 | DIO_PAD_CFG), > + /* SKT1_RST# */ > + IOMUX_PADS(PAD_DISP0_DAT18__GPIO5_IO12 | DIO_PAD_CFG), > + /* SKT2_WDIS# */ > + IOMUX_PADS(PAD_DISP0_DAT19__GPIO5_IO13 | DIO_PAD_CFG), > + /* SKT2_RST# */ > + IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG), > + /* M2_OFF# */ > + IOMUX_PADS(PAD_SD2_DAT0__GPIO1_IO15 | DIO_PAD_CFG), > + /* M2_WDIS# */ > + IOMUX_PADS(PAD_SD2_DAT1__GPIO1_IO14 | DIO_PAD_CFG), > + /* M2_RST# */ > + IOMUX_PADS(PAD_SD2_DAT2__GPIO1_IO13 | DIO_PAD_CFG), > +}; > + > /* Digital I/O */ > struct dio_cfg gw51xx_dio[] = { > { > @@ -566,6 +614,81 @@ struct dio_cfg gw553x_dio[] = { > }, > }; > > +struct dio_cfg gw5904_dio[] = { > + { > + { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, > + IMX_GPIO_NR(1, 16), > + { 0, 0 }, > + 0 > + }, > + { > + { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, > + IMX_GPIO_NR(1, 19), > + { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, > + 2 > + }, > + { > + { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, > + IMX_GPIO_NR(1, 17), > + { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, > + 3 > + }, > + { > + {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, > + IMX_GPIO_NR(1, 20), > + { 0, 0 }, > + 0 > + }, > + { > + {IOMUX_PADS(PAD_NANDF_D0__GPIO2_IO00) }, > + IMX_GPIO_NR(2, 0), > + { 0, 0 }, > + 0 > + }, > + { > + {IOMUX_PADS(PAD_NANDF_D1__GPIO2_IO01) }, > + IMX_GPIO_NR(2, 1), > + { 0, 0 }, > + 0 > + }, > + { > + {IOMUX_PADS(PAD_NANDF_D2__GPIO2_IO02) }, > + IMX_GPIO_NR(2, 2), > + { 0, 0 }, > + 0 > + }, > + { > + {IOMUX_PADS(PAD_NANDF_D3__GPIO2_IO03) }, > + IMX_GPIO_NR(2, 3), > + { 0, 0 }, > + 0 > + }, > + { > + {IOMUX_PADS(PAD_NANDF_D4__GPIO2_IO04) }, > + IMX_GPIO_NR(2, 4), > + { 0, 0 }, > + 0 > + }, > + { > + {IOMUX_PADS(PAD_NANDF_D5__GPIO2_IO05) }, > + IMX_GPIO_NR(2, 5), > + { 0, 0 }, > + 0 > + }, > + { > + {IOMUX_PADS(PAD_NANDF_D6__GPIO2_IO06) }, > + IMX_GPIO_NR(2, 6), > + { 0, 0 }, > + 0 > + }, > + { > + {IOMUX_PADS(PAD_NANDF_D7__GPIO2_IO07) }, > + IMX_GPIO_NR(2, 7), > + { 0, 0 }, > + 0 > + }, > +}; > + > /* > * Board Specific GPIO > */ > @@ -588,6 +711,7 @@ struct ventana gpio_cfg[GW_UNKNOWN] = { > .dioi2c_en = IMX_GPIO_NR(4, 5), > .pcie_sson = IMX_GPIO_NR(1, 20), > .otgpwr_en = IMX_GPIO_NR(3, 22), > + .mmc_cd = IMX_GPIO_NR(7, 0), > }, > > /* GW51xx */ > @@ -631,6 +755,7 @@ struct ventana gpio_cfg[GW_UNKNOWN] = { > .rs232_en = GP_RS232_EN, > .otgpwr_en = IMX_GPIO_NR(3, 22), > .vsel_pin = IMX_GPIO_NR(6, 14), > + .mmc_cd = IMX_GPIO_NR(7, 0), > }, > > /* GW53xx */ > @@ -654,6 +779,7 @@ struct ventana gpio_cfg[GW_UNKNOWN] = { > .rs232_en = GP_RS232_EN, > .otgpwr_en = IMX_GPIO_NR(3, 22), > .vsel_pin = IMX_GPIO_NR(6, 14), > + .mmc_cd = IMX_GPIO_NR(7, 0), > }, > > /* GW54xx */ > @@ -679,6 +805,7 @@ struct ventana gpio_cfg[GW_UNKNOWN] = { > .rs232_en = GP_RS232_EN, > .otgpwr_en = IMX_GPIO_NR(3, 22), > .vsel_pin = IMX_GPIO_NR(6, 14), > + .mmc_cd = IMX_GPIO_NR(7, 0), > }, > > /* GW551x */ > @@ -726,6 +853,24 @@ struct ventana gpio_cfg[GW_UNKNOWN] = { > .wdis = IMX_GPIO_NR(7, 12), > .otgpwr_en = IMX_GPIO_NR(3, 22), > .vsel_pin = IMX_GPIO_NR(6, 14), > + .mmc_cd = IMX_GPIO_NR(7, 0), > + }, > + > + /* GW5904 */ > + { > + .gpio_pads = gw5904_gpio_pads, > + .num_pads = ARRAY_SIZE(gw5904_gpio_pads)/2, > + .dio_cfg = gw5904_dio, > + .dio_num = ARRAY_SIZE(gw5904_dio), > + .leds = { > + IMX_GPIO_NR(4, 6), > + IMX_GPIO_NR(4, 7), > + IMX_GPIO_NR(4, 15), > + }, > + .pcie_rst = IMX_GPIO_NR(1, 0), > + .mezz_pwren = IMX_GPIO_NR(2, 19), > + .mezz_irq = IMX_GPIO_NR(2, 18), > + .otgpwr_en = IMX_GPIO_NR(3, 22), > }, > }; > > @@ -834,6 +979,24 @@ void setup_iomux_gpio(int board, struct ventana_board_info *info) > gpio_direction_input(gpio_cfg[board].vsel_pin); > gpio_cfg[board].usd_vsel = !gpio_get_value(gpio_cfg[board].vsel_pin); > } > + > + /* Anything else board specific */ > + switch(board) { > + case GW5904: > + gpio_request(IMX_GPIO_NR(5, 11), "skt1_wdis#"); > + gpio_direction_output(IMX_GPIO_NR(5, 11), 1); > + gpio_request(IMX_GPIO_NR(5, 12), "skt1_rst#"); > + gpio_direction_output(IMX_GPIO_NR(5, 12), 1); > + gpio_request(IMX_GPIO_NR(5, 13), "skt2_wdis#"); > + gpio_direction_output(IMX_GPIO_NR(5, 13), 1); > + gpio_request(IMX_GPIO_NR(1, 15), "m2_off#"); > + gpio_direction_output(IMX_GPIO_NR(1, 15), 1); > + gpio_request(IMX_GPIO_NR(1, 14), "m2_wdis#"); > + gpio_direction_output(IMX_GPIO_NR(1, 14), 1); > + gpio_request(IMX_GPIO_NR(1, 13), "m2_rst#"); > + gpio_direction_output(IMX_GPIO_NR(1, 13), 1); > + break; > + } > } > > /* setup GPIO pinmux and default configuration per baseboard and env */ > @@ -995,19 +1158,60 @@ static struct fsl_esdhc_cfg usdhc_cfg = { USDHC3_BASE_ADDR }; > > int board_mmc_init(bd_t *bis) > { > - /* Only one USDHC controller on Ventana */ > - SETUP_IOMUX_PADS(usdhc3_pads); > - usdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); > - usdhc_cfg.max_bus_width = 4; > - > - return fsl_esdhc_initialize(bis, &usdhc_cfg); > + struct ventana_board_info ventana_info; > + int board_type = read_eeprom(CONFIG_I2C_GSC, &ventana_info); > + int ret; > + > + switch (board_type) { > + case GW52xx: > + case GW53xx: > + case GW54xx: > + case GW553x: > + SETUP_IOMUX_PADS(usdhc3_pads); > + usdhc_cfg.esdhc_base = USDHC3_BASE_ADDR; > + usdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); > + usdhc_cfg.max_bus_width = 4; > + return fsl_esdhc_initialize(bis, &usdhc_cfg); > + case GW5904: > + /* usdhc3: 8bit eMMC */ > + SETUP_IOMUX_PADS(gw5904_emmc_pads); > + usdhc_cfg.esdhc_base = USDHC3_BASE_ADDR; > + usdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); > + usdhc_cfg.max_bus_width = 8; > + ret = fsl_esdhc_initialize(bis, &usdhc_cfg); > + if (ret) > + printf("failed registering emmc usdhc3\n"); Why do you add here a printf and in the previous case not ? The printf() does not help a lot, the error is already forwarded to the caller. > + return 0; > + default: > + /* doesn't have MMC */ > + return -1; > + } > } > > int board_mmc_getcd(struct mmc *mmc) > { > + struct ventana_board_info ventana_info; > + struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; > + int board = read_eeprom(CONFIG_I2C_GSC, &ventana_info); > + int gpio = gpio_cfg[board].mmc_cd; > + > /* Card Detect */ > - gpio_request(GP_SD3_CD, "sd_cd"); > - gpio_direction_input(GP_SD3_CD); > - return !gpio_get_value(GP_SD3_CD); > + switch (board) { > + case GW5904: > + /* emmc is always present */ > + if (cfg->esdhc_base == USDHC3_BASE_ADDR) > + return 1; > + break; > + } > + > + if (gpio) { > + gpio_request(gpio, "sd_cd"); > + gpio_direction_input(gpio); > + debug("%s: gpio%d=%d\n", __func__, gpio, gpio_get_value(gpio)); > + return !gpio_get_value(gpio); Even if in u-boot is harmless (and the issue is already present in gw_ventana), a second gpio_request() could be in future raise an error if gpio_free() was not called. Currently, I agree, there is no error. > + } > + > + return -1; > } > + > #endif /* CONFIG_FSL_ESDHC */ > diff --git a/board/gateworks/gw_ventana/common.h b/board/gateworks/gw_ventana/common.h > index 18909a0..3eb4c59 100644 > --- a/board/gateworks/gw_ventana/common.h > +++ b/board/gateworks/gw_ventana/common.h > @@ -13,7 +13,6 @@ > > /* GPIO's common to all baseboards */ > #define GP_PHY_RST IMX_GPIO_NR(1, 30) > -#define GP_SD3_CD IMX_GPIO_NR(7, 0) > #define GP_RS232_EN IMX_GPIO_NR(2, 11) > #define GP_MSATA_SEL IMX_GPIO_NR(2, 8) > > @@ -79,6 +78,7 @@ struct ventana { > int rs232_en; > int otgpwr_en; > int vsel_pin; > + int mmc_cd; > /* various features */ > bool usd_vsel; > }; > diff --git a/board/gateworks/gw_ventana/eeprom.c b/board/gateworks/gw_ventana/eeprom.c > index 1382e5d..9a1033a 100644 > --- a/board/gateworks/gw_ventana/eeprom.c > +++ b/board/gateworks/gw_ventana/eeprom.c > @@ -64,6 +64,7 @@ read_eeprom(int bus, struct ventana_board_info *info) > if (strncasecmp((const char *)info->model, "GW5400-A", 8) == 0) > baseboard = '0'; > > + type = GW_UNKNOWN; > switch (baseboard) { > case '0': /* original GW5400-A prototype */ > type = GW54proto; > @@ -91,10 +92,10 @@ read_eeprom(int bus, struct ventana_board_info *info) > type = GW553x; > break; > } > - /* fall through */ > - default: > - printf("EEPROM: Unknown model in EEPROM: %s\n", info->model); > - type = GW_UNKNOWN; > + break; > + case '9': > + if (info->model[4] == '0' && info->model[5] == '4') > + type = GW5904; > break; > } > return type; > diff --git a/board/gateworks/gw_ventana/gw_ventana.c b/board/gateworks/gw_ventana/gw_ventana.c > index 3f9d2f7..0768799 100644 > --- a/board/gateworks/gw_ventana/gw_ventana.c > +++ b/board/gateworks/gw_ventana/gw_ventana.c > @@ -132,8 +132,9 @@ static void setup_iomux_enet(int gpio) > /* toggle PHY_RST# */ > gpio_request(gpio, "phy_rst#"); > gpio_direction_output(gpio, 0); > - mdelay(2); > + mdelay(10); > gpio_set_value(gpio, 1); > + mdelay(100); > } > > #ifdef CONFIG_USB_EHCI_MX6 > @@ -232,6 +233,38 @@ int board_phy_config(struct phy_device *phydev) > return 0; > } > > +#ifdef CONFIG_MV88E61XX_SWITCH > +int mv88e61xx_hw_reset(struct phy_device *phydev) > +{ > + struct mii_dev *bus = phydev->bus; > + > + /* GPIO[0] output, CLK125 */ > + debug("enabling RGMII_REFCLK\n"); > + bus->write(bus, 0x1c /*MV_GLOBAL2*/, 0, > + 0x1a /*MV_SCRATCH_MISC*/, > + (1 << 15) | (0x62 /*MV_GPIO_DIR*/ << 8) | 0xfe); > + bus->write(bus, 0x1c /*MV_GLOBAL2*/, 0, > + 0x1a /*MV_SCRATCH_MISC*/, > + (1 << 15) | (0x68 /*MV_GPIO01_CNTL*/ << 8) | 7); > + > + /* RGMII delay - Physical Control register bit[15:14] */ > + debug("setting port%d RGMII rx/tx delay\n", CONFIG_MV88E61XX_CPU_PORT); > + /* forced 1000mbps full-duplex link */ > + bus->write(bus, 0x10 + CONFIG_MV88E61XX_CPU_PORT, 0, 1, 0xc0fe); > + phydev->autoneg = AUTONEG_DISABLE; > + phydev->speed = SPEED_1000; > + phydev->duplex = DUPLEX_FULL; > + > + /* LED configuration: 7:4-green (8=Activity) 3:0 amber (9=10Link) */ > + bus->write(bus, 0x10, 0, 0x16, 0x8089); > + bus->write(bus, 0x11, 0, 0x16, 0x8089); > + bus->write(bus, 0x12, 0, 0x16, 0x8089); > + bus->write(bus, 0x13, 0, 0x16, 0x8089); > + > + return 0; > +} > +#endif // CONFIG_MV88E61XX_SWITCH > + > int board_eth_init(bd_t *bis) > { > #ifdef CONFIG_FEC_MXC > diff --git a/board/gateworks/gw_ventana/gw_ventana_spl.c b/board/gateworks/gw_ventana/gw_ventana_spl.c > index 8cc2a57..136b5fc 100644 > --- a/board/gateworks/gw_ventana/gw_ventana_spl.c > +++ b/board/gateworks/gw_ventana/gw_ventana_spl.c > @@ -608,6 +608,20 @@ void board_init_f(ulong dummy) > memset(__bss_start, 0, __bss_end - __bss_start); > } > > +void board_boot_order(u32 *spl_boot_list) > +{ > + spl_boot_list[0] = spl_boot_device(); > + switch (spl_boot_list[0]) { > + case BOOT_DEVICE_NAND: > + spl_boot_list[1] = BOOT_DEVICE_MMC1; > + spl_boot_list[2] = BOOT_DEVICE_UART; > + break; > + case BOOT_DEVICE_MMC1: > + spl_boot_list[1] = BOOT_DEVICE_UART; > + break; > + } > +} > + > /* called from board_init_r after gd setup if CONFIG_SPL_BOARD_INIT defined */ > /* its our chance to print info about boot device */ > void spl_board_init(void) > diff --git a/board/gateworks/gw_ventana/ventana_eeprom.h b/board/gateworks/gw_ventana/ventana_eeprom.h > index 9ffad58..bacaf5a 100644 > --- a/board/gateworks/gw_ventana/ventana_eeprom.h > +++ b/board/gateworks/gw_ventana/ventana_eeprom.h > @@ -112,6 +112,7 @@ enum { > GW551x, > GW552x, > GW553x, > + GW5904, > GW_UNKNOWN, > GW_BADCRC, > }; > diff --git a/configs/gwventana_gw5904_defconfig b/configs/gwventana_gw5904_defconfig > new file mode 100644 > index 0000000..2a95763 > --- /dev/null > +++ b/configs/gwventana_gw5904_defconfig > @@ -0,0 +1,68 @@ > +CONFIG_ARM=y > +CONFIG_ARCH_MX6=y > +CONFIG_SPL_GPIO_SUPPORT=y > +CONFIG_SPL_LIBCOMMON_SUPPORT=y > +CONFIG_SPL_LIBGENERIC_SUPPORT=y > +CONFIG_TARGET_GW_VENTANA=y > +CONFIG_SPL_I2C_SUPPORT=y > +CONFIG_SPL_MMC_SUPPORT=y > +CONFIG_SPL_POWER_SUPPORT=y > +CONFIG_SPL_SERIAL_SUPPORT=y > +CONFIG_SPL_WATCHDOG_SUPPORT=y > +CONFIG_VIDEO=y > +CONFIG_SPL_STACK_R_ADDR=0x18000000 > +CONFIG_FIT=y > +CONFIG_FIT_VERBOSE=y > +CONFIG_OF_BOARD_SETUP=y > +CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/imx-common/spl_sd.cfg,MX6QDL" > +CONFIG_BOOTDELAY=3 > +# CONFIG_SYS_STDIO_DEREGISTER is not set > +# CONFIG_DISPLAY_BOARDINFO is not set > +CONFIG_BOARD_EARLY_INIT_F=y > +CONFIG_SPL=y > +CONFIG_SPL_STACK_R=y > +CONFIG_SPL_DMA_SUPPORT=y > +CONFIG_SPL_OS_BOOT=y > +CONFIG_HUSH_PARSER=y > +CONFIG_SYS_PROMPT="Ventana > " > +CONFIG_CMD_BOOTZ=y > +# CONFIG_CMD_IMLS is not set > +# CONFIG_CMD_FLASH is not set > +CONFIG_CMD_MMC=y > +CONFIG_CMD_I2C=y > +CONFIG_CMD_USB=y > +CONFIG_CMD_USB_MASS_STORAGE=y > +CONFIG_CMD_GPIO=y > +CONFIG_CMD_DHCP=y > +CONFIG_CMD_MII=y > +CONFIG_CMD_PING=y > +CONFIG_CMD_CACHE=y > +CONFIG_CMD_TIME=y > +CONFIG_CMD_EXT2=y > +CONFIG_CMD_EXT4=y > +CONFIG_CMD_EXT4_WRITE=y > +CONFIG_CMD_FAT=y > +CONFIG_CMD_FS_GENERIC=y > +CONFIG_CMD_UBI=y > +CONFIG_DM=y > +CONFIG_NETDEVICES=y > +CONFIG_E1000=y > +CONFIG_PCI=y > +CONFIG_DM_SERIAL=y > +CONFIG_USB=y > +CONFIG_USB_STORAGE=y > +CONFIG_USB_KEYBOARD=y > +CONFIG_USB_GADGET=y > +CONFIG_CI_UDC=y > +CONFIG_USB_GADGET_DOWNLOAD=y > +CONFIG_G_DNL_MANUFACTURER="Gateworks" > +CONFIG_G_DNL_VENDOR_NUM=0x0525 > +CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 > +# CONFIG_VIDEO_SW_CURSOR is not set > +CONFIG_OF_LIBFDT=y > +CONFIG_FDT_FIXUP_PARTITIONS=y > +CONFIG_MV88E61XX_SWITCH=y > +CONFIG_MV88E61XX_CPU_PORT=5 > +CONFIG_MV88E61XX_PHY_PORTS=0xf > +CONFIG_MV88E61XX_FIXED_PORTS=0x0 > + > Best regards, Stefano Babic -- ===================================================================== DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================