diff options
| author | Tom Rini <trini@ti.com> | 2014-04-25 14:53:51 -0400 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2014-04-25 14:53:51 -0400 | 
| commit | 080d897585428d0fd42c237abfb6746908f4effc (patch) | |
| tree | dc65d6d4bbbf1a7f06bbb045a981270a7624ec67 /drivers/mmc | |
| parent | adcdeacc3eda1e5949e54062aa99c299e12483be (diff) | |
| parent | 08ad9b068afb8842df4cd559c327f54a42811a8d (diff) | |
Merge branch 'master' of git://git.denx.de/u-boot-mpc85xx
Diffstat (limited to 'drivers/mmc')
| -rw-r--r-- | drivers/mmc/fsl_esdhc_spl.c | 32 | 
1 files changed, 31 insertions, 1 deletions
| diff --git a/drivers/mmc/fsl_esdhc_spl.c b/drivers/mmc/fsl_esdhc_spl.c index 8fc263f4f40..b1cb4b3534f 100644 --- a/drivers/mmc/fsl_esdhc_spl.c +++ b/drivers/mmc/fsl_esdhc_spl.c @@ -19,6 +19,32 @@  #define MBRDBR_BOOT_SIG_AA	0x1ff  #define CONFIG_CFG_DATA_SECTOR	0 + +void mmc_spl_load_image(uint32_t offs, unsigned int size, void *vdst) +{ +	uint blk_start, blk_cnt, err; + +	struct mmc *mmc = find_mmc_device(0); +	if (!mmc) { +		puts("spl: mmc device not found!!\n"); +		hang(); +	} + +	if (mmc_init(mmc)) { +		puts("MMC init failed\n"); +		return; +	} + +	blk_start = ALIGN(offs, mmc->read_bl_len) / mmc->read_bl_len; +	blk_cnt = ALIGN(size, mmc->read_bl_len) / mmc->read_bl_len; + +	err = mmc->block_dev.block_read(0, blk_start, blk_cnt, vdst); +	if (err != blk_cnt) { +		puts("spl: mmc read failed!!\n"); +		hang(); +	} +} +  /*   * The main entry for mmc booting. It's necessary that SDRAM is already   * configured and available since this code loads the main U-Boot image @@ -29,10 +55,12 @@ void __noreturn mmc_boot(void)  {  	__attribute__((noreturn)) void (*uboot)(void);  	uint blk_start, blk_cnt, err; -	u32 blklen; +#ifndef CONFIG_FSL_CORENET  	uchar *tmp_buf; +	u32 blklen;  	uchar val;  	uint i, byte_num; +#endif  	u32 offset, code_len;  	struct mmc *mmc; @@ -102,7 +130,9 @@ void __noreturn mmc_boot(void)  					(uchar *)CONFIG_SYS_MMC_U_BOOT_DST);  	if (err != blk_cnt) {  		puts("spl: mmc read failed!!\n"); +#ifndef CONFIG_FSL_CORENET  		free(tmp_buf); +#endif  		hang();  	} | 
