001-v2023.07-bootstd-Use-blk-uclass-device-numbers-to-set-efi-bootdev.patch 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. From: Simon Glass <[email protected]>
  2. To: U-Boot Mailing List <[email protected]>
  3. Subject: [PATCH v10 7/9] bootstd: Use blk uclass device numbers to set efi
  4. bootdev
  5. Date: Mon, 24 Apr 2023 13:49:50 +1200
  6. Message-ID:
  7. <20230424134946.v10.7.Ia5f5e39c882ac22b5f71c4d576941b34e868eeba@changeid>
  8. From: Mathew McBride <[email protected]>
  9. When loading a file from a block device, efiload_read_file
  10. was using the seq_num of the device (e.g "35" of virtio_blk#35)
  11. instead of the block device id (e.g what you get from running
  12. the corresponding device scan command, like "virtio 0")
  13. This cause EFI booting from these devices to fail as an
  14. invalid device number is passed to blk_get_device_part_str:
  15. Scanning bootdev 'virtio-blk#35.bootdev':
  16. distro_efi_read_bootflow_file start (efi,fname=<NULL>)
  17. distro_efi_read_bootflow_file start (efi,fname=<NULL>)
  18. setting bootdev virtio, 35, efi/boot/bootaa64.efi, 00000000beef9a40, 170800
  19. efi_dp_from_name calling blk_get_device_part_str
  20. dev=virtio devnr=35 path=efi/boot/bootaa64.efi
  21. blk_get_device_part_str (virtio,35)
  22. blk_get_device_by_str (virtio, 35)
  23. ** Bad device specification virtio 35 **
  24. Using default device tree: dtb/qemu-arm.dtb
  25. No device tree available
  26. 0 efi ready virtio 1 virtio-blk#35.bootdev.par efi/boot/bootaa64.efi
  27. ** Booting bootflow 'virtio-blk#35.bootdev.part_1' with efi
  28. blk_get_device_part_str (virtio,0:1)
  29. blk_get_device_by_str (virtio, 0)
  30. No UEFI binary known at beef9a40 (image buf=00000000beef9a40,addr=0000000000000000)
  31. Boot failed (err=-22)
  32. Signed-off-by: Mathew McBride <[email protected]>
  33. Signed-off-by: Simon Glass <[email protected]>
  34. Signed-off-by: Petr Štetiar <[email protected]> [backport to 2023.04]
  35. ---
  36. (no changes since v8)
  37. Changes in v8:
  38. - Add new patch to use blk uclass device numbers to set efi bootdev
  39. boot/bootmeth_efi.c | 3 ++-
  40. 1 file changed, 2 insertions(+), 1 deletion(-)
  41. --- a/boot/bootmeth_efi.c
  42. +++ b/boot/bootmeth_efi.c
  43. @@ -117,7 +117,9 @@ static int efiload_read_file(struct blk_
  44. * this can go away.
  45. */
  46. media_dev = dev_get_parent(bflow->dev);
  47. - snprintf(devnum_str, sizeof(devnum_str), "%x", dev_seq(media_dev));
  48. + snprintf(devnum_str, sizeof(devnum_str), "%x:%x",
  49. + desc ? desc->devnum : dev_seq(media_dev),
  50. + bflow->part);
  51. strlcpy(dirname, bflow->fname, sizeof(dirname));
  52. last_slash = strrchr(dirname, '/');