[U-Boot] [PATCH v3 1/8] SPL: Add CONFIG_SUPPORT_EMMC_BOOT support to CONFIG_SPL_FRAMEWORK
Pantelis Antoniou
panto at antoniou-consulting.com
Fri Feb 7 16:59:40 CET 2014
Hi Tom,
On Feb 5, 2014, at 5:24 PM, Tom Rini wrote:
> We use the switch CONFIG_SUPPORT_EMMC_BOOT today to enable some
> additional features of the eMMC boot partitions. Add support for being
> told that we have booted from one of these partitions to the spl
> framework and implement this on TI OMAP/related.
>
> Cc: Pantelis Antoniou <panto at antoniou-consulting.com>
> Signed-off-by: Tom Rini <trini at ti.com>
> ---
> Changes in v3:
> - Rework eMMC boot detect logic for TI platforms, in the eMMC boot case
> we rely on non-FAT/RAW values being in bootmode.
> ---
> arch/arm/cpu/armv7/omap-common/boot-common.c | 13 ++++++++++++-
> common/spl/spl_mmc.c | 24 ++++++++++++++++++++++++
> include/spl.h | 1 +
> 3 files changed, 37 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/cpu/armv7/omap-common/boot-common.c b/arch/arm/cpu/armv7/omap-common/boot-common.c
> index 69fff32..52e0f4a 100644
> --- a/arch/arm/cpu/armv7/omap-common/boot-common.c
> +++ b/arch/arm/cpu/armv7/omap-common/boot-common.c
> @@ -66,7 +66,18 @@ u32 spl_boot_device(void)
>
> u32 spl_boot_mode(void)
> {
> - return gd->arch.omap_boot_params.omap_bootmode;
> + u32 val = gd->arch.omap_boot_params.omap_bootmode;
> +
> + if (val == MMCSD_MODE_RAW)
> + return MMCSD_MODE_RAW;
> + else if (val == MMCSD_MODE_FAT)
> + return MMCSD_MODE_FAT;
> + else
> +#ifdef CONFIG_SUPPORT_EMMC_BOOT
> + return MMCSD_MODE_EMMCBOOT;
> +#else
> + return MMCSD_MODE_UNDEFINED;
> +#endif
> }
>
> void spl_board_init(void)
> diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
> index 13fbff0..fa6f891 100644
> --- a/common/spl/spl_mmc.c
> +++ b/common/spl/spl_mmc.c
> @@ -111,6 +111,30 @@ void spl_mmc_load_image(void)
> CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION,
> CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME);
> #endif
> +#ifdef CONFIG_SUPPORT_EMMC_BOOT
> + } else if (boot_mode == MMCSD_MODE_EMMCBOOT) {
> + /*
> + * We need to check what the partition is configured to.
> + * 1 and 2 match up to boot0 / boot1 and 7 is user data
> + * which is the first physical partition (0).
> + */
> + int part = (mmc->part_config >> 3) & PART_ACCESS_MASK;
> +
> + if (part == 7)
> + part = 0;
> +
> + if (mmc_switch_part(0, part)) {
> +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
> + puts("MMC partition switch failed\n");
> +#endif
> + hang();
> + }
> +#ifdef CONFIG_SPL_OS_BOOT
> + if (spl_start_uboot() || mmc_load_image_raw_os(mmc))
> +#endif
> + err = mmc_load_image_raw(mmc,
> + CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR);
> +#endif
> } else {
> #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
> puts("spl: wrong MMC boot mode\n");
> diff --git a/include/spl.h b/include/spl.h
> index 5e24856..dad00c0 100644
> --- a/include/spl.h
> +++ b/include/spl.h
> @@ -16,6 +16,7 @@
> #define MMCSD_MODE_UNDEFINED 0
> #define MMCSD_MODE_RAW 1
> #define MMCSD_MODE_FAT 2
> +#define MMCSD_MODE_EMMCBOOT 3
>
> struct spl_image_info {
> const char *name;
> --
> 1.7.9.5
Applied. Thanks.
Signed-off-by: Pantelis Antoniou <panto at antoniou-consulting.com>
More information about the U-Boot
mailing list