davinci: spl: use bootcfg to select boot device
Right now the SPL is trying to load u-boot based on defines, i.e. one has to define CONFIG_SPL_NAND_SIMPLE to boot from NAND, or CONFIG_SPL_SPI_LOAD to boot from SPI FLASH, etc... This prevent us from having a single SPL image that is able to boot from all media, and one need to build an image for each medium. This commit is replacing the #ifdef that select the boot medium by reading the value of the boot pins (via the BOOTCFG register). Now a single SPL image will be able to read from the boot pin to know which device should be used to load u-boot. Signed-off-by: Fabien Parent <fparent@baylibre.com> Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
208db781ca
commit
c0fa385c9b
2 changed files with 36 additions and 11 deletions
|
@ -475,12 +475,15 @@ int clk_get(enum davinci_clk_ids id);
|
|||
/* Boot config */
|
||||
struct davinci_syscfg_regs {
|
||||
dv_reg revid;
|
||||
dv_reg rsvd[13];
|
||||
dv_reg rsvd[7];
|
||||
dv_reg bootcfg;
|
||||
dv_reg chiprevidr;
|
||||
dv_reg rsvd2[4];
|
||||
dv_reg kick0;
|
||||
dv_reg kick1;
|
||||
dv_reg rsvd1[52];
|
||||
dv_reg mstpri[3];
|
||||
dv_reg rsvd2;
|
||||
dv_reg rsvd3;
|
||||
dv_reg pinmux[20];
|
||||
dv_reg suspsrc;
|
||||
dv_reg chipsig;
|
||||
|
@ -495,6 +498,15 @@ struct davinci_syscfg_regs {
|
|||
#define davinci_syscfg_regs \
|
||||
((struct davinci_syscfg_regs *)DAVINCI_BOOTCFG_BASE)
|
||||
|
||||
enum {
|
||||
DAVINCI_NAND8_BOOT = 0b001110,
|
||||
DAVINCI_NAND16_BOOT = 0b010000,
|
||||
DAVINCI_SD_OR_MMC_BOOT = 0b011100,
|
||||
DAVINCI_MMC_ONLY_BOOT = 0b111100,
|
||||
DAVINCI_SPI0_FLASH_BOOT = 0b001010,
|
||||
DAVINCI_SPI1_FLASH_BOOT = 0b001100,
|
||||
};
|
||||
|
||||
#define pinmux(x) (&davinci_syscfg_regs->pinmux[x])
|
||||
|
||||
/* Emulation suspend bits */
|
||||
|
|
|
@ -52,14 +52,27 @@ u32 spl_boot_mode(const u32 boot_device)
|
|||
|
||||
u32 spl_boot_device(void)
|
||||
{
|
||||
#ifdef CONFIG_SPL_NAND_SIMPLE
|
||||
return BOOT_DEVICE_NAND;
|
||||
#elif defined(CONFIG_SPL_SPI_LOAD)
|
||||
return BOOT_DEVICE_SPI;
|
||||
#elif defined(CONFIG_SPL_MMC_LOAD)
|
||||
return BOOT_DEVICE_MMC1;
|
||||
#else
|
||||
puts("Unknown boot device\n");
|
||||
hang();
|
||||
switch (davinci_syscfg_regs->bootcfg) {
|
||||
#ifdef CONFIG_SPL_NAND_SUPPORT
|
||||
case DAVINCI_NAND8_BOOT:
|
||||
case DAVINCI_NAND16_BOOT:
|
||||
return BOOT_DEVICE_NAND;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SPL_MMC_SUPPORT
|
||||
case DAVINCI_SD_OR_MMC_BOOT:
|
||||
case DAVINCI_MMC_ONLY_BOOT:
|
||||
return BOOT_DEVICE_MMC1;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SPL_SPI_FLASH_SUPPORT
|
||||
case DAVINCI_SPI0_FLASH_BOOT:
|
||||
case DAVINCI_SPI1_FLASH_BOOT:
|
||||
return BOOT_DEVICE_SPI;
|
||||
#endif
|
||||
|
||||
default:
|
||||
puts("Unknown boot device\n");
|
||||
hang();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue