Re: EDK2 on RPi3 was: Re: u-boot debug, was: Re: U-boot on RPI3, sees disk but won't boot it
Date: Wed, 05 Oct 2022 17:29:28 UTC
On 2022-Oct-5, at 09:07, bob prohaska <fbsd@www.zefox.net> wrote: > . . . > >> There is such a thing as a pre-built debug EDK2 build, >> at least for RPi4 EDK2. If there is for RPi3 EDK2, >> then we might be able to get more message text. But >> it need not lead to avoiding the problem. >> > > I gather you're suggesting that debugging delays in EDK2 > might not have the same effect as debugging delays in u-boot? > Would it still be worth trying if available? They still would be problematical. But we did learn things like that the root hub in the RPi3 was having odd behavior via U-Boot --even if we did not find a solution to your overall problem. But, it turns out that the "build artifacts" for the official RPi* EDK2 builds have an expiration duration. It has been long enough since the EDK2 releases release that there is no debug build artifact available now. >> >> Note that U-Boot was not involved at any stage this time. > > To my understanding u-boot isn't present, unless I made a > mistake. Are you suggesting something else? No: the point is that the problems are occurring when U-Boot can not contribute to the problems. The problem is in no way U-Boot specific. >> Adjusting U-Boot would be unlikely to prevent this from >> happening. Nor is it likely that adjusting EDK2 could. > > Perhaps, but I don't understand the inference... yet. > AIUI, EDK2 discovers the parameters the kernel needs to > communicate with the disk and passes them to the kernel. The kernel uses the Device Tree handed over by either U-Boot or EDK2. They in turn start from the 1 that is handed by the RPi* firmware. That in turn starts from .dtb's in the msdosfs. The RPi* firmware and U-Boot/EDK2 can make adjustments to the original .dtb material to cover platform details not handled by the static files in msdosfs. (An example is the 8 GiByte variations with and without the lower-3-GiByte DMA limitation: some address ranges in the final Device Tree vary.) The Device Tree does not reference the specific USB devices plugged in. The FreeBSD kernel handles such on its own. (Such is why it can boot world via USB3 on the Rock64 but U-Boot and the FreeBSD loader do not deal with the USB3 as things are.) FreeBSD's kernel does its own binding and initializations to the USB context(s). > Is this a distiction between reading the disk and writing? I was not referencing that distinction at all. >> Looks like the FreeBSD kernel would have to manage to deal >> with the issue via an error recovery handling. There is >> no evidence to suggest being able to avoid the problem >> occurring. >> >>> . . . >>> usbd_setup_device_desc: getting device descriptor at addr 5 failed, USB_ERR_IOERROR >> >> Looks to be a consequence of the above. >> >>> Root mount waiting for: usbus1 >>> ugen1.5: <JMicron USB Mass Storage> at usbus1 >>> umass0 on uhub2 >>> umass0: <JMicron USB Mass Storage, class 0/0, rev 2.10/2.14, addr 5> on usbus1 >>> umass0: SCSI over Bulk-Only; quirks = 0x8100 >>> umass0:0:0: Attached to scbus0 >>> da0 at umass-sim0 bus 0 scbus0 target 0 lun 0 >>> da0: <SABRENT 0214> Fixed Direct Access SPC-4 SCSI device >>> da0: Serial Number DD564198838F9 >>> da0: 40.000MB/s transfers >>> da0: 953869MB (1953525168 512 byte sectors) >>> da0: quirks=0x2<NO_6_BYTE> >>> ugen1.6: <FTDI FT232R USB UART> at usbus1 >>> ugen1.5: <JMicron USB Mass Storage> at usbus1 (disconnected) >> >> Possibly another consequence? Or a new failure? >> ("addr 5" is, apparently, successfully referenced >> a few lines above. So I'm guessing: new failure.) >> >>> umass0: at uhub2, port 4, addr 5 (disconnected) >>> (da0:umass-sim0:0:0:0): READ(10). CDB: 28 00 74 70 6d af 00 00 01 00 >>> (da0:umass-sim0:0:0:0): CAM status: CCB request completed with an error >>> (da0:umass-sim0:0:0:0): Retrying command, 3 more tries remain > > The "...request completed with an error... line is rather familiar > and in the past has proved innocuous on Pi3 and I think Pi4, though > not seen recently. In various past configurations, I've seen one such message in the kernel's part of the boot sequence historically. I treat it as normal for what FreeBSD does at this stage for some types of RPi* --and that is why I did not comment about it explicitly. >>> . . . > > For now buildworld is still in the building libraries > stage. At the moment it's swap-bound and showing ~750 > MB swap in use at 53% idle. No sign of disk problems > yet. Looks like moutroot is more delicate than I/O. The command sequences are not the same for normal operation vs. binding time. For example, the kind of activity that reports: usb_msc_auto_quirk: UQ_MSC_NO_GETMAXLUN set for USB mass storage device JMicron USB Mass Storage (0x152d:0x0577) usb_msc_auto_quirk: UQ_MSC_NO_PREVENT_ALLOW set for USB mass storage device JMicron USB Mass Storage (0x152d:0x0577) only happens at binding time. And the next message is the first error report: usbd_req_re_enumerate: addr=5, set address failed! (USB_ERR_IOERROR, ignored) There is no evidence that the 0x0577 is doing anything odd for the normal-operation context: No issue to be delicate relative to, for that kind of context. There is evidence that the 0x0577 does odd things for some of the the binding time activities, although the details relative to the status relative to the standards is not clear. I do not have the background to know from the evidence that we have seen, just what violations of the standard by the 0x0577 may be involved vs. what incompletenesses in the FreeBSD binding logic might be vs. both. Binding logic can not reasonably be expected to handle arbitrary violations of the standards --and the 0x0577 context might well be violating the standards. But implementations of binding logic can be incomplete relative to standard-conformant devices as well. So: Unsure. > If there are any EDK2 boot options worth exploring > please indicate. I've seen the help menu but nothing > looks familiar. Nothing in EDK2 or U-Boot is likely to help with avoiding the kernel getting the sequence: usb_msc_auto_quirk: UQ_MSC_NO_GETMAXLUN set for USB mass storage device JMicron USB Mass Storage (0x152d:0x0577) usb_msc_auto_quirk: UQ_MSC_NO_PREVENT_ALLOW set for USB mass storage device JMicron USB Mass Storage (0x152d:0x0577) usbd_req_re_enumerate: addr=5, set address failed! (USB_ERR_IOERROR, ignored) I'm also not aware of anything that would be relevant to avoiding the: BdsDxe: No bootable option or device was found. during EDK2's activity. I will note that FreeBSD likely has debugging notices for the USB binding activities that could be enabled, not that I know such would prove useful. Side note: I got the following once over night: Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: Controller timeout Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: ============== REGISTER DUMP ============== Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: Sys addr: 0x00000000 | Version: 0x00000000 Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: Blk size: 0x00000200 | Blk cnt: 0x00000001 Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: Argument: 0x40510000 | Trn mode: 0x00000000 Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: Present: 0x000b0000 | Host ctl: 0x00000002 Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: Power: 0x0000000f | Blk gap: 0x00000000 Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: Wake-up: 0x00000000 | Clock: 0x00000107 Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: Timeout: 0x00000000 | Int stat: 0x00000000 Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: Int enab: 0x00000000 | Sig enab: 0x01ff00fa Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: AC12 err: 0x00000000 | Host ctl2:0x00000000 Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: Caps: 0x00000000 | Caps2: 0x00000000 Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: Max curr: 0x00000000 | ADMA err: 0x00000000 Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: ADMA addr:0x00000000 | Slot int: 0x00000000 Oct 5 03:01:11 CA72_UFS kernel: sdhost_bcm0-slot0: =========================================== Oct 5 03:01:11 CA72_UFS kernel: mmcsd0: Error indicated: 1 Timeout So, apparently, there can be occasional messages about the microsd card slot for the RPi3 EDK2 context. I've no clue why the messages were produced but I had removed and put back the microsd card earlier in the day, without rebooting between or after. Thus the message lines might also happen for other types of booting, such as via U-Boot, if I'd done similarly. === Mark Millard marklmi at yahoo.com