So far, we had basically three ways to reference barebox,state on block devices: - On platforms with device tree, we point at a fixed partition described in the DT - On platforms without device tree, we have a custom binding that does a global lookup by partuuid (or a more obscure one by diskuuid). Both are less than optimal. The first clashes with the need to use a GPT partition for the state and the second doesn't allow relating the UUID with an actual device for the case where e.g. both an SD-Card and an eMMC are flashed with the same image. This series fixes that by: - Supporting definition of fixed partitions that are identical to GPT/MBR partitions. - Alternatively, support pointing barebox-state backend at a GPT-partitioned device and the partition with the barebox-state Type GUID will be taken. Ahmad Fatoum (18): common: partitions: decouple from EFI GUID definition efi: define efi_guid_t as 32-bit aligned guid_t cdev: fix for_each_cdev macro of: partition: support of_partition_ensure_probed on parent device of: of_path: always call of_partition_ensure_probed before resolving driver: add new cdev_is_partition helper commands: stat: remove code duplication for type info cdev: use more descriptive struct cdev::diskuuid/partuuid cdev: record whether partition is parsed from OF cdev: have devfs_add_partition return existing identical partition, not NULL block: parse partition table on block device registration common: partitions: record whether disk is GPT or MBR partitioned block: add cdev_is_block_(device,partition,disk) helpers of: export new of_cdev_find helper state: factor device path lookup into helper function cdev: use cdev::dos_partition_type only if cdev_is_mbr_partitioned common: partitions: efi: record type UUID in cdev state: allow lookup of barebox state partition by Type GUID arch/sandbox/board/hostfile.c | 4 --- common/block.c | 6 ++++ common/blspec.c | 2 +- common/bootm.c | 2 +- common/partitions.c | 4 +-- common/partitions/dos.c | 4 ++- common/partitions/efi.c | 11 +++--- common/partitions/parser.h | 6 +++- common/state/state.c | 56 +++++++++++++++++++++++++------ drivers/ata/disk_ata_drive.c | 5 --- drivers/base/driver.c | 2 +- drivers/block/efi-block-io.c | 9 +---- drivers/block/virtio_blk.c | 8 +---- drivers/mci/mci-core.c | 6 ---- drivers/misc/storage-by-uuid.c | 4 +-- drivers/nvme/host/core.c | 5 --- drivers/of/of_path.c | 61 +++++++++++++++++++++++----------- drivers/of/partition.c | 31 +++++++++++++---- drivers/of/platform.c | 2 +- drivers/usb/storage/usb.c | 5 --- fs/devfs-core.c | 60 ++++++++++++++++++++++++--------- fs/fs.c | 33 ++++++++++++------ include/block.h | 15 +++++++++ include/driver.h | 58 +++++++++++++++++++++++++++++--- include/efi.h | 19 ++++++++--- include/efi/partition.h | 27 +++++++-------- include/of.h | 1 + include/state.h | 4 +++ lib/Makefile | 1 + lib/uuid.c | 15 +++++++++ 30 files changed, 328 insertions(+), 138 deletions(-) create mode 100644 lib/uuid.c -- 2.39.2