diff options
| author | Wolfgang Denk <wd@denx.de> | 2010-11-13 00:19:55 +0100 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2010-11-13 00:19:55 +0100 | 
| commit | 227b72515546fca535dbd3274f6d875d97f494fe (patch) | |
| tree | 3713c814a7453024eceb097c67532072950e2f2e | |
| parent | 34998cac2e6231e04d9c31357dc68047635a44ea (diff) | |
| parent | 0fc43a417c4ba5ab63dad6736a18f3bf7008f35f (diff) | |
| download | olio-uboot-2014.01-227b72515546fca535dbd3274f6d875d97f494fe.tar.xz olio-uboot-2014.01-227b72515546fca535dbd3274f6d875d97f494fe.zip | |
Merge branch 'master' of git://git.denx.de/u-boot-ti
| -rw-r--r-- | arch/arm/cpu/armv7/omap3/sdrc.c | 7 | ||||
| -rw-r--r-- | arch/arm/lib/cache.c | 2 | ||||
| -rw-r--r-- | board/isee/igep0020/config.mk | 2 | ||||
| -rw-r--r-- | board/isee/igep0020/igep0020.c | 9 | ||||
| -rw-r--r-- | board/isee/igep0030/config.mk | 3 | ||||
| -rw-r--r-- | board/isee/igep0030/igep0030.c | 9 | ||||
| -rw-r--r-- | board/overo/overo.c | 115 | ||||
| -rw-r--r-- | board/overo/overo.h | 4 | ||||
| -rw-r--r-- | board/ti/beagle/beagle.c | 95 | ||||
| -rw-r--r-- | board/ti/beagle/beagle.h | 46 | ||||
| -rw-r--r-- | board/ti/evm/config.mk | 2 | ||||
| -rw-r--r-- | board/ti/evm/evm.c | 24 | ||||
| -rw-r--r-- | board/ti/evm/evm.h | 2 | ||||
| -rw-r--r-- | drivers/mmc/mmc.c | 148 | ||||
| -rw-r--r-- | include/configs/igep0020.h | 9 | ||||
| -rw-r--r-- | include/configs/igep0030.h | 9 | ||||
| -rw-r--r-- | include/configs/omap3_beagle.h | 8 | ||||
| -rw-r--r-- | include/configs/omap3_evm.h | 11 | ||||
| -rw-r--r-- | include/configs/omap3_overo.h | 7 | ||||
| -rw-r--r-- | include/configs/omap4_panda.h | 6 | ||||
| -rw-r--r-- | include/configs/omap4_sdp4430.h | 6 | 
21 files changed, 411 insertions, 113 deletions
| diff --git a/arch/arm/cpu/armv7/omap3/sdrc.c b/arch/arm/cpu/armv7/omap3/sdrc.c index c75aa1d11..a4979ce61 100644 --- a/arch/arm/cpu/armv7/omap3/sdrc.c +++ b/arch/arm/cpu/armv7/omap3/sdrc.c @@ -149,6 +149,13 @@ void do_sdrc_init(u32 cs, u32 early)  			&sdrc_actim_base1->ctrla);  		writel(readl(&sdrc_actim_base0->ctrlb),  			&sdrc_actim_base1->ctrlb); + +		writel(CMD_NOP, &sdrc_base->cs[cs].manual); +		writel(CMD_PRECHARGE, &sdrc_base->cs[cs].manual); +		writel(CMD_AUTOREFRESH, &sdrc_base->cs[cs].manual); +		writel(CMD_AUTOREFRESH, &sdrc_base->cs[cs].manual); +		writel(readl(&sdrc_base->cs[CS0].mr), +			&sdrc_base->cs[CS1].mr);  	}  	/* diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c index 57151689a..30686fe69 100644 --- a/arch/arm/lib/cache.c +++ b/arch/arm/lib/cache.c @@ -38,7 +38,7 @@ void  flush_cache (unsigned long dummy1, unsigned long dummy2)  	/* disable write buffer as well (page 2-22) */  	asm("mcr p15, 0, %0, c7, c10, 4" : : "r" (0));  #endif -#ifdef CONFIG_ARMV7 +#ifdef CONFIG_OMAP34XX  	void v7_flush_cache_all(void);  	v7_flush_cache_all(); diff --git a/board/isee/igep0020/config.mk b/board/isee/igep0020/config.mk index b8812f94a..7964621ac 100644 --- a/board/isee/igep0020/config.mk +++ b/board/isee/igep0020/config.mk @@ -30,4 +30,4 @@  # (mem base + reserved)  # For use with external or internal boots. -TEXT_BASE = 0x80008000 +CONFIG_SYS_TEXT_BASE = 0x80008000 diff --git a/board/isee/igep0020/igep0020.c b/board/isee/igep0020/igep0020.c index 3f7eda1a6..3ba541e21 100644 --- a/board/isee/igep0020/igep0020.c +++ b/board/isee/igep0020/igep0020.c @@ -26,6 +26,7 @@  #include <asm/io.h>  #include <asm/arch/gpio.h>  #include <asm/arch/mem.h> +#include <asm/arch/mmc_host_def.h>  #include <asm/arch/mux.h>  #include <asm/arch/sys_proto.h>  #include <asm/mach-types.h> @@ -91,6 +92,14 @@ static void setup_net_chip(void)  }  #endif +#ifdef CONFIG_GENERIC_MMC +int board_mmc_init(bd_t *bis) +{ +	omap_mmc_init(0); +	return 0; +} +#endif +  /*   * Routine: misc_init_r   * Description: Configure board specific parts diff --git a/board/isee/igep0030/config.mk b/board/isee/igep0030/config.mk index 019f93f20..de6384f93 100644 --- a/board/isee/igep0030/config.mk +++ b/board/isee/igep0030/config.mk @@ -30,4 +30,5 @@  # (mem base + reserved)  # For use with external or internal boots. -TEXT_BASE = 0x80008000 +CONFIG_SYS_TEXT_BASE = 0x80008000 + diff --git a/board/isee/igep0030/igep0030.c b/board/isee/igep0030/igep0030.c index 924425911..bb4dc3ba1 100644 --- a/board/isee/igep0030/igep0030.c +++ b/board/isee/igep0030/igep0030.c @@ -24,6 +24,7 @@  #include <twl4030.h>  #include <asm/io.h>  #include <asm/arch/mem.h> +#include <asm/arch/mmc_host_def.h>  #include <asm/arch/mux.h>  #include <asm/arch/sys_proto.h>  #include <asm/mach-types.h> @@ -46,6 +47,14 @@ int board_init(void)  	return 0;  } +#ifdef CONFIG_GENERIC_MMC +int board_mmc_init(bd_t *bis) +{ +	omap_mmc_init(0); +	return 0; +} +#endif +  /*   * Routine: misc_init_r   * Description: Configure board specific parts diff --git a/board/overo/overo.c b/board/overo/overo.c index 9c926938b..f917e402b 100644 --- a/board/overo/overo.c +++ b/board/overo/overo.c @@ -40,6 +40,32 @@  #include <asm/mach-types.h>  #include "overo.h" +#define TWL4030_I2C_BUS			0 +#define EXPANSION_EEPROM_I2C_BUS	2 +#define EXPANSION_EEPROM_I2C_ADDRESS	0x51 + +#define GUMSTIX_SUMMIT			0x01000200 +#define GUMSTIX_TOBI			0x02000200 +#define GUMSTIX_TOBI_DUO		0x03000200 +#define GUMSTIX_PALO35			0x04000200 +#define GUMSTIX_PALO43			0x05000200 +#define GUMSTIX_CHESTNUT43		0x06000200 +#define GUMSTIX_PINTO			0x07000200 +#define GUMSTIX_GALLOP43		0x08000200 + +#define ETTUS_USRP_E			0x01000300 + +#define GUMSTIX_NO_EEPROM		0xffffffff + +static struct { +	unsigned int device_vendor; +	unsigned char revision; +	unsigned char content; +	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 @@ -137,6 +163,31 @@ int get_sdio2_config(void)  }  /* + * Routine: get_expansion_id + * Description: This function checks for expansion board by checking I2C + *		bus 2 for the availability of an AT24C01B serial EEPROM. + *		returns the device_vendor field from the EEPROM + */ +unsigned int get_expansion_id(void) +{ +	i2c_set_bus_num(EXPANSION_EEPROM_I2C_BUS); + +	/* return GUMSTIX_NO_EEPROM if eeprom doesn't respond */ +	if (i2c_probe(EXPANSION_EEPROM_I2C_ADDRESS) == 1) { +		i2c_set_bus_num(TWL4030_I2C_BUS); +		return GUMSTIX_NO_EEPROM; +	} + +	/* read configuration data */ +	i2c_read(EXPANSION_EEPROM_I2C_ADDRESS, 0, 1, (u8 *)&expansion_config, +		 sizeof(expansion_config)); + +	i2c_set_bus_num(TWL4030_I2C_BUS); + +	return expansion_config.device_vendor; +} + +/*   * Routine: misc_init_r   * Description: Configure board specific parts   */ @@ -164,6 +215,70 @@ int misc_init_r(void)  		printf("Unable to detect mmc2 connection type\n");  	} +	switch (get_expansion_id()) { +	case GUMSTIX_SUMMIT: +		printf("Recognized Summit expansion board (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		setenv("defaultdisplay", "dvi"); +		break; +	case GUMSTIX_TOBI: +		printf("Recognized Tobi expansion board (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		setenv("defaultdisplay", "dvi"); +		break; +	case GUMSTIX_TOBI_DUO: +		printf("Recognized Tobi Duo expansion board (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		break; +	case GUMSTIX_PALO35: +		printf("Recognized Palo35 expansion board (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		setenv("defaultdisplay", "lcd35"); +		break; +	case GUMSTIX_PALO43: +		printf("Recognized Palo43 expansion board (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		setenv("defaultdisplay", "lcd43"); +		break; +	case GUMSTIX_CHESTNUT43: +		printf("Recognized Chestnut43 expansion board (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		setenv("defaultdisplay", "lcd43"); +		break; +	case GUMSTIX_PINTO: +		printf("Recognized Pinto expansion board (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		break; +	case GUMSTIX_GALLOP43: +		printf("Recognized Gallop43 expansion board (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		setenv("defaultdisplay", "lcd43"); +		break; +	case ETTUS_USRP_E: +		printf("Recognized Ettus Research USRP-E (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		MUX_USRP_E(); +		setenv("defaultdisplay", "dvi"); +		break; +	case GUMSTIX_NO_EEPROM: +		printf("No EEPROM on expansion board\n"); +		break; +	default: +		printf("Unrecognized expansion board\n"); +	} + +	if (expansion_config.content == 1) +		setenv(expansion_config.env_var, expansion_config.env_setting); +  	dieid_num_r();  	return 0; diff --git a/board/overo/overo.h b/board/overo/overo.h index 33a92e4e1..68e1243e9 100644 --- a/board/overo/overo.h +++ b/board/overo/overo.h @@ -419,4 +419,8 @@ const omap3_sysinfo sysinfo = {  	MUX_VAL(CP(MMC1_DAT6),		(IEN  | PTU | EN  | M4)) /*GPIO_128*/\  	MUX_VAL(CP(MMC1_DAT7),		(IEN  | PTU | EN  | M4)) /*GPIO_129*/ +#define MUX_USRP_E() \ +	MUX_VAL(CP(MCSPI1_SOMI),	(IEN  | PTD | DIS | M4)) /*GPIO_173 */\ +	MUX_VAL(CP(MCSPI1_CS1),		(IDIS | PTD | EN  | M4)) /*GPIO_175 */\ +  #endif diff --git a/board/ti/beagle/beagle.c b/board/ti/beagle/beagle.c index c5d6679f4..d9b6f0116 100644 --- a/board/ti/beagle/beagle.c +++ b/board/ti/beagle/beagle.c @@ -39,6 +39,27 @@  #include <asm/mach-types.h>  #include "beagle.h" +#define TWL4030_I2C_BUS			0 +#define EXPANSION_EEPROM_I2C_BUS	1 +#define EXPANSION_EEPROM_I2C_ADDRESS	0x50 + +#define TINCANTOOLS_ZIPPY		0x01000100 +#define TINCANTOOLS_ZIPPY2		0x02000100 +#define TINCANTOOLS_TRAINER		0x04000100 +#define TINCANTOOLS_SHOWDOG		0x03000100 +#define KBADC_BEAGLEFPGA		0x01000600 + +#define BEAGLE_NO_EEPROM		0xffffffff + +static struct { +	unsigned int device_vendor; +	unsigned char revision; +	unsigned char content; +	char fab_revision[8]; +	char env_var[16]; +	char env_setting[64]; +} expansion_config; +  /*   * Routine: board_init   * Description: Early hardware init. @@ -95,6 +116,31 @@ int get_board_revision(void)  }  /* + * Routine: get_expansion_id + * Description: This function checks for expansion board by checking I2C + *		bus 1 for the availability of an AT24C01B serial EEPROM. + *		returns the device_vendor field from the EEPROM + */ +unsigned int get_expansion_id(void) +{ +	i2c_set_bus_num(EXPANSION_EEPROM_I2C_BUS); + +	/* return BEAGLE_NO_EEPROM if eeprom doesn't respond */ +	if (i2c_probe(EXPANSION_EEPROM_I2C_ADDRESS) == 1) { +		i2c_set_bus_num(TWL4030_I2C_BUS); +		return BEAGLE_NO_EEPROM; +	} + +	/* read configuration data */ +	i2c_read(EXPANSION_EEPROM_I2C_ADDRESS, 0, 1, (u8 *)&expansion_config, +		 sizeof(expansion_config)); + +	i2c_set_bus_num(TWL4030_I2C_BUS); + +	return expansion_config.device_vendor; +} + +/*   * Routine: misc_init_r   * Description: Configure board specific parts   */ @@ -141,6 +187,55 @@ int misc_init_r(void)  		printf("Beagle unknown 0x%02x\n", get_board_revision());  	} +	switch (get_expansion_id()) { +	case TINCANTOOLS_ZIPPY: +		printf("Recognized Tincantools Zippy board (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		MUX_TINCANTOOLS_ZIPPY(); +		setenv("buddy", "zippy"); +		break; +	case TINCANTOOLS_ZIPPY2: +		printf("Recognized Tincantools Zippy2 board (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		MUX_TINCANTOOLS_ZIPPY(); +		setenv("buddy", "zippy2"); +		break; +	case TINCANTOOLS_TRAINER: +		printf("Recognized Tincantools Trainer board (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		MUX_TINCANTOOLS_ZIPPY(); +		MUX_TINCANTOOLS_TRAINER(); +		setenv("buddy", "trainer"); +		break; +	case TINCANTOOLS_SHOWDOG: +		printf("Recognized Tincantools Showdow board (rev %d %s)\n", +			expansion_config.revision, +			expansion_config.fab_revision); +		/* Place holder for DSS2 definition for showdog lcd */ +		setenv("defaultdisplay", "showdoglcd"); +		setenv("buddy", "showdog"); +		break; +	case KBADC_BEAGLEFPGA: +		printf("Recognized KBADC Beagle FPGA board\n"); +		MUX_KBADC_BEAGLEFPGA(); +		setenv("buddy", "beaglefpga"); +		break; +	case BEAGLE_NO_EEPROM: +		printf("No EEPROM on expansion board\n"); +		setenv("buddy", "none"); +		break; +	default: +		printf("Unrecognized expansion board: %x\n", +			expansion_config.device_vendor); +		setenv("buddy", "unknown"); +	} + +	if (expansion_config.content == 1) +		setenv(expansion_config.env_var, expansion_config.env_setting); +  	twl4030_power_init();  	twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON); diff --git a/board/ti/beagle/beagle.h b/board/ti/beagle/beagle.h index ec0da6d74..b22b65337 100644 --- a/board/ti/beagle/beagle.h +++ b/board/ti/beagle/beagle.h @@ -259,8 +259,8 @@ const omap3_sysinfo sysinfo = {  	MUX_VAL(CP(HSUSB0_DATA7),	(IEN  | PTD | DIS | M0)) /*HSUSB0_DATA7*/\  	MUX_VAL(CP(I2C1_SCL),		(IEN  | PTU | EN  | M0)) /*I2C1_SCL*/\  	MUX_VAL(CP(I2C1_SDA),		(IEN  | PTU | EN  | M0)) /*I2C1_SDA*/\ -	MUX_VAL(CP(I2C2_SCL),		(IEN  | PTU | EN  | M4)) /*GPIO_168*/\ -	MUX_VAL(CP(I2C2_SDA),		(IEN  | PTU | EN  | M4)) /*GPIO_183*/\ +	MUX_VAL(CP(I2C2_SCL),		(IEN  | PTU | EN  | M0)) /*I2C2_SCL*/\ +	MUX_VAL(CP(I2C2_SDA),		(IEN  | PTU | EN  | M0)) /*I2C2_SDA*/\  	MUX_VAL(CP(I2C3_SCL),		(IEN  | PTU | EN  | M0)) /*I2C3_SCL*/\  	MUX_VAL(CP(I2C3_SDA),		(IEN  | PTU | EN  | M0)) /*I2C3_SDA*/\  	MUX_VAL(CP(I2C4_SCL),		(IEN  | PTU | EN  | M0)) /*I2C4_SCL*/\ @@ -415,4 +415,46 @@ const omap3_sysinfo sysinfo = {  	MUX_VAL(CP(SYS_BOOT5),		(IDIS | PTD | DIS | M3)) /*DSS_DATA22*/\  	MUX_VAL(CP(SYS_BOOT6),		(IDIS | PTD | DIS | M3)) /*DSS_DATA23*/ +#define MUX_TINCANTOOLS_ZIPPY() \ +	MUX_VAL(CP(MMC2_CLK),       (IEN  | PTU | EN  | M0)) /*MMC2_CLK*/\ +	MUX_VAL(CP(MMC2_CMD),       (IEN  | PTU | EN  | M0)) /*MMC2_CMD*/\ +	MUX_VAL(CP(MMC2_DAT0),      (IEN  | PTU | EN  | M0)) /*MMC2_DAT0*/\ +	MUX_VAL(CP(MMC2_DAT1),      (IEN  | PTU | EN  | M0)) /*MMC2_DAT1*/\ +	MUX_VAL(CP(MMC2_DAT2),      (IEN  | PTU | EN  | M0)) /*MMC2_DAT2*/\ +	MUX_VAL(CP(MMC2_DAT3),      (IEN  | PTU | EN  | M0)) /*MMC2_DAT3*/\ +	MUX_VAL(CP(MMC2_DAT4),      (IEN  | PTU | EN  | M1)) /*MMC2_DIR_DAT0*/\ +	MUX_VAL(CP(MMC2_DAT5),      (IEN  | PTU | EN  | M1)) /*MMC2_DIR_DAT1*/\ +	MUX_VAL(CP(MMC2_DAT6),      (IEN  | PTU | EN  | M1)) /*MMC2_DIR_CMD*/\ +	MUX_VAL(CP(MMC2_DAT7),      (IEN  | PTU | EN  | M1)) /*MMC2_CLKIN*/\ +	MUX_VAL(CP(MCBSP1_CLKR),    (IEN  | PTU | EN  | M1)) /*MCSPI4_CLK*/\ +	MUX_VAL(CP(MCBSP1_FSR),     (IEN  | PTU | EN  | M4)) /*GPIO_157*/\ +	MUX_VAL(CP(MCBSP1_DX),      (IEN  | PTD | EN  | M1)) /*MCSPI4_SIMO*/\ +	MUX_VAL(CP(MCBSP1_DR),      (IEN  | PTD | DIS | M1)) /*MCSPI4_SOMI*/\ +	MUX_VAL(CP(MCBSP1_FSX),     (IEN  | PTD | EN  | M1)) /*MCSPI4_CS0*/\ +	MUX_VAL(CP(MCBSP1_CLKX),    (IEN  | PTD | DIS | M4)) /*GPIO_162*/\ +	MUX_VAL(CP(MCBSP3_DX),      (IEN  | PTD | DIS | M4)) /*GPIO_140*/\ +	MUX_VAL(CP(MCBSP3_DR),      (IEN  | PTD | DIS | M4)) /*GPIO_142*/\ +	MUX_VAL(CP(MCBSP3_CLKX),    (IEN  | PTD | DIS | M4)) /*GPIO_141*/ + +#define MUX_TINCANTOOLS_TRAINER() \ +	MUX_VAL(CP(MMC2_CLK),       (IEN  | PTU | EN  | M4)) /*GPIO_130*/\ +	MUX_VAL(CP(MMC2_CMD),       (IEN  | PTU | EN  | M4)) /*GPIO_131*/\ +	MUX_VAL(CP(MMC2_DAT0),      (IEN  | PTU | EN  | M4)) /*GPIO_132*/\ +	MUX_VAL(CP(MMC2_DAT1),      (IEN  | PTU | EN  | M4)) /*GPIO_133*/\ +	MUX_VAL(CP(MMC2_DAT2),      (IEN  | PTU | EN  | M4)) /*GPIO_134*/\ +	MUX_VAL(CP(MMC2_DAT3),      (IEN  | PTU | EN  | M4)) /*GPIO_135*/\ +	MUX_VAL(CP(MMC2_DAT4),      (IEN  | PTU | EN  | M4)) /*GPIO_136*/\ +	MUX_VAL(CP(MMC2_DAT5),      (IEN  | PTU | EN  | M4)) /*GPIO_137*/\ +	MUX_VAL(CP(MMC2_DAT6),      (IEN  | PTU | EN  | M4)) /*GPIO_138*/\ +	MUX_VAL(CP(MMC2_DAT7),      (IEN  | PTU | EN  | M4)) /*GPIO_139*/\ +	MUX_VAL(CP(MCBSP3_DX),      (IEN  | PTU | EN  | M4)) /*GPIO_140*/\ +	MUX_VAL(CP(MCBSP3_CLKX),    (IEN  | PTU | EN  | M4)) /*GPIO_141*/\ +	MUX_VAL(CP(MCBSP1_CLKX),    (IEN  | PTU | EN  | M4)) /*GPIO_162*/ + +#define MUX_KBADC_BEAGLEFPGA() \ +	MUX_VAL(CP(MCBSP1_CLKR),    (IEN  | PTU | DIS | M1)) /*MCSPI4_CLK*/\ +	MUX_VAL(CP(MCBSP1_DX),      (IDIS | PTU | DIS | M1)) /*MCSPI4_SIMO*/\ +	MUX_VAL(CP(MCBSP1_DR),      (IEN  | PTU | EN  | M1)) /*MCSPI4_SOMI*/\ +	MUX_VAL(CP(MCBSP1_FSX),     (IDIS | PTU | DIS | M1)) /*MCSPI4_CS0*/ +  #endif diff --git a/board/ti/evm/config.mk b/board/ti/evm/config.mk index b92d3b054..d173eef09 100644 --- a/board/ti/evm/config.mk +++ b/board/ti/evm/config.mk @@ -30,4 +30,4 @@  # (mem base + reserved)  # For use with external or internal boots. -CONFIG_SYS_TEXT_BASE = 0x80e80000 +CONFIG_SYS_TEXT_BASE = 0x80008000 diff --git a/board/ti/evm/evm.c b/board/ti/evm/evm.c index 9948b9cd3..09d14f7a5 100644 --- a/board/ti/evm/evm.c +++ b/board/ti/evm/evm.c @@ -46,6 +46,11 @@ u8 get_omap3_evm_rev(void)  static void omap3_evm_get_revision(void)  { +#if defined(CONFIG_CMD_NET) +	/* +	 * Board revision can be ascertained only by identifying +	 * the Ethernet chipset. +	 */  	unsigned int smsc_id;  	/* Ethernet PHY ID is stored at ID_REV register */ @@ -62,8 +67,22 @@ static void omap3_evm_get_revision(void)  	default:  		omap3_evm_version = OMAP3EVM_BOARD_GEN_2;         } +#else +#if defined(CONFIG_STATIC_BOARD_REV) +	/* +	 * Look for static defintion of the board revision +	 */ +	omap3_evm_version = CONFIG_STATIC_BOARD_REV; +#else +	/* +	 * Fallback to the default above. +	 */ +	omap3_evm_version = OMAP3EVM_BOARD_GEN_2; +#endif +#endif	/* CONFIG_CMD_NET */  } +#ifdef CONFIG_USB_OMAP3  /*   * MUSB port on OMAP3EVM Rev >= E requires extvbus programming.   */ @@ -76,6 +95,7 @@ u8 omap3_evm_need_extvbus(void)  	return retval;  } +#endif  /*   * Routine: board_init @@ -108,6 +128,7 @@ int misc_init_r(void)  #if defined(CONFIG_CMD_NET)  	setup_net_chip();  #endif +	omap3_evm_get_revision();  	dieid_num_r(); @@ -161,9 +182,6 @@ static void setup_net_chip(void)  	writel(GPIO0, &gpio3_base->cleardataout);  	udelay(1);  	writel(GPIO0, &gpio3_base->setdataout); - -	/* determine omap3evm revision */ -	omap3_evm_get_revision();  }  int board_eth_init(bd_t *bis) diff --git a/board/ti/evm/evm.h b/board/ti/evm/evm.h index e2581f6bf..a76deb838 100644 --- a/board/ti/evm/evm.h +++ b/board/ti/evm/evm.h @@ -47,7 +47,9 @@ enum {  u8 get_omap3_evm_rev(void); +#if defined(CONFIG_CMD_NET)  static void setup_net_chip(void); +#endif  /*   * IEN  - Input Enable diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index eb7bfb39e..6805b33f7 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -82,12 +82,9 @@ mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)  {  	struct mmc_cmd cmd;  	struct mmc_data data; -	int blklen, err; - -	blklen = mmc->write_bl_len;  	if ((start + blkcnt) > mmc->block_dev.lba) { -		printf("MMC: block number 0x%lx exceeds max(0x%lx)", +		printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",  			start + blkcnt, mmc->block_dev.lba);  		return 0;  	} @@ -100,21 +97,19 @@ mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)  	if (mmc->high_capacity)  		cmd.cmdarg = start;  	else -		cmd.cmdarg = start * blklen; +		cmd.cmdarg = start * mmc->write_bl_len;  	cmd.resp_type = MMC_RSP_R1;  	cmd.flags = 0;  	data.src = src;  	data.blocks = blkcnt; -	data.blocksize = blklen; +	data.blocksize = mmc->write_bl_len;  	data.flags = MMC_DATA_WRITE; -	err = mmc_send_cmd(mmc, &cmd, &data); - -	if (err) { -		printf("mmc write failed\n\r"); -		return err; +	if (mmc_send_cmd(mmc, &cmd, &data)) { +		printf("mmc write failed\n"); +		return 0;  	}  	if (blkcnt > 1) { @@ -122,10 +117,9 @@ mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)  		cmd.cmdarg = 0;  		cmd.resp_type = MMC_RSP_R1b;  		cmd.flags = 0; -		err = mmc_send_cmd(mmc, &cmd, NULL); -		if (err) { -			printf("mmc fail to send stop cmd\n\r"); -			return err; +		if (mmc_send_cmd(mmc, &cmd, NULL)) { +			printf("mmc fail to send stop cmd\n"); +			return 0;  		}  	} @@ -135,18 +129,14 @@ mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)  static ulong  mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)  { -	int err; -	struct mmc *mmc = find_mmc_device(dev_num);  	lbaint_t cur, blocks_todo = blkcnt; +	struct mmc *mmc = find_mmc_device(dev_num);  	if (!mmc) -		return -1; +		return 0; -	err = mmc_set_blocklen(mmc, mmc->write_bl_len); -	if (err) { -		printf("set write bl len failed\n\r"); -		return err; -	} +	if (mmc_set_blocklen(mmc, mmc->write_bl_len)) +		return 0;  	do {  		/* @@ -155,7 +145,7 @@ mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)  		 */  		cur = (blocks_todo > 65535) ? 65535 : blocks_todo;  		if(mmc_write_blocks(mmc, start, cur, src) != cur) -			return -1; +			return 0;  		blocks_todo -= cur;  		start += cur;  		src += cur * mmc->write_bl_len; @@ -164,110 +154,78 @@ mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)  	return blkcnt;  } -int mmc_read_block(struct mmc *mmc, void *dst, uint blocknum) +int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, lbaint_t blkcnt)  {  	struct mmc_cmd cmd;  	struct mmc_data data; -	cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK; +	if (blkcnt > 1) +		cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK; +	else +		cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;  	if (mmc->high_capacity) -		cmd.cmdarg = blocknum; +		cmd.cmdarg = start;  	else -		cmd.cmdarg = blocknum * mmc->read_bl_len; +		cmd.cmdarg = start * mmc->read_bl_len;  	cmd.resp_type = MMC_RSP_R1;  	cmd.flags = 0;  	data.dest = dst; -	data.blocks = 1; +	data.blocks = blkcnt;  	data.blocksize = mmc->read_bl_len;  	data.flags = MMC_DATA_READ; -	return mmc_send_cmd(mmc, &cmd, &data); -} - -int mmc_read(struct mmc *mmc, u64 src, uchar *dst, int size) -{ -	char *buffer; -	int i; -	int blklen = mmc->read_bl_len; -	int startblock = lldiv(src, mmc->read_bl_len); -	int endblock = lldiv(src + size - 1, mmc->read_bl_len); -	int err = 0; - -	/* Make a buffer big enough to hold all the blocks we might read */ -	buffer = malloc(blklen); - -	if (!buffer) { -		printf("Could not allocate buffer for MMC read!\n"); -		return -1; -	} - -	/* We always do full block reads from the card */ -	err = mmc_set_blocklen(mmc, mmc->read_bl_len); - -	if (err) -		goto free_buffer; - -	for (i = startblock; i <= endblock; i++) { -		int segment_size; -		int offset; - -		err = mmc_read_block(mmc, buffer, i); - -		if (err) -			goto free_buffer; - -		/* -		 * The first block may not be aligned, so we -		 * copy from the desired point in the block -		 */ -		offset = (src & (blklen - 1)); -		segment_size = MIN(blklen - offset, size); - -		memcpy(dst, buffer + offset, segment_size); +	if (mmc_send_cmd(mmc, &cmd, &data)) +		return 0; -		dst += segment_size; -		src += segment_size; -		size -= segment_size; +	if (blkcnt > 1) { +		cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION; +		cmd.cmdarg = 0; +		cmd.resp_type = MMC_RSP_R1b; +		cmd.flags = 0; +		if (mmc_send_cmd(mmc, &cmd, NULL)) { +			printf("mmc fail to send stop cmd\n"); +			return 0; +		}  	} -free_buffer: -	free(buffer); - -	return err; +	return blkcnt;  }  static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)  { -	int err; -	int i; -	struct mmc *mmc = find_mmc_device(dev_num); +	lbaint_t cur, blocks_todo = blkcnt; +	if (blkcnt == 0) +		return 0; + +	struct mmc *mmc = find_mmc_device(dev_num);  	if (!mmc)  		return 0;  	if ((start + blkcnt) > mmc->block_dev.lba) { -		printf("MMC: block number 0x%lx exceeds max(0x%lx)", +		printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",  			start + blkcnt, mmc->block_dev.lba);  		return 0;  	} -	/* We always do full block reads from the card */ -	err = mmc_set_blocklen(mmc, mmc->read_bl_len); -	if (err) { +	if (mmc_set_blocklen(mmc, mmc->read_bl_len))  		return 0; -	} - -	for (i = start; i < start + blkcnt; i++, dst += mmc->read_bl_len) { -		err = mmc_read_block(mmc, dst, i); -		if (err) { -			printf("block read failed: %d\n", err); -			return i - start; -		} -	} +	do { +		/* +		 * The 65535 constraint comes from some hardware has +		 * only 16 bit width block number counter +		 */ +		cur = (blocks_todo > 65535) ? 65535 : blocks_todo; +		if(mmc_read_blocks(mmc, dst, start, cur) != cur) +			return 0; +		blocks_todo -= cur; +		start += cur; +		dst += cur * mmc->read_bl_len; +	} while (blocks_todo > 0);  	return blkcnt;  } diff --git a/include/configs/igep0020.h b/include/configs/igep0020.h index 16d92793a..c19ecc0e4 100644 --- a/include/configs/igep0020.h +++ b/include/configs/igep0020.h @@ -73,8 +73,9 @@  #define CONFIG_ENV_OVERWRITE  #define CONFIG_BAUDRATE			115200  #define CONFIG_SYS_BAUDRATE_TABLE	{4800, 9600, 19200, 38400, 57600, 115200} +#define CONFIG_GENERIC_MMC		1  #define CONFIG_MMC			1 -#define CONFIG_OMAP3_MMC		1 +#define CONFIG_OMAP_HSMMC		1  #define CONFIG_DOS_PARTITION		1  /* DDR  */ @@ -222,6 +223,10 @@  #endif /* (CONFIG_CMD_NET) */  #define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1 -#define CONFIG_SYS_INIT_SP_ADDR		(LOW_LEVEL_SRAM_STACK - GENERATED_GBL_DATA_SIZE) +#define CONFIG_SYS_INIT_RAM_ADDR	0x4020f800 +#define CONFIG_SYS_INIT_RAM_SIZE	0x800 +#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_INIT_RAM_ADDR + \ +					 CONFIG_SYS_INIT_RAM_SIZE - \ +					 GENERATED_GBL_DATA_SIZE)  #endif /* __CONFIG_H */ diff --git a/include/configs/igep0030.h b/include/configs/igep0030.h index d6fbec7b1..d61793c33 100644 --- a/include/configs/igep0030.h +++ b/include/configs/igep0030.h @@ -73,8 +73,9 @@  #define CONFIG_ENV_OVERWRITE  #define CONFIG_BAUDRATE			115200  #define CONFIG_SYS_BAUDRATE_TABLE	{4800, 9600, 19200, 38400, 57600, 115200} +#define CONFIG_GENERIC_MMC		1  #define CONFIG_MMC			1 -#define CONFIG_OMAP3_MMC		1 +#define CONFIG_OMAP_HSMMC		1  #define CONFIG_DOS_PARTITION		1  /* DDR  */ @@ -209,6 +210,10 @@  #define CONFIG_SYS_MALLOC_LEN		(CONFIG_ENV_SIZE + (128 << 10))  #define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1 -#define CONFIG_SYS_INIT_SP_ADDR		(LOW_LEVEL_SRAM_STACK - GENERATED_GBL_DATA_SIZE) +#define CONFIG_SYS_INIT_RAM_ADDR	0x4020f800 +#define CONFIG_SYS_INIT_RAM_SIZE	0x800 +#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_INIT_RAM_ADDR + \ +					 CONFIG_SYS_INIT_RAM_SIZE - \ +					 GENERATED_GBL_DATA_SIZE)  #endif /* __CONFIG_H */ diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h index 1c9a0075b..076dd5a8a 100644 --- a/include/configs/omap3_beagle.h +++ b/include/configs/omap3_beagle.h @@ -152,6 +152,7 @@  #define CONFIG_SYS_I2C_SLAVE		1  #define CONFIG_SYS_I2C_BUS		0  #define CONFIG_SYS_I2C_BUS_SELECT	1 +#define CONFIG_I2C_MULTI_BUS		1  #define CONFIG_DRIVER_OMAP34XX_I2C	1  /* @@ -345,8 +346,11 @@ extern unsigned int boot_flash_sec;  extern unsigned int boot_flash_type;  #endif -/* additions for new relocation code, must be added to all boards */  #define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1 -#define CONFIG_SYS_INIT_SP_ADDR		(LOW_LEVEL_SRAM_STACK - GENERATED_GBL_DATA_SIZE) +#define CONFIG_SYS_INIT_RAM_ADDR	0x4020f800 +#define CONFIG_SYS_INIT_RAM_SIZE	0x800 +#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_INIT_RAM_ADDR + \ +					 CONFIG_SYS_INIT_RAM_SIZE - \ +					 GENERATED_GBL_DATA_SIZE)  #endif /* __CONFIG_H */ diff --git a/include/configs/omap3_evm.h b/include/configs/omap3_evm.h index e925f3bd2..aeb45c6b6 100644 --- a/include/configs/omap3_evm.h +++ b/include/configs/omap3_evm.h @@ -344,6 +344,17 @@ extern unsigned int boot_flash_sec;  extern unsigned int boot_flash_type;  #endif +/* + * Support for relocation + */ +#define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1 +#define CONFIG_SYS_INIT_SP_ADDR		(LOW_LEVEL_SRAM_STACK - CONFIG_SYS_GBL_DATA_SIZE) + +/* + * Define the board revision statically + */ +/* #define CONFIG_STATIC_BOARD_REV	OMAP3EVM_BOARD_GEN_2 */ +  /*----------------------------------------------------------------------------   * SMSC9115 Ethernet from SMSC9118 family   *---------------------------------------------------------------------------- diff --git a/include/configs/omap3_overo.h b/include/configs/omap3_overo.h index 029207874..79a5b855d 100644 --- a/include/configs/omap3_overo.h +++ b/include/configs/omap3_overo.h @@ -119,6 +119,7 @@  #define CONFIG_SYS_I2C_SLAVE		1  #define CONFIG_SYS_I2C_BUS		0  #define CONFIG_SYS_I2C_BUS_SELECT	1 +#define CONFIG_I2C_MULTI_BUS		1  #define CONFIG_DRIVER_OMAP34XX_I2C	1  /* @@ -324,6 +325,10 @@ extern unsigned int boot_flash_type;  #endif /* (CONFIG_CMD_NET) */  #define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1 -#define CONFIG_SYS_INIT_SP_ADDR		(LOW_LEVEL_SRAM_STACK - GENERATED_GBL_DATA_SIZE) +#define CONFIG_SYS_INIT_RAM_ADDR	0x4020f800 +#define CONFIG_SYS_INIT_RAM_SIZE	0x800 +#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_INIT_RAM_ADDR + \ +					 CONFIG_SYS_INIT_RAM_SIZE - \ +					 GENERATED_GBL_DATA_SIZE)  #endif				/* __CONFIG_H */ diff --git a/include/configs/omap4_panda.h b/include/configs/omap4_panda.h index 74defabbf..eeab11c85 100644 --- a/include/configs/omap4_panda.h +++ b/include/configs/omap4_panda.h @@ -227,6 +227,10 @@  #define CONFIG_NR_DRAM_BANKS	1  #define CONFIG_SYS_SDRAM_BASE		0x80000000 -#define CONFIG_SYS_INIT_SP_ADDR		(LOW_LEVEL_SRAM_STACK - GENERATED_GBL_DATA_SIZE) +#define CONFIG_SYS_INIT_RAM_ADDR	0x4030D800 +#define CONFIG_SYS_INIT_RAM_SIZE	0x800 +#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_INIT_RAM_ADDR + \ +					 CONFIG_SYS_INIT_RAM_SIZE - \ +					 GENERATED_GBL_DATA_SIZE)  #endif /* __CONFIG_H */ diff --git a/include/configs/omap4_sdp4430.h b/include/configs/omap4_sdp4430.h index 26c380d3e..ed0bd41f7 100644 --- a/include/configs/omap4_sdp4430.h +++ b/include/configs/omap4_sdp4430.h @@ -232,6 +232,10 @@  #define CONFIG_NR_DRAM_BANKS	1  #define CONFIG_SYS_SDRAM_BASE		0x80000000 -#define CONFIG_SYS_INIT_SP_ADDR		(LOW_LEVEL_SRAM_STACK - GENERATED_GBL_DATA_SIZE) +#define CONFIG_SYS_INIT_RAM_ADDR	0x4030D800 +#define CONFIG_SYS_INIT_RAM_SIZE	0x800 +#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_INIT_RAM_ADDR + \ +					 CONFIG_SYS_INIT_RAM_SIZE - \ +					 GENERATED_GBL_DATA_SIZE)  #endif /* __CONFIG_H */ |