On Thu, Sep 15, 2022 at 10:02:40PM +0200, Heinrich Schuchardt wrote: > The medium a device like 'mmc 0' or 'usb 0' points to may change over > time. Hence device type and number are not sufficient to identify the > inserted medium. The same is true for the device path generated for > such a device.
Well, it depends on how a device path is generated in U-Boot's UEFI implementation. I believe that a device path represents an "unique path" to a given device however this device is enumerated. In this sense, the current dp_fill()/efi_dp_from_part() is not a right implementation as it relies on device numbers. Furthermore, a generated device path here is different from one generated by EDK2 (even if both software are run on the same board). This is an issue that I used to tackle in https://lists.denx.de/pipermail/u-boot/2021-November/468216.html although I have since had no progress. > This is why the EFI_BLOCK_IO_PROTOCOL provides a field > MediaId. > > Whenever a removable medium is changed or a new block device with a > previously used device path is created we should provide a different > MediaID. > > This series adds a field media_id to the block device descriptor and fills > it after probing. The value of the field is then copied to the > EFI_BLOCK_IO_PROTOCOL. I'm afraid that your patch doesn't always work as you expect. When "scsi rescan" or "usb stop; usb start", for instance, is invoked, all the existing devices and associated blk_desc structures are once freed and even if nothing is changed, i.e. a device is neither removed nor added, the exact same structures will be re-created. With your patch applied, however, a new (and different) "media_id" will be assigned to an existing device. UEFI User may be notified of "media change". (To be honest, this is quite unlikely because the current UEFI implementation doesn't use BLOCK_IO_PROTOCOL internally, say, for file system access.) -Takahiro Akashi > With future patches we can refine this in sub-systems like USB, MMC, SCSI > to indicate media changes > > Heinrich Schuchardt (2): > dm: blk: assign media ID to block devices > efi_loader: fill media_id from block device descriptor > > drivers/block/blk-uclass.c | 16 +++++++++++++++- > include/blk.h | 11 +++++++++++ > lib/efi_loader/efi_disk.c | 6 +----- > 3 files changed, 27 insertions(+), 6 deletions(-) > > -- > 2.37.2 >