[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