[PATCH v1 3/4] env: scsi: Add support for partition type GUID based environment

Simon Glass sjg at chromium.org
Thu Jan 8 18:42:06 CET 2026


Hi Balaji,

On Wed, 7 Jan 2026 at 23:50, Balaji Selvanathan
<balaji.selvanathan at oss.qualcomm.com> wrote:
>
> Add support for locating SCSI environment partition using GPT type
> GUID instead of unique UUID. This enables the saveenv command to
> work with partitions identified by their type rather than unique
> identifiers, providing flexibility for systems where partition
> UUIDs may vary across devices but types remain constant.
>
> Introduce CONFIG_SCSI_ENV_PART_TYPE_GUID configuration option that
> allows specifying a partition type GUID for environment storage.
> When enabled, the environment subsystem uses the new type GUID
> based lookup method via scsi_get_blk_by_type_guid() to find the
> first matching partition.
>
> This change maintains backward compatibility with the existing
> UUID-based approach.
>
> Signed-off-by: Balaji Selvanathan <balaji.selvanathan at oss.qualcomm.com>
> ---
>  env/Kconfig |  7 +++++++
>  env/scsi.c  | 13 +++++++++++++
>  2 files changed, 20 insertions(+)
>
> diff --git a/env/Kconfig b/env/Kconfig
> index b312f9b5324..97cb3d05daf 100644
> --- a/env/Kconfig
> +++ b/env/Kconfig
> @@ -768,6 +768,13 @@ config SCSI_ENV_PART_UUID
>         help
>           UUID of the SCSI partition that you want to store the environment in.
>
> +config SCSI_ENV_PART_TYPE_GUID
> +       string "SCSI partition type GUID for saving environment"
> +       depends on ENV_IS_IN_SCSI
> +       help
> +         Type GUID of the SCSI partition to store the environment in.
> +         Uses the first partition matching this type GUID.
> +
>  config ENV_USE_DEFAULT_ENV_TEXT_FILE
>         bool "Create default environment from file"
>         depends on !COMPILE_TEST
> diff --git a/env/scsi.c b/env/scsi.c
> index 207717e17b1..6182ae26679 100644
> --- a/env/scsi.c
> +++ b/env/scsi.c
> @@ -35,8 +35,13 @@ static inline struct env_scsi_info *env_scsi_get_part(void)
>  {
>         struct env_scsi_info *ep = &env_part;
>
> +#ifdef CONFIG_SCSI_ENV_PART_TYPE_GUID
> +       if (scsi_get_blk_by_type_guid(CONFIG_SCSI_ENV_PART_TYPE_GUID, &ep->blk, &ep->part))

Can you use if IS_ENABLED(CONFIG_SCSI_ENV_PART_TYPE_GUID)

(we try to avoid #ifdef)

> +               return NULL;
> +#else
>         if (scsi_get_blk_by_uuid(CONFIG_SCSI_ENV_PART_UUID, &ep->blk, &ep->part))
>                 return NULL;
> +#endif
>
>         ep->count = CONFIG_ENV_SIZE / ep->part.blksz;
>
> @@ -83,12 +88,20 @@ static int env_scsi_load(void)
>         int ret;
>
>         if (!ep) {
> +#ifdef CONFIG_SCSI_ENV_PART_TYPE_GUID
> +               env_set_default(CONFIG_SCSI_ENV_PART_TYPE_GUID " partition not found", 0);
> +#else
>                 env_set_default(CONFIG_SCSI_ENV_PART_UUID " partition not found", 0);
> +#endif
>                 return -ENOENT;
>         }
>
>         if (blk_dread(ep->blk, ep->part.start, ep->count, &envbuf) != ep->count) {
> +#ifdef CONFIG_SCSI_ENV_PART_TYPE_GUID
> +               env_set_default(CONFIG_SCSI_ENV_PART_TYPE_GUID " partition read failed", 0);
> +#else
>                 env_set_default(CONFIG_SCSI_ENV_PART_UUID " partition read failed", 0);
> +#endif
>                 return -EIO;
>         }
>
> --
> 2.34.1
>

Regards,
Simon


More information about the U-Boot mailing list