[PATCH v2 1/1] spl: allow loading via partition type GUID

Simon Glass sjg at chromium.org
Thu Feb 16 21:17:17 CET 2023


Hi Heinrich,

On Thu, 16 Feb 2023 at 08:30, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> Some boards provide main U-Boot as a dedicated partition to SPL.
> Currently we can define either a fixed partition number or an MBR
> partition type to define which partition is to be used.
>
> Partition numbers tend to conflict with established partitioning schemes
> of Linux distros. MBR partitioning is more and more replaced by GPT
> partitioning.
>
> Allow defining a partition type GUID identifying the partition to load
> main U-Boot from.
>
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> ---
> v2:
>         avoid if/endif in Kconfig
> ---
>  common/spl/Kconfig   | 27 ++++++++++++++++++++++-----
>  common/spl/spl_mmc.c | 13 +++++++++++++
>  2 files changed, 35 insertions(+), 5 deletions(-)
>
> diff --git a/common/spl/Kconfig b/common/spl/Kconfig
> index 3c2af453ab..9d12b48297 100644
> --- a/common/spl/Kconfig
> +++ b/common/spl/Kconfig
> @@ -514,19 +514,36 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION
>           used in raw mode
>
>  config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
> -       bool "MMC raw mode: by partition type"
> +       bool "MMC raw mode: by MBR partition type"
>         depends on DOS_PARTITION && SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
>         help
> -         Use partition type for specifying U-Boot partition on MMC/SD in
> +         Use MBR partition type for specifying U-Boot partition on MMC/SD in
>           raw mode. U-Boot will be loaded from the first partition of this
>           type to be found.
>
>  config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE
> -       hex "Partition Type on the MMC to load U-Boot from"
> +       hex "MBR Partition Type on the MMC to load U-Boot from"
>         depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
>         help
> -         Partition Type on the MMC to load U-Boot from, when the MMC is being
> -         used in raw mode.
> +         MBR Partition Type on the MMC to load U-Boot from, when the MMC is
> +         being used in raw mode.
> +
> +config SYS_MMCSD_RAW_MODE_U_BOOT_USE_GPT_PARTITION_TYPE
> +       bool "MMC raw mode: GPT by partition type"
> +       depends on PARTITION_TYPE_GUID && SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
> +       help
> +         Use GPT partition type for specifying U-Boot partition on MMC/SD in
> +         raw mode. U-Boot will be loaded from the first partition of this
> +         type to be found.
> +
> +config SYS_MMCSD_RAW_MODE_U_BOOT_GPT_PARTITION_TYPE
> +       string "GPT Partition Type on the MMC to load U-Boot from"
> +       depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_GPT_PARTITION_TYPE
> +       default d2f002f8-e4e7-4269-b8ac-3bb6fabeaff6

What is this? Can we have a register of these hideous things and call
them by name?

> +       help
> +         GPT Partition Type on the MMC to load U-Boot from, when the MMC is
> +         being used in raw mode. The GUID must be lower case, low endian,
> +         and formatted like d2f002f8-e4e7-4269-b8ac-3bb6fabeaff6.
>
>  config SUPPORT_EMMC_BOOT_OVERRIDE_PART_CONFIG
>         bool "Override eMMC EXT_CSC_PART_CONFIG by user defined partition"
> diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
> index e4135b2048..69bf1d6e98 100644
> --- a/common/spl/spl_mmc.c
> +++ b/common/spl/spl_mmc.c
> @@ -191,6 +191,19 @@ static int mmc_load_image_raw_partition(struct spl_image_info *spl_image,
>         struct disk_partition info;
>         int err;
>
> +#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_GPT_PARTITION_TYPE
> +       for (int i = 1; i <= MAX_SEARCH_PARTITIONS; ++i) {
> +               err = part_get_info(mmc_get_blk_desc(mmc), i, &info);
> +               if (err)
> +                       continue;
> +               if (!strncmp(info.type_guid,
> +                            CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_GPT_PARTITION_TYPE,
> +                            UUID_STR_LEN)) {
> +                       partition = i;
> +                       break;
> +               }
> +       }
> +#endif
>  #ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
>         int type_part;
>         /* Only support MBR so DOS_ENTRY_NUMBERS */
> --
> 2.38.1
>

Is it possible to avoid using #ifdef here?

Longer term, I wonder if we can add a DT schema for all of
this...these CONFIG options for boot selection seem to be getting out
of hand!

Regards,
Simon


More information about the U-Boot mailing list