[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