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

Varadarajan Narayanan varadarajan.narayanan at oss.qualcomm.com
Thu Jan 8 10:41:37 CET 2026


On Thu, Jan 08, 2026 at 12:19:46PM +0530, Balaji Selvanathan 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

Should we add

	depends on ENV_IS_IN_SCSI && !SCSI_ENV_PART_UUID

and similarly vice versa in SCSI_ENV_PART_UUID since the code seems to
handle them as mutually exclusive...

-Varada

> +	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))
> +		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
>


More information about the U-Boot mailing list