[PATCH 0/2] efi_loader: provide media ID

AKASHI Takahiro takahiro.akashi at linaro.org
Fri Sep 16 02:58:05 CEST 2022


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
> 


More information about the U-Boot mailing list