From 848759c2362fc60fef8aa76f2adeb228af3cae65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20=C5=A0tetiar?= Date: Fri, 2 Jun 2023 13:48:38 +0200 Subject: uboot-armsr: add support for QEMU armv7/armv8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add new package so we can use self-compiled bootloader during QEMU based testing and development. Backported fix[1] is needed for EFI boot from virtio devices. 1. https://patchwork.ozlabs.org/project/uboot/patch/20230424134946.v10.7.Ia5f5e39c882ac22b5f71c4d576941b34e868eeba@changeid/ Signed-off-by: Petr Štetiar (cherry picked from commit b8e3fa2d1205213c71bc356744e9bed6cd8e69f9) --- package/boot/uboot-armsr/Makefile | 36 +++++++++++++ ...-uclass-device-numbers-to-set-efi-bootdev.patch | 62 ++++++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 package/boot/uboot-armsr/Makefile create mode 100644 package/boot/uboot-armsr/patches/001-v2023.07-bootstd-Use-blk-uclass-device-numbers-to-set-efi-bootdev.patch (limited to 'package/boot/uboot-armsr') diff --git a/package/boot/uboot-armsr/Makefile b/package/boot/uboot-armsr/Makefile new file mode 100644 index 0000000000..ce53d19b79 --- /dev/null +++ b/package/boot/uboot-armsr/Makefile @@ -0,0 +1,36 @@ +include $(TOPDIR)/rules.mk + +PKG_VERSION:=2023.04 +PKG_RELEASE:=1 + +PKG_HASH:=e31cac91545ff41b71cec5d8c22afd695645cd6e2a442ccdacacd60534069341 + +include $(INCLUDE_DIR)/u-boot.mk +include $(INCLUDE_DIR)/package.mk + +define U-Boot/Default + BUILD_TARGET:=armsr +endef + +define U-Boot/qemu_armv7 + NAME:=QEMU ARM Virtual Machine 32-bit + BUILD_SUBTARGET:=armv7 + BUILD_DEVICES:=generic + UBOOT_CONFIG:=qemu_arm +endef + +define U-Boot/qemu_armv8 + NAME:=QEMU ARM Virtual Machine 64-bit + BUILD_SUBTARGET:=armv8 + BUILD_DEVICES:=generic + UBOOT_CONFIG:=qemu_arm64 +endef + +UBOOT_TARGETS := \ + qemu_armv7 \ + qemu_armv8 + +UBOOT_CUSTOMIZE_CONFIG := \ + --enable CMD_EFIDEBUG + +$(eval $(call BuildPackage/U-Boot)) diff --git a/package/boot/uboot-armsr/patches/001-v2023.07-bootstd-Use-blk-uclass-device-numbers-to-set-efi-bootdev.patch b/package/boot/uboot-armsr/patches/001-v2023.07-bootstd-Use-blk-uclass-device-numbers-to-set-efi-bootdev.patch new file mode 100644 index 0000000000..f4c8118952 --- /dev/null +++ b/package/boot/uboot-armsr/patches/001-v2023.07-bootstd-Use-blk-uclass-device-numbers-to-set-efi-bootdev.patch @@ -0,0 +1,62 @@ +From: Simon Glass +To: U-Boot Mailing List +Subject: [PATCH v10 7/9] bootstd: Use blk uclass device numbers to set efi + bootdev +Date: Mon, 24 Apr 2023 13:49:50 +1200 +Message-ID: + <20230424134946.v10.7.Ia5f5e39c882ac22b5f71c4d576941b34e868eeba@changeid> + +From: Mathew McBride + +When loading a file from a block device, efiload_read_file +was using the seq_num of the device (e.g "35" of virtio_blk#35) +instead of the block device id (e.g what you get from running +the corresponding device scan command, like "virtio 0") + +This cause EFI booting from these devices to fail as an +invalid device number is passed to blk_get_device_part_str: + + Scanning bootdev 'virtio-blk#35.bootdev': + distro_efi_read_bootflow_file start (efi,fname=) + distro_efi_read_bootflow_file start (efi,fname=) + setting bootdev virtio, 35, efi/boot/bootaa64.efi, 00000000beef9a40, 170800 + efi_dp_from_name calling blk_get_device_part_str + dev=virtio devnr=35 path=efi/boot/bootaa64.efi + blk_get_device_part_str (virtio,35) + blk_get_device_by_str (virtio, 35) + ** Bad device specification virtio 35 ** + Using default device tree: dtb/qemu-arm.dtb + No device tree available + 0 efi ready virtio 1 virtio-blk#35.bootdev.par efi/boot/bootaa64.efi + ** Booting bootflow 'virtio-blk#35.bootdev.part_1' with efi + blk_get_device_part_str (virtio,0:1) + blk_get_device_by_str (virtio, 0) + No UEFI binary known at beef9a40 (image buf=00000000beef9a40,addr=0000000000000000) + Boot failed (err=-22) + +Signed-off-by: Mathew McBride +Signed-off-by: Simon Glass +Signed-off-by: Petr Štetiar [backport to 2023.04] +--- + +(no changes since v8) + +Changes in v8: +- Add new patch to use blk uclass device numbers to set efi bootdev + + boot/bootmeth_efi.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/boot/bootmeth_efi.c ++++ b/boot/bootmeth_efi.c +@@ -117,7 +117,9 @@ static int efiload_read_file(struct blk_ + * this can go away. + */ + media_dev = dev_get_parent(bflow->dev); +- snprintf(devnum_str, sizeof(devnum_str), "%x", dev_seq(media_dev)); ++ snprintf(devnum_str, sizeof(devnum_str), "%x:%x", ++ desc ? desc->devnum : dev_seq(media_dev), ++ bflow->part); + + strlcpy(dirname, bflow->fname, sizeof(dirname)); + last_slash = strrchr(dirname, '/'); -- cgit v1.2.3