The branch stable/14 has been updated by mhorne: URL: https://cgit.FreeBSD.org/src/commit/?id=179d779c6427fe0d8a9eedc83c43746e723b187c
commit 179d779c6427fe0d8a9eedc83c43746e723b187c Author: Brian Scott <[email protected]> AuthorDate: 2026-05-11 16:24:46 +0000 Commit: Mitchell Horne <[email protected]> CommitDate: 2026-08-25 17:44:30 +0000 g_part,mkimg: Add additional GPT partition types Add the hifive-fsbl, hifive-bbl, and xbootldr aliases to mkimg(1). Add the xbootldr alias to geom(4), and thus gpart(8). The "hifive" partition types are defined and used by various RISC-V SBCs for locating firmware. "xbootldr", or the Extended Boot Loader Partition is defined here: https://uapi-group.org/specifications/specs/boot_loader_specification/ Reviewed by: emaste, markj, mhorne MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D56784 (cherry picked from commit dab8138e13dea539a387c458979403980a137bf2) (cherry picked from commit 54d0ae979d9596399f33dc7d7245866f86ab7f8e) --- lib/geom/part/gpart.8 | 8 +++++++- sys/geom/part/g_part.c | 1 + sys/geom/part/g_part.h | 2 ++ sys/geom/part/g_part_gpt.c | 2 ++ sys/sys/disk/gpt.h | 2 ++ usr.bin/mkimg/gpt.c | 6 ++++++ usr.bin/mkimg/scheme.c | 3 +++ usr.bin/mkimg/scheme.h | 3 +++ 8 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/geom/part/gpart.8 b/lib/geom/part/gpart.8 index 66c7b7abcf56..120473529207 100644 --- a/lib/geom/part/gpart.8 +++ b/lib/geom/part/gpart.8 @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd April 20, 2026 +.Dd May 12, 2026 .Dt GPART 8 .Os .Sh NAME @@ -1051,6 +1051,12 @@ A partition claimed by VMware VSAN. The scheme-specific type is .Qq Li "!381cfccc-7288-11e0-92ee-000c2911d0b2" for GPT. +.It Cm xbootldr +An Extended Boot Loader Partition (XBOOTLDR), secondary to the EFI system +partition, used to store additional firmware or boot loader menu entries. +The scheme-specific type is +.Qq Li "!bc13c2ff-59e6-4262-a352-b275fd6f7172" +for GPT. .El .Sh ATTRIBUTES The scheme-specific attributes for EBR: diff --git a/sys/geom/part/g_part.c b/sys/geom/part/g_part.c index 02c550d74620..d7cc260a751a 100644 --- a/sys/geom/part/g_part.c +++ b/sys/geom/part/g_part.c @@ -136,6 +136,7 @@ struct g_part_alias_list { { "vmware-vmfs", G_PART_ALIAS_VMFS }, { "vmware-vmkdiag", G_PART_ALIAS_VMKDIAG }, { "vmware-vsanhdr", G_PART_ALIAS_VMVSANHDR }, + { "xbootldr", G_PART_ALIAS_XBOOTLDR }, }; SYSCTL_DECL(_kern_geom); diff --git a/sys/geom/part/g_part.h b/sys/geom/part/g_part.h index 575d97623e9b..1355cfec66a0 100644 --- a/sys/geom/part/g_part.h +++ b/sys/geom/part/g_part.h @@ -108,6 +108,8 @@ enum g_part_alias { G_PART_ALIAS_VMKDIAG, /* A VMware vmkDiagnostic partition entry */ G_PART_ALIAS_VMRESERVED, /* A VMware reserved partition entry */ G_PART_ALIAS_VMVSANHDR, /* A VMware vSAN header partition entry */ + G_PART_ALIAS_XBOOTLDR, /* A Systemd/Linux extended boot partition + Also used by visionfive2 as part of the boot sequence */ /* Keep the following last */ G_PART_ALIAS_COUNT }; diff --git a/sys/geom/part/g_part_gpt.c b/sys/geom/part/g_part_gpt.c index 3e1f8dbde6dc..c93ef8ae567e 100644 --- a/sys/geom/part/g_part_gpt.c +++ b/sys/geom/part/g_part_gpt.c @@ -231,6 +231,7 @@ static struct uuid gpt_uuid_vmfs = GPT_ENT_TYPE_VMFS; static struct uuid gpt_uuid_vmkdiag = GPT_ENT_TYPE_VMKDIAG; static struct uuid gpt_uuid_vmreserved = GPT_ENT_TYPE_VMRESERVED; static struct uuid gpt_uuid_vmvsanhdr = GPT_ENT_TYPE_VMVSANHDR; +static struct uuid gpt_uuid_xbootldr = GPT_ENT_TYPE_XBOOTLDR; static struct g_part_uuid_alias { struct uuid *uuid; @@ -303,6 +304,7 @@ static struct g_part_uuid_alias { { &gpt_uuid_vmkdiag, G_PART_ALIAS_VMKDIAG, 0 }, { &gpt_uuid_vmreserved, G_PART_ALIAS_VMRESERVED, 0 }, { &gpt_uuid_vmvsanhdr, G_PART_ALIAS_VMVSANHDR, 0 }, + { &gpt_uuid_xbootldr, G_PART_ALIAS_XBOOTLDR, 0 }, { NULL, 0, 0 } }; diff --git a/sys/sys/disk/gpt.h b/sys/sys/disk/gpt.h index 426ae835c0c1..65b00f5de733 100644 --- a/sys/sys/disk/gpt.h +++ b/sys/sys/disk/gpt.h @@ -261,6 +261,8 @@ CTASSERT(sizeof(struct gpt_ent) == 128); #define GPT_ENT_TYPE_U_BOOT_ENV \ {0x3de21764,0x95bd,0x54bd,0xa5,0xc3,{0x4a,0xbe,0x78,0x6f,0x38,0xa8}} +#define GPT_ENT_TYPE_XBOOTLDR \ + {0xbc13c2ff,0x59e6,0x4262,0xa3,0x52,{0xb2,0x75,0xfd,0x6f,0x71,0x72}} /* * Boot partition used by GRUB 2. diff --git a/usr.bin/mkimg/gpt.c b/usr.bin/mkimg/gpt.c index 5fae98e0d4ef..dd822d928f39 100644 --- a/usr.bin/mkimg/gpt.c +++ b/usr.bin/mkimg/gpt.c @@ -50,6 +50,9 @@ static mkimg_uuid_t gpt_uuid_freebsd_zfs = GPT_ENT_TYPE_FREEBSD_ZFS; static mkimg_uuid_t gpt_uuid_mbr = GPT_ENT_TYPE_MBR; static mkimg_uuid_t gpt_uuid_ms_basic_data = GPT_ENT_TYPE_MS_BASIC_DATA; static mkimg_uuid_t gpt_uuid_prep_boot = GPT_ENT_TYPE_PREP_BOOT; +static mkimg_uuid_t gpt_uuid_hifive_bbl = GPT_ENT_TYPE_HIFIVE_BBL; +static mkimg_uuid_t gpt_uuid_xbootldr = GPT_ENT_TYPE_XBOOTLDR; +static mkimg_uuid_t gpt_uuid_hifive_fsbl = GPT_ENT_TYPE_HIFIVE_FSBL; static struct mkimg_alias gpt_aliases[] = { { ALIAS_EFI, ALIAS_PTR2TYPE(&gpt_uuid_efi) }, @@ -64,6 +67,9 @@ static struct mkimg_alias gpt_aliases[] = { { ALIAS_MS_BASIC_DATA, ALIAS_PTR2TYPE(&gpt_uuid_ms_basic_data) }, { ALIAS_NTFS, ALIAS_PTR2TYPE(&gpt_uuid_ms_basic_data) }, { ALIAS_PPCBOOT, ALIAS_PTR2TYPE(&gpt_uuid_prep_boot) }, + { ALIAS_HIFIVE_BBL, ALIAS_PTR2TYPE(&gpt_uuid_hifive_bbl) }, + { ALIAS_XBOOTLDR, ALIAS_PTR2TYPE(&gpt_uuid_xbootldr) }, + { ALIAS_HIFIVE_FSBL, ALIAS_PTR2TYPE(&gpt_uuid_hifive_fsbl) }, { ALIAS_NONE, 0 } /* Keep last! */ }; diff --git a/usr.bin/mkimg/scheme.c b/usr.bin/mkimg/scheme.c index 0af86f6d9111..7e2829d7d50b 100644 --- a/usr.bin/mkimg/scheme.c +++ b/usr.bin/mkimg/scheme.c @@ -57,6 +57,9 @@ static struct { { "ms-basic-data", ALIAS_MS_BASIC_DATA }, { "ntfs", ALIAS_NTFS }, { "prepboot", ALIAS_PPCBOOT }, + { "hifive-bbl", ALIAS_HIFIVE_BBL }, + { "xbootldr", ALIAS_XBOOTLDR }, + { "hifive-fsbl", ALIAS_HIFIVE_FSBL }, { NULL, ALIAS_NONE } /* Keep last! */ }; diff --git a/usr.bin/mkimg/scheme.h b/usr.bin/mkimg/scheme.h index 693f04983624..cb6806ce7979 100644 --- a/usr.bin/mkimg/scheme.h +++ b/usr.bin/mkimg/scheme.h @@ -46,6 +46,9 @@ enum alias { ALIAS_MS_BASIC_DATA, ALIAS_NTFS, ALIAS_PPCBOOT, + ALIAS_HIFIVE_BBL, + ALIAS_XBOOTLDR, + ALIAS_HIFIVE_FSBL, /* end */ ALIAS_COUNT /* Keep last! */ };
