[resend PATCH v4] disk: dos: Add all options for EFI System Partitions
    Heinrich Schuchardt 
    heinrich.schuchardt at canonical.com
       
    Thu Oct 23 14:00:59 CEST 2025
    
    
  
On 10/8/25 16:08, Peter Robinson wrote:
> The EFI spec states that the ESP can be any of FAT12/16/32 but for
> compatibility doesn't necssarily require the partition to be the
> EFI partition table ID of 0xef. A number of arm devices will not
> find their firmware on a FAT partition with an ID of 0xef so also
> allow the original FAT12/16/32 partition IDs as they are also
> permissable for an ESP.
> 
> Signed-off-by: Peter Robinson <pbrobinson at gmail.com>
> Reviewed-by: Mark Kettenis <kettenis at openbsd.org>
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
Hello Peter,
Please, read the Microsoft documentation:
"The Extensible Firmware Interface System Partitions on an MBR disk is 
identified by partition type 0xEF." [1]
The other partition types like 0x06 have non-ESP use and should never be 
taken for an ESP.
Updating partition tables is trivial. Just fix the buggy partition table 
entry on your ARM devices instead of this cumbersome patch.
Best regards
Heinrich
[1]
https://learn.microsoft.com/en-us/troubleshoot/windows-server/backup-and-storage/guid-partitioning-table-disk-faq
> ---
> 
> 
> v2:
> - Add 0x0c option
> - Make hex constants consistent
> - Move from if to switch statement
> v3:
> - Fix switch brain fart
> v4:
> - Drop boot_ind out of switch
> 
> This is just a resend, it fell off my radar, and there was a CI failure.
> 
>   disk/part_dos.c | 13 ++++++++++++-
>   1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/disk/part_dos.c b/disk/part_dos.c
> index 18dd35c9b98..92d6fa6e028 100644
> --- a/disk/part_dos.c
> +++ b/disk/part_dos.c
> @@ -39,10 +39,21 @@ static int get_bootable(dos_partition_t *p)
>   {
>   	int ret = 0;
>   
> -	if (p->sys_ind == 0xef)
> +	switch (p->sys_ind) {
> +	case 0x01:
> +	case 0x06:
> +	case 0x0b:
> +	case 0x0c:
> +	case 0xef:
>   		ret |= PART_EFI_SYSTEM_PARTITION;
> +		break;
> +	default:
> +		break;
> +	}
> +
>   	if (p->boot_ind == 0x80)
>   		ret |= PART_BOOTABLE;
> +
>   	return ret;
>   }
>   
    
    
More information about the U-Boot
mailing list