sunxi: SPL: Factor out sunxi_get_boot_source()

The Boot ROM write some boot source ID (SD card, eMMC, SPI, ...) into
a certain location in SRAM, so the SPL can easily determine where to
load U-Boot proper from.
Factor out reading this value, as it will come in handy again shortly.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Acked-by: Jagan Teki <jagan@amarulasolutions.com>
This commit is contained in:
Andre Przywara
2020-01-10 01:47:31 +00:00
committed by Jagan Teki
parent 533f2433ff
commit ee98d76893

View File

@@ -221,12 +221,22 @@ void s_init(void)
eth_init_board(); eth_init_board();
} }
#define SUNXI_INVALID_BOOT_SOURCE -1
static int sunxi_get_boot_source(void)
{
if (!is_boot0_magic(SPL_ADDR + 4)) /* eGON.BT0 */
return SUNXI_INVALID_BOOT_SOURCE;
return readb(SPL_ADDR + 0x28);
}
/* The sunxi internal brom will try to loader external bootloader /* The sunxi internal brom will try to loader external bootloader
* from mmc0, nand flash, mmc2. * from mmc0, nand flash, mmc2.
*/ */
uint32_t sunxi_get_boot_device(void) uint32_t sunxi_get_boot_device(void)
{ {
int boot_source; int boot_source = sunxi_get_boot_source();
/* /*
* When booting from the SD card or NAND memory, the "eGON.BT0" * When booting from the SD card or NAND memory, the "eGON.BT0"
@@ -244,11 +254,9 @@ uint32_t sunxi_get_boot_device(void)
* binary over USB. If it is found, it determines where SPL was * binary over USB. If it is found, it determines where SPL was
* read from. * read from.
*/ */
if (!is_boot0_magic(SPL_ADDR + 4)) /* eGON.BT0 */
return BOOT_DEVICE_BOARD;
boot_source = readb(SPL_ADDR + 0x28);
switch (boot_source) { switch (boot_source) {
case SUNXI_INVALID_BOOT_SOURCE:
return BOOT_DEVICE_BOARD;
case SUNXI_BOOTED_FROM_MMC0: case SUNXI_BOOTED_FROM_MMC0:
case SUNXI_BOOTED_FROM_MMC0_HIGH: case SUNXI_BOOTED_FROM_MMC0_HIGH:
return BOOT_DEVICE_MMC1; return BOOT_DEVICE_MMC1;