diff options
| -rw-r--r-- | arch/arm/mach-sunxi/board.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-uniphier/boot-mode/spl_board.c | 2 | ||||
| -rw-r--r-- | arch/sandbox/cpu/spl.c | 2 | ||||
| -rw-r--r-- | common/spl/spl.c | 39 | ||||
| -rw-r--r-- | common/spl/spl_mmc.c | 6 | ||||
| -rw-r--r-- | common/spl/spl_nand.c | 2 | ||||
| -rw-r--r-- | common/spl/spl_net.c | 6 | ||||
| -rw-r--r-- | common/spl/spl_nor.c | 2 | ||||
| -rw-r--r-- | common/spl/spl_onenand.c | 2 | ||||
| -rw-r--r-- | common/spl/spl_sata.c | 2 | ||||
| -rw-r--r-- | common/spl/spl_ubi.c | 6 | ||||
| -rw-r--r-- | common/spl/spl_usb.c | 2 | ||||
| -rw-r--r-- | common/spl/spl_ymodem.c | 2 | ||||
| -rw-r--r-- | drivers/mtd/spi/spi_spl_load.c | 2 | ||||
| -rw-r--r-- | drivers/mtd/spi/sunxi_spi_spl.c | 2 | ||||
| -rw-r--r-- | include/spl.h | 40 | 
16 files changed, 71 insertions, 48 deletions
| diff --git a/arch/arm/mach-sunxi/board.c b/arch/arm/mach-sunxi/board.c index 6d9518d4c60..8a385a25fdf 100644 --- a/arch/arm/mach-sunxi/board.c +++ b/arch/arm/mach-sunxi/board.c @@ -133,7 +133,7 @@ static int gpio_init(void)  	return 0;  } -int spl_board_load_image(void) +int spl_board_load_image(struct spl_boot_device *bootdev)  {  	debug("Returning to FEL sp=%x, lr=%x\n", fel_stash.sp, fel_stash.lr);  	return_to_fel(fel_stash.sp, fel_stash.lr); diff --git a/arch/arm/mach-uniphier/boot-mode/spl_board.c b/arch/arm/mach-uniphier/boot-mode/spl_board.c index 63ab41ce1b3..4eadc2f26a7 100644 --- a/arch/arm/mach-uniphier/boot-mode/spl_board.c +++ b/arch/arm/mach-uniphier/boot-mode/spl_board.c @@ -65,7 +65,7 @@ int uniphier_rom_get_mmc_funcptr(int (**send_cmd)(u32, u32),  	return 0;  } -int spl_board_load_image(void) +int spl_board_load_image(struct spl_boot_device *bootdev)  {  	int (*send_cmd)(u32 cmd, u32 arg);  	int (*card_blockaddr)(u32 rca); diff --git a/arch/sandbox/cpu/spl.c b/arch/sandbox/cpu/spl.c index e8349c0b932..4cee293f76a 100644 --- a/arch/sandbox/cpu/spl.c +++ b/arch/sandbox/cpu/spl.c @@ -38,7 +38,7 @@ void spl_board_announce_boot_device(void)  	printf("%s\n", fname);  } -int spl_board_load_image(void) +int spl_board_load_image(struct spl_boot_device *bootdev)  {  	char fname[256];  	int ret; diff --git a/common/spl/spl.c b/common/spl/spl.c index 6d071312bc5..167bff07f9d 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -185,7 +185,7 @@ static ulong spl_ram_load_read(struct spl_load_info *load, ulong sector,  	return count;  } -static int spl_ram_load_image(void) +static int spl_ram_load_image(struct spl_boot_device *bootdev)  {  	struct image_header *header; @@ -349,71 +349,76 @@ static inline void announce_boot_device(u32 boot_device) { }  static int spl_load_image(u32 boot_device)  { +	struct spl_boot_device bootdev; + +	bootdev.boot_device = boot_device; +	bootdev.boot_device_name = NULL; +  	switch (boot_device) {  #ifdef CONFIG_SPL_RAM_DEVICE  	case BOOT_DEVICE_RAM: -		return spl_ram_load_image(); +		return spl_ram_load_image(&bootdev);  #endif  #ifdef CONFIG_SPL_MMC_SUPPORT  	case BOOT_DEVICE_MMC1:  	case BOOT_DEVICE_MMC2:  	case BOOT_DEVICE_MMC2_2: -		return spl_mmc_load_image(boot_device); +		return spl_mmc_load_image(&bootdev);  #endif  #ifdef CONFIG_SPL_UBI  	case BOOT_DEVICE_NAND:  	case BOOT_DEVICE_ONENAND: -		return spl_ubi_load_image(boot_device); +		return spl_ubi_load_image(&bootdev);  #else  #ifdef CONFIG_SPL_NAND_SUPPORT  	case BOOT_DEVICE_NAND: -		return spl_nand_load_image(); +		return spl_nand_load_image(&bootdev);  #endif  #ifdef CONFIG_SPL_ONENAND_SUPPORT  	case BOOT_DEVICE_ONENAND: -		return spl_onenand_load_image(); +		return spl_onenand_load_image(&bootdev);  #endif  #endif  #ifdef CONFIG_SPL_NOR_SUPPORT  	case BOOT_DEVICE_NOR: -		return spl_nor_load_image(); +		return spl_nor_load_image(&bootdev);  #endif  #ifdef CONFIG_SPL_YMODEM_SUPPORT  	case BOOT_DEVICE_UART: -		return spl_ymodem_load_image(); +		return spl_ymodem_load_image(&bootdev);  #endif  #if defined(CONFIG_SPL_SPI_SUPPORT) || defined(CONFIG_SPL_SPI_FLASH_SUPPORT)  	case BOOT_DEVICE_SPI: -		return spl_spi_load_image(); +		return spl_spi_load_image(&bootdev);  #endif  #ifdef CONFIG_SPL_ETH_SUPPORT  	case BOOT_DEVICE_CPGMAC:  #ifdef CONFIG_SPL_ETH_DEVICE -		return spl_net_load_image(CONFIG_SPL_ETH_DEVICE); -#else -		return spl_net_load_image(NULL); +		bootdev.boot_device_name = CONFIG_SPL_ETH_DEVICE;  #endif +		return spl_net_load_image(&bootdev);  #endif  #ifdef CONFIG_SPL_USBETH_SUPPORT  	case BOOT_DEVICE_USBETH: -		return spl_net_load_image("usb_ether"); +		bootdev.boot_device_name = "usb_ether"; +		return spl_net_load_image(&bootdev);  #endif  #ifdef CONFIG_SPL_USB_SUPPORT  	case BOOT_DEVICE_USB: -		return spl_usb_load_image(); +		return spl_usb_load_image(&bootdev);  #endif  #ifdef CONFIG_SPL_DFU_SUPPORT  	case BOOT_DEVICE_DFU:  		spl_dfu_cmd(0, "dfu_alt_info_ram", "ram", "0"); -		return spl_ram_load_image(); +		return spl_ram_load_image(&bootdev);  #endif  #ifdef CONFIG_SPL_SATA_SUPPORT  	case BOOT_DEVICE_SATA: -		return spl_sata_load_image(); +		return spl_sata_load_image(&bootdev);  #endif  #ifdef CONFIG_SPL_BOARD_LOAD_IMAGE  	case BOOT_DEVICE_BOARD: -		return spl_board_load_image(); +		return spl_board_load_image(&bootdev);  #endif  	default:  #if defined(CONFIG_SPL_SERIAL_SUPPORT) && defined(CONFIG_SPL_LIBCOMMON_SUPPORT) diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 97c11b37f66..899caf4a9b5 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -267,14 +267,14 @@ int spl_mmc_do_fs_boot(struct mmc *mmc)  }  #endif -int spl_mmc_load_image(u32 boot_device) +int spl_mmc_load_image(struct spl_boot_device *bootdev)  {  	struct mmc *mmc = NULL;  	u32 boot_mode;  	int err = 0;  	__maybe_unused int part; -	err = spl_mmc_find_device(&mmc, boot_device); +	err = spl_mmc_find_device(&mmc, bootdev->boot_device);  	if (err)  		return err; @@ -286,7 +286,7 @@ int spl_mmc_load_image(u32 boot_device)  		return err;  	} -	boot_mode = spl_boot_mode(boot_device); +	boot_mode = spl_boot_mode(bootdev->boot_device);  	err = -EINVAL;  	switch (boot_mode) {  	case MMCSD_MODE_EMMCBOOT: diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index f25220f1721..575de661d39 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -13,7 +13,7 @@  #include <fdt.h>  #if defined(CONFIG_SPL_NAND_RAW_ONLY) -int spl_nand_load_image(void) +int spl_nand_load_image(struct spl_boot_device *bootdev)  {  	nand_init(); diff --git a/common/spl/spl_net.c b/common/spl/spl_net.c index f417d177eb1..730f88e0d60 100644 --- a/common/spl/spl_net.c +++ b/common/spl/spl_net.c @@ -14,7 +14,7 @@  DECLARE_GLOBAL_DATA_PTR; -int spl_net_load_image(const char *device) +int spl_net_load_image(struct spl_boot_device *bootdev)  {  	int rv; @@ -27,8 +27,8 @@ int spl_net_load_image(const char *device)  		printf("No Ethernet devices found\n");  		return -ENODEV;  	} -	if (device) -		setenv("ethact", device); +	if (bootdev->boot_device_name) +		setenv("ethact", bootdev->boot_device_name);  	rv = net_loop(BOOTP);  	if (rv < 0) {  		printf("Problem booting with BOOTP\n"); diff --git a/common/spl/spl_nor.c b/common/spl/spl_nor.c index 57771e8f578..f10d679922f 100644 --- a/common/spl/spl_nor.c +++ b/common/spl/spl_nor.c @@ -7,7 +7,7 @@  #include <common.h>  #include <spl.h> -int spl_nor_load_image(void) +int spl_nor_load_image(struct spl_boot_device *bootdev)  {  	int ret;  	/* diff --git a/common/spl/spl_onenand.c b/common/spl/spl_onenand.c index 8d2c51bc479..f5e2f95b13e 100644 --- a/common/spl/spl_onenand.c +++ b/common/spl/spl_onenand.c @@ -14,7 +14,7 @@  #include <asm/io.h>  #include <onenand_uboot.h> -int spl_onenand_load_image(void) +int spl_onenand_load_image(struct spl_boot_device *bootdev)  {  	struct image_header *header;  	int ret; diff --git a/common/spl/spl_sata.c b/common/spl/spl_sata.c index 9d8cc7c2ddf..77fd73c9893 100644 --- a/common/spl/spl_sata.c +++ b/common/spl/spl_sata.c @@ -20,7 +20,7 @@  DECLARE_GLOBAL_DATA_PTR; -int spl_sata_load_image(void) +int spl_sata_load_image(struct spl_boot_device *bootdev)  {  	int err;  	struct blk_desc *stor_dev; diff --git a/common/spl/spl_ubi.c b/common/spl/spl_ubi.c index 5198babaae3..d64e6cf57d1 100644 --- a/common/spl/spl_ubi.c +++ b/common/spl/spl_ubi.c @@ -12,14 +12,14 @@  #include <ubispl.h>  #include <spl.h> -int spl_ubi_load_image(u32 boot_device) +int spl_ubi_load_image(struct spl_boot_device *bootdev)  {  	struct image_header *header;  	struct ubispl_info info;  	struct ubispl_load volumes[2];  	int ret = 1; -	switch (boot_device) { +	switch (bootdev->boot_device) {  #ifdef CONFIG_SPL_NAND_SUPPORT  	case BOOT_DEVICE_NAND:  		nand_init(); @@ -71,7 +71,7 @@ int spl_ubi_load_image(u32 boot_device)  		spl_parse_image_header(&spl_image, header);  out:  #ifdef CONFIG_SPL_NAND_SUPPORT -	if (boot_device == BOOT_DEVICE_NAND) +	if (bootdev->boot_device == BOOT_DEVICE_NAND)  		nand_deselect();  #endif  	return ret; diff --git a/common/spl/spl_usb.c b/common/spl/spl_usb.c index 04fa66758cb..f990336a3c4 100644 --- a/common/spl/spl_usb.c +++ b/common/spl/spl_usb.c @@ -22,7 +22,7 @@ DECLARE_GLOBAL_DATA_PTR;  static int usb_stor_curr_dev = -1; /* current device */  #endif -int spl_usb_load_image(void) +int spl_usb_load_image(struct spl_boot_device *bootdev)  {  	int err;  	struct blk_desc *stor_dev; diff --git a/common/spl/spl_ymodem.c b/common/spl/spl_ymodem.c index 1323b6f028f..d82b138568a 100644 --- a/common/spl/spl_ymodem.c +++ b/common/spl/spl_ymodem.c @@ -68,7 +68,7 @@ static ulong ymodem_read_fit(struct spl_load_info *load, ulong offset,  	return size;  } -int spl_ymodem_load_image(void) +int spl_ymodem_load_image(struct spl_boot_device *bootdev)  {  	int size = 0;  	int err; diff --git a/drivers/mtd/spi/spi_spl_load.c b/drivers/mtd/spi/spi_spl_load.c index ac5eae33236..e4cc0d08229 100644 --- a/drivers/mtd/spi/spi_spl_load.c +++ b/drivers/mtd/spi/spi_spl_load.c @@ -65,7 +65,7 @@ static ulong spl_spi_fit_read(struct spl_load_info *load, ulong sector,   * configured and available since this code loads the main U-Boot image   * from SPI into SDRAM and starts it from there.   */ -int spl_spi_load_image(void) +int spl_spi_load_image(struct spl_boot_device *bootdev)  {  	int err = 0;  	struct spi_flash *flash; diff --git a/drivers/mtd/spi/sunxi_spi_spl.c b/drivers/mtd/spi/sunxi_spi_spl.c index a992bfaca1b..767959cdfad 100644 --- a/drivers/mtd/spi/sunxi_spi_spl.c +++ b/drivers/mtd/spi/sunxi_spi_spl.c @@ -262,7 +262,7 @@ static void spi0_read_data(void *buf, u32 addr, u32 len)  /*****************************************************************************/ -int spl_spi_load_image(void) +int spl_spi_load_image(struct spl_boot_device *bootdev)  {  	int err;  	struct image_header *header; diff --git a/include/spl.h b/include/spl.h index f7009553b98..4435089b168 100644 --- a/include/spl.h +++ b/include/spl.h @@ -131,35 +131,53 @@ int spl_start_uboot(void);   */  void spl_display_print(void); +/** + * struct spl_boot_device - Describes a boot device used by SPL + * + * @boot_device: A number indicating the BOOT_DEVICE type. There are various + * BOOT_DEVICE... #defines and enums in U-Boot and they are not consistently + * numbered. + * @boot_device_name: Named boot device, or NULL if none. + * + * Note: Additional fields can be added here, bearing in mind that SPL is + * size-sensitive and common fields will be present on all boards. This + * struct can also be used to return additional information about the load + * process if that becomes useful. + */ +struct spl_boot_device { +	uint boot_device; +	const char *boot_device_name; +}; +  /* NAND SPL functions */ -int spl_nand_load_image(void); +int spl_nand_load_image(struct spl_boot_device *bootdev);  /* OneNAND SPL functions */ -int spl_onenand_load_image(void); +int spl_onenand_load_image(struct spl_boot_device *bootdev);  /* NOR SPL functions */ -int spl_nor_load_image(void); +int spl_nor_load_image(struct spl_boot_device *bootdev);  /* UBI SPL functions */ -int spl_ubi_load_image(u32 boot_device); +int spl_ubi_load_image(struct spl_boot_device *bootdev);  /* MMC SPL functions */ -int spl_mmc_load_image(u32 boot_device); +int spl_mmc_load_image(struct spl_boot_device *bootdev);  /* YMODEM SPL functions */ -int spl_ymodem_load_image(void); +int spl_ymodem_load_image(struct spl_boot_device *bootdev);  /* SPI SPL functions */ -int spl_spi_load_image(void); +int spl_spi_load_image(struct spl_boot_device *bootdev);  /* Ethernet SPL functions */ -int spl_net_load_image(const char *device); +int spl_net_load_image(struct spl_boot_device *bootdev);  /* USB SPL functions */ -int spl_usb_load_image(void); +int spl_usb_load_image(struct spl_boot_device *bootdev);  /* SATA SPL functions */ -int spl_sata_load_image(void); +int spl_sata_load_image(struct spl_boot_device *bootdev);  /* SPL FAT image functions */  int spl_load_image_fat(struct blk_desc *block_dev, int partition, @@ -214,6 +232,6 @@ int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface, char *devstr);   *   * @return 0 on success, negative errno value on failure.   */ -int spl_board_load_image(void); +int spl_board_load_image(struct spl_boot_device *bootdev);  #endif | 
