Hi, On 6/10/21 2:59 PM, AKASHI Takahiro wrote: > On Thu, Jun 10, 2021 at 02:31:46PM +0200, Michal Simek wrote: >> >> >> On 6/10/21 12:51 PM, Heinrich Schuchardt wrote: >>> On 6/10/21 12:04 PM, Michal Simek wrote: >>>> Hi, >>>> >>>> On 6/10/21 11:47 AM, Heinrich Schuchardt wrote: >>>>> On 6/10/21 10:44 AM, Michal Simek wrote: >>>>>> Hi, >>>>>> >>>>>> I am playing with booting from USB via EFI. And I see very weird >>>>>> behavior. I have burnt image with grub to USB flashdisk and I have >>>>>> tested it on 3 zynqmp boards. zcu102, zcu104 and SOM Kria board. >>>>>> On zcu102 grub is going to boot menu and everything is working fine as >>>>>> expected. >>>>>> On zcu104 and SOM Kria I am able to get grub not to menu. When I list >>>>>> partitions in grub I see that only SDs are listed: >>>>>> grub> ls >>>>>> (hd0) (hd0,msdos1) (hd1) (hd1,msdos1) >>>>> >>>>> Hello Michal, >>>>> >>>>> thanks for sharing your observations. >>>>> >>>>> What devices do hd0 and hd1 relate to? >>>>> >>>>>> >>>>>> On zcu102(working board) I also see usb(gpt) partitions and SD. >>>>>> grub> ls >>>>>> (hd0) (hd0,gpt2) (hd0,gpt1) (hd1) (hd1,msdos1) >>>>>> >>>>> >>>>> GPT and MBR partitioning are independent of the device type. >>>>> >>>>>> >>>>>> On zcu104 I see one more error message >>>>>> "PE image measurement failed" >>>>> >>>>> This is related to CONFIG_EFI_TCG2_PROTOCOL=y. Do you have a TPMv2? This >>>>> will not stop disk enumeration. >>>>> >>>>>> But I can't see it on SOM. >>>>>> >>>>>> U-Boot image is just the same for all boards. I am using generic >>>>>> xilinx_zynqmp_virt_defconfig. >>>>>> >>>>>> When I compare DT description for USB between zcu102 and zcu104 they >>>>>> are >>>>>> the same. SOM doesn't have usb enabled by default (but I enabled it) >>>>>> but >>>>>> grub starts which means that communication with USB is fine. >>>>>> >>>>>> It is based on my latest patches available here. >>>>>> u-boot/custodians/u-boot-microblaze.git (usb-efi-issue branch) >>>>>> >>>>>> Also when I list usb I see all partitions just fine. >>>>>> ZynqMP> part list usb 0 >>>>>> >>>>>> Partition Map for USB device 0 -- Partition Type: EFI >>>>>> >>>>>> Part Start LBA End LBA Name >>>>>> Attributes >>>>>> Type GUID >>>>>> Partition GUID >>>>>> 1 0x00000800 0x001007fe "Microsoft basic data" >>>>>> attrs: 0x0000000000000000 >>>>>> type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 >>>>>> type: data >>>>>> guid: 0e7f8b3d-296b-4720-be9d-c4687d3c4a77 >>>>>> 2 0x00100800 0x001197fe "Microsoft basic data" >>>>>> attrs: 0x0000000000000000 >>>>>> type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 >>>>>> type: data >>>>>> guid: 8892eddc-231a-4e6e-a5e1-c310f4482fb7 >>>>>> >>>>>> >>>>>> Do you have any idea why on one system is working fine to get to menu >>>>>> and on others there is an issue to get all partitions even u-boot is >>>>>> able to see them and can work with them. >>>>>> >>>>>> Thanks, >>>>>> Michal >>>>>> >>>>> >>>>> Where is the GRUB binary? - If it is in EFI/boot/bootaa64.efi, it could >>>>> be that the USB sub-system is simply not initialized yet when the boot >>>>> manager is called by distroboot. >>>>> >>>>> For testing partition detection in the UEFI sub-system it is enough >>>>> to run >>>>> >>>>> efidebug devices >>>>> >>>>> Until yesterday we had a problem with partition numbers >= 10, cf. >>>>> >>>>> efi_loader: partition numbers are hexadecimal >>>>> https://source.denx.de/u-boot/u-boot/-/commit/3dca77b1dc1b6dbf9c8b51572fe4b0553cef009f >>>>> >>>>> >>>>> >>>>> Block devices are enumerated in efi_disk_register(). Please, try to add >>>>> debug output there to elucidate the problem. >>>> >>>> I found where the problem is. First of all zcu102 didn't use the same >>>> image as others (it wasn't updated properly). >>>> When you have CONFIG_EFI_CAPSULE_ON_DISK_EARLY that efi_disk_register() >>>> is called before usb block devices are detected and registered that's >>>> why grub doesn't see them. >>> >>> The problem is CONFIG_EFI_SETUP_EARLY=y required by >>> CONFIG_EFI_CAPSULE_ON_DISK_EARLY. >>> >>> Why is USB initialized later then MMC? >> >> It is not just usb. SCSI/sata are behaving in the same way too. >> >>> >>> Overall we have a deficiency in the UEFI implementation in that we >>> cannot deal with block devices added or removed after initialization. >>> >>> Here integration with the driver model is missing. >> >> Right. And also there are commands which can create MBR partitions and I >> expect when you write image to SD and then run rescan or so you could >> get other partitions too. >> Maybe hook via part_init()? with removing efi_disk_register. > > For the record, I have proposed my ideas several times[1], [2]. > I'm, however, no longer working on this issue as I have shifted > my focus to UEFI secure boot and capsule update. > > -Takahiro Akashi > > [1] https://lists.denx.de/pipermail/u-boot/2018-November/347491.html > [2] https://lists.denx.de/pipermail/u-boot/2019-February/357923.html
I want to continue on this thread. I have disabled EFI_CAPSULE_ON_DISK_EARLY some time ago and trying to workaround that usb/scsi detection by simply calling usb reset and scsi reset as the part of PREBOOT. Then all disks are recorded and visible by grub. But I found another issue which is kind of weird. We are using distroboot with soft of fixed sequence. Important part of sequence is sd, usb, scsi. I have added grub on scsi and when I boot directly via run bootcmd_scsi0 everything is working fine. When I let distroboot to do the job it or run printenv -e before bootcmd_scsi0 I am getting exception. >From debug it is visible that it is exception called from efi_disk_read_blocks. 0 0x7ff5d188 hang()+20: include/bootstage.h, line 389 1 0x7ff5f908 __assert_fail(): lib/panic.c, line 25 2 0x7fe976a8 do_irq(): arch/arm/lib/interrupts_64.c, line 123 3 0x7fe96a0c _restore_regs()+124: arch/arm/cpu/armv8/exceptions.S, line 141 4 0x7ff43740 efi_disk_read_blocks()+160: lib/efi_loader/efi_disk.c, line 102 Logs are below and there is different place where disks are registered. Do you have any idea what could go wrong? Or something to check? Thanks, Michal U-Boot 2021.10-rc1-00014-g81168a994f90 (Jul 29 2021 - 15:37:11 +0200) Model: ZynqMP ZCU102 Rev1.0 Board: Xilinx ZynqMP DRAM: 4 GiB PMUFW: v1.1 Xilinx I2C Legacy format at nvmem0: Board name: zcu102 Board rev: 1.0 Board SN: 847316301727-67998 Ethernet mac: 00:0a:35:03:70:f6 EL Level: EL2 Chip ID: zu9eg WDT: Not found! NAND: 0 MiB MMC: mmc@ff170000: 0 Loading Environment from FAT... *** Error - No Valid Environment Area found *** Warning - bad env area, using default environment In: serial Out: serial Err: serial Bootmode: LVL_SHFT_SD_MODE1 Reset reason: SOFT Net: ZYNQ GEM: ff0e0000, mdio bus ff0e0000, phyaddr 12, interface rgmii-id eth0: ethernet@ff0e0000 Reset SCSI scanning bus for devices... SATA link 0 timeout. Target spinup took 0 ms. AHCI 0001.0301 32 slots 2 ports 6 Gbps 0x3 impl SATA mode flags: 64bit ncq pm clo only pmp fbss pio slum part ccc apst Device 0: (1:0) Vendor: ATA Prod.: Maxtor 7V300F0 Rev: VA11 Type: Hard Disk Capacity: 286188.8 MB = 279.4 GB (586114704 x 512) resetting USB... Bus dwc3@fe200000: Register 2000440 NbrPorts 2 Starting the controller USB XHCI 1.00 scanning bus dwc3@fe200000 for devices... 1 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found Hit any key to stop autoboot: 0 ZynqMP> ZynqMP> ZynqMP> run bootcmd_scsi0 scanning bus for devices... Device 0: (1:0) Vendor: ATA Prod.: Maxtor 7V300F0 Rev: VA11 Type: Hard Disk Capacity: 286188.8 MB = 279.4 GB (586114704 x 512) Device 0: (1:0) Vendor: ATA Prod.: Maxtor 7V300F0 Rev: VA11 Type: Hard Disk Capacity: 286188.8 MB = 279.4 GB (586114704 x 512) ... is now current device Scanning scsi 0:1... libfdt fdt_check_header(): FDT_ERR_BADMAGIC Scanning disk m...@ff170000.blk... Scanning disk ahci_scsi.id1lun0... Found 5 disks ** Unable to read file ubootefi.var ** Failed to load EFI variables Unable to find TPMv2 device DFU alt info setting: done BootOrder not defined EFI boot manager: Cannot load any image Found EFI removable media binary efi/boot/bootaa64.efi 647168 bytes read in 23 ms (26.8 MiB/s) libfdt fdt_check_header(): FDT_ERR_BADMAGIC Booting /efi\boot\bootaa64.efi PE image measurement failed Welcome to GRUB! GNU GRUB version 2.11 all good here. ... U-Boot 2021.10-rc1-00014-g81168a994f90 (Jul 29 2021 - 15:37:11 +0200) Model: ZynqMP ZCU102 Rev1.0 Board: Xilinx ZynqMP DRAM: 4 GiB PMUFW: v1.1 Xilinx I2C Legacy format at nvmem0: Board name: zcu102 Board rev: 1.0 Board SN: 847316301727-67998 Ethernet mac: 00:0a:35:03:70:f6 EL Level: EL2 Chip ID: zu9eg WDT: Not found! NAND: 0 MiB MMC: mmc@ff170000: 0 Loading Environment from FAT... *** Error - No Valid Environment Area found *** Warning - bad env area, using default environment In: serial Out: serial Err: serial Bootmode: LVL_SHFT_SD_MODE1 Reset reason: SOFT Net: ZYNQ GEM: ff0e0000, mdio bus ff0e0000, phyaddr 12, interface rgmii-id eth0: ethernet@ff0e0000 Reset SCSI scanning bus for devices... SATA link 0 timeout. Target spinup took 0 ms. AHCI 0001.0301 32 slots 2 ports 6 Gbps 0x3 impl SATA mode flags: 64bit ncq pm clo only pmp fbss pio slum part ccc apst Device 0: (1:0) Vendor: ATA Prod.: Maxtor 7V300F0 Rev: VA11 Type: Hard Disk Capacity: 286188.8 MB = 279.4 GB (586114704 x 512) resetting USB... Bus dwc3@fe200000: Register 2000440 NbrPorts 2 Starting the controller USB XHCI 1.00 scanning bus dwc3@fe200000 for devices... 1 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found Hit any key to stop autoboot: 0 ZynqMP> ZynqMP> ZynqMP> print -e Scanning disk m...@ff170000.blk... Scanning disk ahci_scsi.id1lun0... Found 5 disks ** Unable to read file ubootefi.var ** Failed to load EFI variables Unable to find TPMv2 device DFU alt info setting: done SecureBoot: 8be4df61-93ca-11d2-aa0d-00e098032b8c EFI_GLOBAL_VARIABLE_GUID BS|RT|RO, DataSize = 0x1 00000000: 00 . SetupMode: 8be4df61-93ca-11d2-aa0d-00e098032b8c EFI_GLOBAL_VARIABLE_GUID BS|RT|RO, DataSize = 0x1 00000000: 01 . AuditMode: 8be4df61-93ca-11d2-aa0d-00e098032b8c EFI_GLOBAL_VARIABLE_GUID BS|RT|RO, DataSize = 0x1 00000000: 00 . DeployedMode: 8be4df61-93ca-11d2-aa0d-00e098032b8c EFI_GLOBAL_VARIABLE_GUID BS|RT|RO, DataSize = 0x1 00000000: 00 . VendorKeys: 8be4df61-93ca-11d2-aa0d-00e098032b8c EFI_GLOBAL_VARIABLE_GUID BS|RT|RO, DataSize = 0x1 00000000: 00 . PlatformLangCodes: 8be4df61-93ca-11d2-aa0d-00e098032b8c EFI_GLOBAL_VARIABLE_GUID BS|RT|RO, DataSize = 0x6 00000000: 65 6e 2d 55 53 00 en-US. PlatformLang: 8be4df61-93ca-11d2-aa0d-00e098032b8c EFI_GLOBAL_VARIABLE_GUID NV|BS|RT, DataSize = 0x6 00000000: 65 6e 2d 55 53 00 en-US. OsIndicationsSupported: 8be4df61-93ca-11d2-aa0d-00e098032b8c EFI_GLOBAL_VARIABLE_GUID BS|RT|RO, DataSize = 0x8 00000000: 1c 00 00 00 00 00 00 00 ........ SignatureSupport: 8be4df61-93ca-11d2-aa0d-00e098032b8c EFI_GLOBAL_VARIABLE_GUID BS|RT|RO, DataSize = 0x20 00000000: 26 16 c4 c1 4c 50 92 40 ac a9 41 f9 36 93 43 28 &...LP.@..A.6.C( 00000010: a1 59 c0 a5 e4 94 a7 4a 87 b5 ab 15 5c 2b f0 72 .Y.....J....\+.r OsIndications: 8be4df61-93ca-11d2-aa0d-00e098032b8c EFI_GLOBAL_VARIABLE_GUID NV|BS|RT, DataSize = 0x8 00000000: 00 00 00 00 00 00 00 00 ........ ZynqMP> run bootcmd_scsi0 scanning bus for devices... Device 0: (1:0) Vendor: ATA Prod.: Maxtor 7V300F0 Rev: VA11 Type: Hard Disk Capacity: 286188.8 MB = 279.4 GB (586114704 x 512) Device 0: (1:0) Vendor: ATA Prod.: Maxtor 7V300F0 Rev: VA11 Type: Hard Disk Capacity: 286188.8 MB = 279.4 GB (586114704 x 512) ... is now current device Scanning scsi 0:1... libfdt fdt_check_header(): FDT_ERR_BADMAGIC BootOrder not defined EFI boot manager: Cannot load any image Found EFI removable media binary efi/boot/bootaa64.efi 647168 bytes read in 24 ms (25.7 MiB/s) libfdt fdt_check_header(): FDT_ERR_BADMAGIC Booting /efi\boot\bootaa64.efi PE image measurement failed Welcome to GRUB! "Synchronous Abort" handler, esr 0x02000000 elr: ffffffffa816c5b0 lr : 000000000805e218 (reloc) elr: 00000000200005b0 lr : 000000007fef2218 x0 : 0000000000000020 x1 : 0000000000000000 x2 : 0000000000000040 x3 : 000000004ff49400 x4 : 00000000200005b0 x5 : 000000007be4abb0 x6 : 000000007ffa5230 x7 : 000000007ffa5230 x8 : 0000000000000006 x9 : fffffffffffffff0 x10: 0000000000000001 x11: 000000007be4abb0 x12: 0000000000000040 x13: 0000000000000200 x14: 000000007fe95208 x15: 0000000000000000 x16: 0000000077d4f8d0 x17: 0000000000000000 x18: 000000007be13da0 x19: 000000007be22340 x20: 0000000000000020 x21: 0000000000000040 x22: 0000000000000000 x23: 000000004ff49400 x24: 0000000000000000 x25: 0000000000000100 x26: 000000000000000f x27: 00000000000001ff x28: 000000007be4cb40 x29: 000000007be06ec0 Code: 000165fa 0b2d05de 0000ffff 00000000 (20000590) UEFI image [0x0000000077d48000:0x0000000077de5fff] '/efi\boot\bootaa64.efi' Resetting CPU ... ### ERROR ### Please RESET the board ###