- Clearfog: Fix SD booting (Baruch) - Misc updates to MMC handling in SPL to support booting from main data partition (vs hardware boot partition) on MVEBU (Baruch)
This commit is contained in:
commit
994bb86fc9
@ -20,12 +20,6 @@ of "/dev/sdX" here!
|
||||
Install U-Boot on eMMC:
|
||||
-----------------------
|
||||
|
||||
The ROM loads the bootloader from eMMC first boot partition at offset 0. This
|
||||
is unlike load from SD card that is at offset 512. As a result, the offset of
|
||||
the main U-Boot image on the eMMC boot partition changes. Set
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR to 0x140 for SPL to load U-Boot from
|
||||
the correct location.
|
||||
|
||||
To make SPL load the main U-Boot image from the eMMC boot partition enable
|
||||
eMMC boot acknowledgement and boot partition with the following U-Boot
|
||||
command:
|
||||
|
@ -329,6 +329,18 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
|
||||
Address on the MMC to load U-Boot from, when the MMC is being used
|
||||
in raw mode. Units: MMC sectors (1 sector = 512 bytes).
|
||||
|
||||
config SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET
|
||||
hex "U-Boot main hardware partition image offset"
|
||||
depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
|
||||
default 0x0
|
||||
help
|
||||
On some platforms SPL location depends on hardware partition. The ROM
|
||||
code skips the MBR sector when loading SPL from main hardware data
|
||||
partition. This adds offset to the main U-Boot image. Set this symbol
|
||||
to the number of skipped sectors.
|
||||
|
||||
If unsure, leave the default.
|
||||
|
||||
config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
|
||||
bool "MMC Raw mode: by partition"
|
||||
help
|
||||
|
@ -49,6 +49,16 @@ static ulong h_spl_load_read(struct spl_load_info *load, ulong sector,
|
||||
return blk_dread(mmc_get_blk_desc(mmc), sector, count, buf);
|
||||
}
|
||||
|
||||
static __maybe_unused unsigned long spl_mmc_raw_uboot_offset(int part)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR)
|
||||
if (part == 0)
|
||||
return CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static __maybe_unused
|
||||
int mmc_load_image_raw_sector(struct spl_image_info *spl_image,
|
||||
struct mmc *mmc, unsigned long sector)
|
||||
@ -325,7 +335,7 @@ int spl_mmc_load(struct spl_image_info *spl_image,
|
||||
static struct mmc *mmc;
|
||||
u32 boot_mode;
|
||||
int err = 0;
|
||||
__maybe_unused int part;
|
||||
__maybe_unused int part = 0;
|
||||
|
||||
/* Perform peripheral init only once */
|
||||
if (!mmc) {
|
||||
@ -391,7 +401,8 @@ int spl_mmc_load(struct spl_image_info *spl_image,
|
||||
return err;
|
||||
#endif
|
||||
#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
|
||||
err = mmc_load_image_raw_sector(spl_image, mmc, raw_sect);
|
||||
err = mmc_load_image_raw_sector(spl_image, mmc,
|
||||
raw_sect + spl_mmc_raw_uboot_offset(part));
|
||||
if (!err)
|
||||
return err;
|
||||
#endif
|
||||
|
@ -26,7 +26,8 @@ CONFIG_USE_PREBOOT=y
|
||||
CONFIG_SYS_CONSOLE_INFO_QUIET=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x141
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET=0x1
|
||||
CONFIG_SPL_DM_GPIO=y
|
||||
CONFIG_SPL_I2C_SUPPORT=y
|
||||
# CONFIG_CMD_FLASH is not set
|
||||
CONFIG_CMD_GPIO=y
|
||||
|
Loading…
Reference in New Issue
Block a user