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. Changelog written in each patch Ahmad Fatoum (19): 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 state: fix deep probe handling 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 | 4 ++ 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 | 50 ++++++++++++++++++------ 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 | 69 ++++++++++++++++++++++++---------- drivers/of/partition.c | 46 ++++++++++++++++++++--- drivers/of/platform.c | 2 +- drivers/usb/storage/usb.c | 5 --- fs/devfs-core.c | 67 +++++++++++++++++++++++++-------- fs/fs.c | 33 +++++++++++----- include/block.h | 15 ++++++++ include/driver.h | 60 ++++++++++++++++++++++++++--- 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, 351 insertions(+), 139 deletions(-) create mode 100644 lib/uuid.c -- 2.39.2