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 <[email protected]> --- 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)) + 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

