[resend PATCH v4] disk: dos: Add all options for EFI System Partitions

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Thu Oct 23 14:14:46 CEST 2025


On 10/23/25 13:00, Heinrich Schuchardt wrote:
> 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.

Hello Peter,

It is U-Boot that reads the ESP. The EFI boot loader is the only thing 
that needs to be there.

You provide no clue why you want to place any firmware on the same 
partition as the EFI binary.

Best regards

Heinrich

>>
>> 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