efi_loader: fix device-path for USB devices
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sun, 19 Mar 2023 15:18:09 +0000 (16:18 +0100)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sat, 25 Mar 2023 10:05:42 +0000 (11:05 +0100)
commite472ef8a3d5e94a0f0bc5ad50a4a86a67316e876
tree031c4130758ef57dfdc0afaef7df3f2288c82d48
parentc5cc6da855c10d762c492d390b1e4059910259d1
efi_loader: fix device-path for USB devices

EFI device paths for block devices must be unique. If a non-unique device
path is discovered, probing of the block device fails.

Currently we use UsbClass() device path nodes. As multiple devices may
have the same vendor and product id these are non-unique. Instead we
should use Usb() device path nodes. They include the USB port on the
parent hub. Hence they are unique.

A USB storage device may contain multiple logical units. These can be
modeled as Ctrl() nodes.

Reported-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
lib/efi_loader/efi_device_path.c