]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
env: mmc: select GPT env partition by type guid
authorPatrick Delaunay <patrick.delaunay@foss.st.com>
Thu, 10 Nov 2022 10:49:03 +0000 (11:49 +0100)
committerTom Rini <trini@konsulko.com>
Tue, 10 Jan 2023 17:37:09 +0000 (12:37 -0500)
Since commit c0364ce1c695 ("doc/README.gpt: define partition type GUID for
U-Boot environment"), a specific type GUID can be used to indicate
the U-Boot environment partition on the device with GPT partition table.

This patch uses this type GUID to found the env partition as fallback
when the partition name property "u-boot,mmc-env-partition" is not present
in config node or if the indicated partition name is not found.

The mmc_offset_try_partition() function is reused, it selects the first
partition with the correct type GUID when the parameter 'str' is NULL.

Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
env/mmc.c

index 1894b6483220a04c80fc8d3c9a4b9719f655c502..bd7d51e6b633c2e5de7e746170b337b86d5b1cfb 100644 (file)
--- a/env/mmc.c
+++ b/env/mmc.c
@@ -74,8 +74,18 @@ static inline int mmc_offset_try_partition(const char *str, int copy, s64 *val)
                if (ret < 0)
                        return ret;
 
-               if (!strncmp((const char *)info.name, str, sizeof(info.name)))
+               if (str && !strncmp((const char *)info.name, str, sizeof(info.name)))
                        break;
+#ifdef CONFIG_PARTITION_TYPE_GUID
+               if (!str) {
+                       const efi_guid_t env_guid = PARTITION_U_BOOT_ENVIRONMENT;
+                       efi_guid_t type_guid;
+
+                       uuid_str_to_bin(info.type_guid, type_guid.b, UUID_STR_FORMAT_GUID);
+                       if (!memcmp(&env_guid, &type_guid, sizeof(efi_guid_t)))
+                               break;
+               }
+#endif
        }
 
        /* round up to info.blksz */
@@ -112,6 +122,13 @@ static inline s64 mmc_offset(int copy)
                        return val;
        }
 
+       /* try the GPT partition with "U-Boot ENV" TYPE GUID */
+       if (IS_ENABLED(CONFIG_PARTITION_TYPE_GUID)) {
+               err = mmc_offset_try_partition(NULL, copy, &val);
+               if (!err)
+                       return val;
+       }
+
        defvalue = ENV_MMC_OFFSET;
        propname = dt_prop.offset;