[PATCH 2/2] disk: expose partition type flags

Mattijs Korpershoek mkorpershoek at baylibre.com
Tue Apr 16 11:49:54 CEST 2024


Hi Caleb,

Thank you for the patch.

On mar., avril 09, 2024 at 15:55, Caleb Connolly <caleb.connolly at linaro.org> wrote:

> GPT partition tables include two bytes worth of vendor defined
> attributes, per partition. ChromeOS and Qualcomm both use these (with
> different encoding!) to handle A/B slot switching with a retry counter.
>
> Expose these via the disk_partition struct so that they can be parsed by
> the relevant board code.
>
> This will be used on Qualcomm boards to determine which slot we're
> booting on so that we can flash capsule updates to the correct one.
>
> Signed-off-by: Caleb Connolly <caleb.connolly at linaro.org>

Reviewed-by: Mattijs Korpershoek <mkorpershoek at baylibre.com>

> ---
>  disk/part_efi.c | 1 +
>  include/part.h  | 1 +
>  2 files changed, 2 insertions(+)
>
> diff --git a/disk/part_efi.c b/disk/part_efi.c
> index 4ce9243ef25c..d3ce4dd01dcd 100644
> --- a/disk/part_efi.c
> +++ b/disk/part_efi.c
> @@ -292,8 +292,9 @@ int part_get_info_efi(struct blk_desc *desc, int part,
>  	snprintf((char *)info->name, sizeof(info->name), "%s",
>  		 print_efiname(&gpt_pte[part - 1]));
>  	strcpy((char *)info->type, "U-Boot");
>  	info->bootable = get_bootable(&gpt_pte[part - 1]);
> +	info->type_flags = gpt_pte[part - 1].attributes.fields.type_guid_specific;
>  	if (CONFIG_IS_ENABLED(PARTITION_UUIDS)) {
>  		uuid_bin_to_str(gpt_pte[part - 1].unique_partition_guid.b,
>  				(char *)disk_partition_uuid(info),
>  				UUID_STR_FORMAT_GUID);
> diff --git a/include/part.h b/include/part.h
> index 32ee40488563..afae51f1b933 100644
> --- a/include/part.h
> +++ b/include/part.h
> @@ -68,8 +68,9 @@ struct disk_partition {
>  	 * PART_BOOTABLE		the MBR bootable flag is set
>  	 * PART_EFI_SYSTEM_PARTITION	the partition is an EFI system partition
>  	 */
>  	int	bootable;
> +	u16	type_flags;	/* top 16 bits of GPT partition attributes	*/
>  #if CONFIG_IS_ENABLED(PARTITION_UUIDS)
>  	char	uuid[UUID_STR_LEN + 1];	/* filesystem UUID as string, if exists	*/
>  #endif
>  #ifdef CONFIG_PARTITION_TYPE_GUID
>
> -- 
> 2.44.0


More information about the U-Boot mailing list