From c77b09d0ede28f2d9ab940ed15bd16bdafb7ea26 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Mon, 18 Jan 2010 16:32:13 +0800 Subject: ENGR00120206 iMX28 Enable Ethernet and MMC boot support Enable Ethernet and MMC boot support for imx28-evk Signed-off-by: Frank Li --- board/freescale/mx28/mx28.c | 119 ++++++++++++++++++++++++++++------------ board/freescale/mx28/u-boot.lds | 2 +- 2 files changed, 86 insertions(+), 35 deletions(-) (limited to 'board/freescale') diff --git a/board/freescale/mx28/mx28.c b/board/freescale/mx28/mx28.c index fa53e82..1d22de0 100644 --- a/board/freescale/mx28/mx28.c +++ b/board/freescale/mx28/mx28.c @@ -1,8 +1,5 @@ /* - * - * (c) 2008 Embedded Alley Solutions, Inc. - * - * (C) Copyright 2009 Freescale Semiconductor, Inc. + * (C) Copyright 2009-2010 Freescale Semiconductor, Inc. * * See file CREDITS for list of people who contributed to this * project. @@ -23,25 +20,67 @@ * MA 02111-1307 USA */ - #include #include -#include -#include -#include +#include +#include + +/* This should be removed after it's added into mach-types.h */ +#ifndef MACH_TYPE_MX28EVK +#define MACH_TYPE_MX28EVK 2531 +#endif DECLARE_GLOBAL_DATA_PTR; -#define KHz 1000 -#define MHz (1000 * KHz) +/* MMC pins */ +static struct pin_desc mmc_pins_desc[] = { + { PINID_SSP0_DATA0, PIN_FUN1, PAD_12MA, PAD_3V3, 1 }, + { PINID_SSP0_DATA1, PIN_FUN1, PAD_12MA, PAD_3V3, 1 }, + { PINID_SSP0_DATA2, PIN_FUN1, PAD_12MA, PAD_3V3, 1 }, + { PINID_SSP0_DATA3, PIN_FUN1, PAD_12MA, PAD_3V3, 1 }, + { PINID_SSP0_DATA4, PIN_FUN1, PAD_12MA, PAD_3V3, 1 }, + { PINID_SSP0_DATA5, PIN_FUN1, PAD_12MA, PAD_3V3, 1 }, + { PINID_SSP0_DATA6, PIN_FUN1, PAD_12MA, PAD_3V3, 1 }, + { PINID_SSP0_DATA7, PIN_FUN1, PAD_12MA, PAD_3V3, 1 }, + { PINID_SSP0_CMD, PIN_FUN1, PAD_12MA, PAD_3V3, 1 }, + { PINID_SSP0_DETECT, PIN_FUN1, PAD_12MA, PAD_3V3, 1 }, + { PINID_SSP0_SCK, PIN_FUN1, PAD_12MA, PAD_3V3, 1 } +}; + +static struct pin_group mmc_pins = { + .pins = mmc_pins_desc, + .nr_pins = ARRAY_SIZE(mmc_pins_desc) +}; + +/* ENET pins */ +static struct pin_desc enet_pins_desc[] = { + { PINID_ENET0_MDC, PIN_FUN1, PAD_8MA, PAD_3V3, 1 }, + { PINID_ENET0_MDIO, PIN_FUN1, PAD_8MA, PAD_3V3, 1 }, + { PINID_ENET0_RX_EN, PIN_FUN1, PAD_8MA, PAD_3V3, 1 }, + { PINID_ENET0_RXD0, PIN_FUN1, PAD_8MA, PAD_3V3, 1 }, + { PINID_ENET0_RXD1, PIN_FUN1, PAD_8MA, PAD_3V3, 1 }, + { PINID_ENET0_TX_EN, PIN_FUN1, PAD_8MA, PAD_3V3, 1 }, + { PINID_ENET0_TXD0, PIN_FUN1, PAD_8MA, PAD_3V3, 1 }, + { PINID_ENET0_TXD1, PIN_FUN1, PAD_8MA, PAD_3V3, 1 }, + { PINID_ENET_CLK, PIN_FUN1, PAD_8MA, PAD_3V3, 1 } +}; + +static struct pin_group enet_pins = { + .pins = enet_pins_desc, + .nr_pins = ARRAY_SIZE(enet_pins_desc) +}; -static void set_pinmux(void) +/* + * Functions + */ +int board_init(void) { -} + /* Will change it for MX28 EVK later */ + gd->bd->bi_arch_number = MACH_TYPE_MX28EVK; + /* Adress of boot parameters */ + gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; -#define IO_DIVIDER 18 -static void set_clocks(void) -{ + return 0; } int dram_init(void) @@ -52,31 +91,43 @@ int dram_init(void) return 0; } -int board_init(void) +u32 ssp_mmc_is_wp(void) { - /* arch number of Freescale STMP 378x development board */ - /* gd->bd->bi_arch_number = MACH_TYPE_MX28_EVK; */ - - /* adress of boot parameters */ - gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR; - - set_clocks(); + return pin_gpio_get(PINID_SSP1_SCK); +} - set_pinmux(); +void ssp_mmc_board_init(void) +{ + /* Set up MMC pins */ + pin_set_group(&mmc_pins); - /* Configure SPI on SSP1 or SSP2 */ - spi_init(); + /* Power on the card slot */ + pin_set_type(PINID_PWM3, PIN_GPIO); + pin_gpio_direction(PINID_PWM3, 1); + pin_gpio_set(PINID_PWM3, 0); - return 0; -} + /* Wait 10 ms for card ramping up */ + udelay(10000); -int misc_init_r(void) -{ - return 0; + /* Set up WP pin */ + pin_set_type(PINID_SSP1_SCK, PIN_GPIO); + pin_gpio_direction(PINID_SSP1_SCK, 0); } -int checkboard(void) +void enet_board_init(void) { - printf("Board: MX28 EVK \n"); - return 0; + /* Set up ENET pins */ + pin_set_group(&enet_pins); + + /* Power on the external phy */ + pin_set_type(PINID_SSP1_DATA3, PIN_GPIO); + pin_gpio_direction(PINID_SSP1_DATA3, 1); + pin_gpio_set(PINID_SSP1_DATA3, 0); + + /* Reset the external phy */ + pin_set_type(PINID_ENET0_RX_CLK, PIN_GPIO); + pin_gpio_direction(PINID_ENET0_RX_CLK, 1); + pin_gpio_set(PINID_ENET0_RX_CLK, 0); + udelay(200); + pin_gpio_set(PINID_ENET0_RX_CLK, 1); } diff --git a/board/freescale/mx28/u-boot.lds b/board/freescale/mx28/u-boot.lds index 82cb8e3..b7efe6d 100644 --- a/board/freescale/mx28/u-boot.lds +++ b/board/freescale/mx28/u-boot.lds @@ -30,7 +30,7 @@ SECTIONS . = ALIGN(4); .text : { - cpu/arm926ejs/start.o (.text) + cpu/arm926ejs/start.o (.text) *(.text) } .rodata : { *(.rodata) } -- cgit v1.1