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

Balaji Selvanathan balaji.selvanathan at oss.qualcomm.com
Fri Jan 9 08:15:07 CET 2026


Hi Varada,

On 1/8/2026 3:11 PM, Varadarajan Narayanan wrote:
> 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

Introduced a choice config (in this respin: 
https://lore.kernel.org/u-boot/20260109070912.4106466-4-balaji.selvanathan@oss.qualcomm.com/) 
as suggested by Tom Rini.

Regards,

Balaji

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