On 8/18/26 21:04, [email protected] wrote:
From: Denis Mukhin <[email protected]>
Partition drivers currently report "U-Boot" as the human-readable
partition type. This does not describe the actual partition and can be
misleading to the users of this information.
Update the human-readable partition type from "U-Boot" to
partition-specific type.
For GUID partitions, when CONFIG_PARTITION_TYPE_GUID is enabled, use
gpt_pte.partition_type_guid.b directly for type reporting.
Update the relevant tests and drop "U-Boot" check in
blk_get_device_part_str() since it can match against
gpt_pte.partition_type_guid.b (e.g. "linux").
Signed-off-by: Denis Mukhin <[email protected]>
---
Changes since v1:
- use gpt_pte.partition_type_guid.b for CONFIG_PARTITION_TYPE_GUID=y
- add per-type partition string names
- updated commit message text
v1: https://lore.kernel.org/u-boot/[email protected]/
CI: https://github.com/u-boot/u-boot/pull/1036
---
disk/part.c | 13 +++----------
disk/part_dos.c | 5 ++---
disk/part_efi.c | 5 ++++-
disk/part_iso.c | 2 +-
include/part.h | 10 ++++++++++
test/dm/scsi.c | 2 +-
6 files changed, 21 insertions(+), 16 deletions(-)
diff --git a/disk/part.c b/disk/part.c
index 4923dc44593c..0661394d2e5d 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -383,7 +383,7 @@ int part_get_info_whole_disk(struct blk_desc *desc,
info->size = desc->lba;
info->blksz = desc->blksz;
info->bootable = 0;
- strcpy((char *)info->type, BOOT_PART_TYPE);
+ strcpy((char *)info->type, PART_TYPE_NAME_UNKNOWN);
strcpy((char *)info->name, "Whole Disk");
disk_partition_clr_uuid(info);
disk_partition_clr_type_guid(info);
@@ -475,7 +475,7 @@ int blk_get_device_part_str(const char *ifname, const char
*dev_part_str,
* host's own filesystem.
*/
if (!strcmp(ifname, "hostfs")) {
- strcpy((char *)info->type, BOOT_PART_TYPE);
+ strcpy((char *)info->type, PART_TYPE_NAME_HOSTFS);
strcpy((char *)info->name, "Host filesystem");
return 0;
@@ -493,7 +493,7 @@ int blk_get_device_part_str(const char *ifname, const char
*dev_part_str,
return -EINVAL;
}
- strcpy((char *)info->type, BOOT_PART_TYPE);
+ strcpy((char *)info->type, PART_TYPE_NAME_UBI);
strcpy((char *)info->name, "UBI");
return 0;
}
@@ -645,13 +645,6 @@ int blk_get_device_part_str(const char *ifname, const char
*dev_part_str,
goto cleanup;
}
}
- if (strncmp((char *)info->type, BOOT_PART_TYPE, sizeof(info->type)) !=
0) {
- printf("** Invalid partition type \"%.32s\""
- " (expect \"" BOOT_PART_TYPE "\")\n",
- info->type);
- ret = -EINVAL;
- goto cleanup;
- }
(*desc)->log2blksz = LOG2((*desc)->blksz);
diff --git a/disk/part_dos.c b/disk/part_dos.c
index 4e1d01b2f21e..2336321dc77e 100644
--- a/disk/part_dos.c
+++ b/disk/part_dos.c
@@ -273,8 +273,7 @@ static int part_get_info_extended(struct blk_desc *desc,
info->size =
(lbaint_t)get_unaligned_le32(&pt->nr_sects);
part_set_generic_name(desc, part_num,
(char *)info->name);
- /* sprintf(info->type, "%d, pt->sys_ind); */
- strcpy((char *)info->type, "U-Boot");
+ strcpy((char *)info->type, PART_TYPE_NAME_DOS);
For GPT partitions the output of the gpt read command looks good with
this patch.
Like GPT partitions, MBR partitions have different types.
For type ef, info->type could be 'EFI System Partition'.
For type 83, info->type could be 'Linux'.
If you don't want a conversion function, write the hex number to info->type:
sprintf(info->type, "%02x", pt->sys_ind);
info->bootable = get_bootable(pt);
if (CONFIG_IS_ENABLED(PARTITION_UUIDS)) {
char str[12];
@@ -321,7 +320,7 @@ static int part_get_info_extended(struct blk_desc *desc,
else
info->blksz = DOS_PART_DEFAULT_SECTOR;
info->bootable = 0;
- strcpy((char *)info->type, "U-Boot");
+ strcpy((char *)info->type, PART_TYPE_NAME_DOS);
disk_partition_clr_uuid(info);
return 0;
}
diff --git a/disk/part_efi.c b/disk/part_efi.c
index d8b17ec2e91a..de7048639a6d 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -304,7 +304,6 @@ static int __maybe_unused part_get_info_efi(struct blk_desc
*desc, int part,
snprintf((char *)info->name, sizeof(info->name), "%s",
print_efiname(&gpt_pte));
- strcpy((char *)info->type, "U-Boot");
info->bootable = get_bootable(&gpt_pte);
info->type_flags = gpt_pte.attributes.fields.type_guid_specific;
if (CONFIG_IS_ENABLED(PARTITION_UUIDS)) {
@@ -316,6 +315,10 @@ static int __maybe_unused part_get_info_efi(struct
blk_desc *desc, int part,
uuid_bin_to_str(gpt_pte.partition_type_guid.b,
(char *)disk_partition_type_guid(info),
UUID_STR_FORMAT_GUID);
+ snprintf((char *)info->type, sizeof(info->type), "%pUs",
+ gpt_pte.partition_type_guid.b);
+ } else {
+ strcpy((char *)info->type, PART_TYPE_NAME_EFI);
}
log_debug("start 0x" LBAF ", size 0x" LBAF ", name %s\n", info->start,
diff --git a/disk/part_iso.c b/disk/part_iso.c
index 6e05b2feffba..7b4e61f2099e 100644
--- a/disk/part_iso.c
+++ b/disk/part_iso.c
@@ -135,7 +135,7 @@ int part_get_info_iso_verb(struct blk_desc *desc, int
part_num,
/* the validation entry seems to be ok, now search the "partition" */
entry_num=1;
offset=0x20;
- strcpy((char *)info->type, "U-Boot");
+ strcpy((char *)info->type, PART_TYPE_NAME_ISO);
part_set_generic_name(desc, part_num, (char *)info->name);
/* the bootcatalog (including validation Entry) is limited to 2048Bytes
* (63 boot entries + validation entry) */
diff --git a/include/part.h b/include/part.h
index 15daacd7faaa..6fee58b290c9 100644
--- a/include/part.h
+++ b/include/part.h
@@ -31,6 +31,16 @@ struct block_drvr {
#define PART_TYPE_MTD 0x06
#define PART_TYPE_UBI 0x07
+#define PART_TYPE_NAME_UNKNOWN "unknown"
+#define PART_TYPE_NAME_MAC "mac"
This is not a valid MAC partition type name.
struct mac_partition has a field uchar type[32].
This is what you should copy in part_get_info_mac().
+#define PART_TYPE_NAME_DOS "dos"
Neither the constant name and nor the value make sense to me.
There is nothing called 'dos' in an MBR partition table.
+#define PART_TYPE_NAME_ISO "iso"
+#define PART_TYPE_NAME_AMIGA "amiga"
I sent a patch to drop the Amiga driver.
+#define PART_TYPE_NAME_EFI "efi"
The table type is GPT not efi.
Best regards
Heinrich
+#define PART_TYPE_NAME_MTD "mtd"
+#define PART_TYPE_NAME_UBI "ubi"
+#define PART_TYPE_NAME_HOSTFS "hostfs"
+
/* maximum number of partition entries supported by search */
#define DOS_ENTRY_NUMBERS 8
#define ISO_ENTRY_NUMBERS 64
diff --git a/test/dm/scsi.c b/test/dm/scsi.c
index fbc36a742446..fbf4d1000a10 100644
--- a/test/dm/scsi.c
+++ b/test/dm/scsi.c
@@ -30,7 +30,7 @@ static int dm_test_scsi_base(struct unit_test_state *uts)
info = &part->gpt_part_info;
ut_asserteq_str("sda1", info->name);
- ut_asserteq_str("U-Boot", info->type);
+ ut_asserteq_str(PART_TYPE_NAME_DOS, info->type);
ut_asserteq(0x83 /* linux */, info->sys_ind);
return 0;