git: 179d779c6427 - stable/14 - g_part,mkimg: Add additional GPT partition types

From: Mitchell Horne <mhorne_at_FreeBSD.org>
Date: Tue, 25 Aug 2026 17:45:37 UTC
The branch stable/14 has been updated by mhorne:

URL: https://cgit.FreeBSD.org/src/commit/?id=179d779c6427fe0d8a9eedc83c43746e723b187c

commit 179d779c6427fe0d8a9eedc83c43746e723b187c
Author:     Brian Scott <bscott@bunyatech.com.au>
AuthorDate: 2026-05-11 16:24:46 +0000
Commit:     Mitchell Horne <mhorne@FreeBSD.org>
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! */
 };