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

Peter Robinson pbrobinson at gmail.com
Mon Feb 19 11:53:22 CET 2024


On Mon, 19 Feb 2024 at 10:24, Mark Kettenis <mark.kettenis at xs4all.nl> wrote:
>
> > From: Peter Robinson <pbrobinson at gmail.com>
> > Date: Mon, 19 Feb 2024 09:12:15 +0000
> >
> > 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.
>
> Hi Peter,
>
> Any reason not to include 0x0c as well?  That is what we use on
> OpenBSD/armv7 and OpenBSD/arm64.  And as far as I know all UEFI
> implementations (on arm64 at least) boot from such a partition.

I wasn't 100% the support with LBA so I erred with caution, but no
reason I can't add it.

> (And yes, we use that partition type because we want to have a
> bootable image that works on the various Raspberry Pi models).

Yes, that is the same reason for us, plus a few other random other Arm
devices that won't recognise EF as VFAT and won't boot.

> That said, what problem does this fix?  And what happens if we have
> both a 0xea and a 0x01/0x06/0x0b/0x0c partition?  In that case U-Boot
> should probably prefer the 0xea over the others as the ESP.

The reason is because the support to write EFI vars on ESP, and yes I
realise it's got security issues but for most boards it's the least of
their problem, as the support won't do that without the flag and you
get a bunch of these on boot:

No EFI system partition
Failed to persist EFI variables

As for multiple partitions UEFI should handle that and I believe the
EFI var support has logic around which partition it chooses.

> Oh, and while your're at it, the hex constants are a bit inconsistent
> (0x1/0x6 vs. 0x0b).

Will fix with v2 when I add 0x0c, I'll await other feedback for a bit.

Thanks,
Peter

> Cheers,
>
> Mark
>
> > Signed-off-by: Peter Robinson <pbrobinson at gmail.com>
> > ---
> >  disk/part_dos.c | 6 ++++++
> >  1 file changed, 6 insertions(+)
> >
> > diff --git a/disk/part_dos.c b/disk/part_dos.c
> > index 567ead7511d..303eb1d13ee 100644
> > --- a/disk/part_dos.c
> > +++ b/disk/part_dos.c
> > @@ -40,6 +40,12 @@ static int get_bootable(dos_partition_t *p)
> >  {
> >       int ret = 0;
> >
> > +     if (p->sys_ind == 0x1)
> > +             ret |= PART_EFI_SYSTEM_PARTITION;
> > +     if (p->sys_ind == 0x6)
> > +             ret |= PART_EFI_SYSTEM_PARTITION;
> > +     if (p->sys_ind == 0x0b)
> > +             ret |= PART_EFI_SYSTEM_PARTITION;
> >       if (p->sys_ind == 0xef)
> >               ret |= PART_EFI_SYSTEM_PARTITION;
> >       if (p->boot_ind == 0x80)
> > --
> > 2.43.1
> >
> >


More information about the U-Boot mailing list