diff options
Diffstat (limited to 'drivers/mtd/spi/spi_spl_load.c')
| -rw-r--r-- | drivers/mtd/spi/spi_spl_load.c | 23 | 
1 files changed, 12 insertions, 11 deletions
| diff --git a/drivers/mtd/spi/spi_spl_load.c b/drivers/mtd/spi/spi_spl_load.c index 1aa30aca7..d4f81f24a 100644 --- a/drivers/mtd/spi/spi_spl_load.c +++ b/drivers/mtd/spi/spi_spl_load.c @@ -24,16 +24,17 @@  #include <common.h>  #include <spi_flash.h> +#include <spl.h>  /*   * The main entry for SPI booting. It's necessary that SDRAM is already   * configured and available since this code loads the main U-Boot image   * from SPI into SDRAM and starts it from there.   */ -void spi_boot(void) +void spl_spi_load_image(void)  {  	struct spi_flash *flash; -	void (*uboot)(void) __noreturn; +	struct image_header *header;  	/*  	 * Load U-Boot image from SPI flash into RAM @@ -42,17 +43,17 @@ void spi_boot(void)  	flash = spi_flash_probe(CONFIG_SPL_SPI_BUS, CONFIG_SPL_SPI_CS,  				CONFIG_SF_DEFAULT_SPEED, SPI_MODE_3);  	if (!flash) { -		puts("failed.\n"); +		puts("SPI probe failed.\n");  		hang();  	} -	spi_flash_read(flash, CONFIG_SYS_SPI_U_BOOT_OFFS, -		       CONFIG_SYS_SPI_U_BOOT_SIZE, -		       (void *) CONFIG_SYS_TEXT_BASE); +	/* use CONFIG_SYS_TEXT_BASE as temporary storage area */ +	header = (struct image_header *)(CONFIG_SYS_TEXT_BASE); -	/* -	 * Jump to U-Boot image -	 */ -	uboot = (void *) CONFIG_SYS_TEXT_BASE; -	(*uboot)(); +	/* Load u-boot, mkimage header is 64 bytes. */ +	spi_flash_read(flash, CONFIG_SYS_SPI_U_BOOT_OFFS, 0x40, +			(void *) header); +	spl_parse_image_header(header); +	spi_flash_read(flash, CONFIG_SYS_SPI_U_BOOT_OFFS, +		       spl_image.size, (void *)spl_image.load_addr);  } |