[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 09:51:28 CET 2026


Hi Simon,

On 1/8/2026 11:12 PM, Simon Glass wrote:
> 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)
Thanks for the feedback.

In this respin 
https://lore.kernel.org/u-boot/20260109070912.4106466-4-balaji.selvanathan@oss.qualcomm.com/, 
I've introduced a choice statement in env/Kconfig to ensure mutual 
exclusivity between CONFIG_SCSI_ENV_PART_UUID and 
CONFIG_SCSI_ENV_PART_TYPE_GUID.

Due to this choice-based configuration, only one of these string configs 
is defined at compile time. When I attempted to use `if 
(IS_ENABLED(...))` for the string concatenation cases, I encountered 
compilation errors because the compiler tries to evaluate both branches, 
but the undefined config macro causes an "undeclared identifier" error.

For example:

if (IS_ENABLED(CONFIG_SCSI_ENV_PART_USE_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);  // Error: CONFIG_SCSI_ENV_PART_UUID undeclared

Given this constraint with mutually exclusive string configs, I've kept 
the #ifdef approach for these specific cases. I understand the 
preference for IS_ENABLED() for its compile-time checking benefits, but 
in this scenario with string concatenation, the preprocessor conditional 
appears to be necessary.

Would this approach be acceptable, or would you prefer an alternative 
solution?

Best regards,
Balaji
>
>> +               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