Add BOOT_DEVICE_SPINAND option and use it for sunxi
This commit is contained in:
parent
cd95fd413d
commit
2c97cf9958
|
@ -16,6 +16,7 @@
|
|||
#define SUNXI_BOOTED_FROM_NAND 1
|
||||
#define SUNXI_BOOTED_FROM_MMC2 2
|
||||
#define SUNXI_BOOTED_FROM_SPI 3
|
||||
#define SUNXI_BOOTED_FROM_SPINAND 4
|
||||
|
||||
/*
|
||||
* Values taken from the F1C200s BootROM stack
|
||||
|
|
|
@ -22,6 +22,7 @@ enum {
|
|||
BOOT_DEVICE_NOR,
|
||||
BOOT_DEVICE_UART,
|
||||
BOOT_DEVICE_SPI,
|
||||
BOOT_DEVICE_SPINAND,
|
||||
BOOT_DEVICE_USB,
|
||||
BOOT_DEVICE_SATA,
|
||||
BOOT_DEVICE_I2C,
|
||||
|
|
|
@ -234,11 +234,12 @@ static int suniv_get_boot_source(void)
|
|||
switch (brom_call) {
|
||||
case SUNIV_BOOTED_FROM_MMC0:
|
||||
return SUNXI_BOOTED_FROM_MMC0;
|
||||
case SUNIV_BOOTED_FROM_SPI:
|
||||
case SUNIV_BOOTED_FROM_NAND:
|
||||
return SUNXI_BOOTED_FROM_SPI;
|
||||
case SUNIV_BOOTED_FROM_MMC1:
|
||||
return SUNXI_BOOTED_FROM_MMC2;
|
||||
case SUNIV_BOOTED_FROM_SPI:
|
||||
return SUNXI_BOOTED_FROM_SPINAND;
|
||||
}
|
||||
/* If we get here something went wrong try to boot from FEL.*/
|
||||
printf("Unknown boot source from BROM: 0x%x\n", brom_call);
|
||||
|
@ -318,6 +319,8 @@ uint32_t sunxi_get_boot_device(void)
|
|||
return BOOT_DEVICE_MMC2;
|
||||
case SUNXI_BOOTED_FROM_SPI:
|
||||
return BOOT_DEVICE_SPI;
|
||||
case SUNXI_BOOTED_FROM_SPINAND:
|
||||
return BOOT_DEVICE_SPINAND;
|
||||
}
|
||||
|
||||
panic("Unknown boot source %d\n", boot_source);
|
||||
|
|
|
@ -459,6 +459,7 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
|
|||
int ret = 0;
|
||||
uint32_t load_offset = sunxi_get_spl_size();
|
||||
struct spl_load_info load;
|
||||
bool allow_raw = false;
|
||||
|
||||
load_offset = max_t(uint32_t, load_offset, CONFIG_SYS_SPI_U_BOOT_OFFS);
|
||||
|
||||
|
@ -469,21 +470,28 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
|
|||
|
||||
spi0_init();
|
||||
|
||||
switch (bootdev->boot_device) {
|
||||
#if defined(CONFIG_SPL_SPI_SUNXI_NAND)
|
||||
spi0_nand_reset();
|
||||
load.read = spi_load_read_nand;
|
||||
ret = spl_spi_try_load(spl_image, bootdev, &load, load_offset, false);
|
||||
if (!ret)
|
||||
goto out;
|
||||
case BOOT_DEVICE_SPINAND:
|
||||
spi0_nand_reset();
|
||||
load.read = spi_load_read_nand;
|
||||
break;
|
||||
#endif
|
||||
case BOOT_DEVICE_SPI:
|
||||
load.read = spi_load_read_nor;
|
||||
allow_raw = true;
|
||||
break;
|
||||
}
|
||||
|
||||
load.read = spi_load_read_nor;
|
||||
ret = spl_spi_try_load(spl_image, bootdev, &load, load_offset, true);
|
||||
ret = spl_spi_try_load(spl_image, bootdev, &load, load_offset, allow_raw);
|
||||
|
||||
out:
|
||||
spi0_deinit();
|
||||
|
||||
return ret;
|
||||
}
|
||||
/* Use priorty 0 to override the default if it happens to be linked in */
|
||||
SPL_LOAD_IMAGE_METHOD("sunxi SPI", 0, BOOT_DEVICE_SPI, spl_spi_load_image);
|
||||
|
||||
#if defined(CONFIG_SPL_SPI_SUNXI_NAND)
|
||||
SPL_LOAD_IMAGE_METHOD("sunxi SPI NAND", 0, BOOT_DEVICE_SPINAND, spl_spi_load_image);
|
||||
#endif
|
||||
|
|
|
@ -16,6 +16,7 @@ enum {
|
|||
BOOT_DEVICE_NOR,
|
||||
BOOT_DEVICE_UART,
|
||||
BOOT_DEVICE_SPI,
|
||||
BOOT_DEVICE_SPINAND,
|
||||
BOOT_DEVICE_USB,
|
||||
BOOT_DEVICE_SATA,
|
||||
BOOT_DEVICE_I2C,
|
||||
|
|
|
@ -18,6 +18,7 @@ enum {
|
|||
BOOT_DEVICE_NOR,
|
||||
BOOT_DEVICE_UART,
|
||||
BOOT_DEVICE_SPI,
|
||||
BOOT_DEVICE_SPINAND,
|
||||
BOOT_DEVICE_USB,
|
||||
BOOT_DEVICE_SATA,
|
||||
BOOT_DEVICE_NVME,
|
||||
|
|
|
@ -15,6 +15,7 @@ enum {
|
|||
BOOT_DEVICE_CPGMAC,
|
||||
BOOT_DEVICE_NOR,
|
||||
BOOT_DEVICE_SPI,
|
||||
BOOT_DEVICE_SPINAND,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue
Block a user