Re: Dealing with slow USB disks, was: Re: Saving environment variables in u-boot

From: Mark Millard via freebsd-arm <freebsd-arm_at_freebsd.org>
Date: Tue, 04 Jan 2022 09:31:14 UTC
On 2022-Jan-4, at 01:03, Mark Millard via freebsd-arm <freebsd-arm@freebsd.org> wrote:

> On 2022-Jan-1, at 18:58, bob prohaska <fbsd@www.zefox.net> wrote:
> 
>> Coming back to the saving of u-boot environment variables,
>> backing down to a much older set of FAT files seems to help.
>> 
>> The machine now has a DOS-only microSD with an old set of
>> files:
>> 
>> root@pelorus:/mnt # strings start.elf | grep "VC_BUILD_ID_"
>> VC_BUILD_ID_USER: dc4
>> VC_BUILD_ID_TIME: 15:31:38
>> VC_BUILD_ID_BRANCH: master
>> VC_BUILD_ID_TIME: Jun  7 2018
> 
> I've no clue what the status is for this vintage of RPi* firmware.
> But it is not obvious that the RPi* firmware is what enabled
> saving u-boot environment variables: the U-Boot vintage may be
> what made the difference. (It would not be the FreeeBSD loader
> that makes the difference: not involved until too late to
> contribute to the issue.)
> 
>> With this suite of bootfiles it's possible to save a value for
>> usb_pgood_delay of 19000, which in most cases results in a hands-
>> off detection of the usb hard disk (via a powered hub):
> 
> I do not see anything here identifying the U-Boot vintage used.
> But the vintage may be tied to the save working.

I may have implicitly presumed that the U-Boot vintage supports
presenting a UEFI interface. I've no clue what vintage such was
first good in.

Thus, I may be implicitly indicating requirements on the U-Boot
vintage used when I suggest FreeBSD loader related material.

>> MMC:   mmc@7e300000: 1
>> Loading Environment from FAT... OK
>> In:    serial
>> Out:   vidconsole
>> Err:   vidconsole
>> Bus usb@7e980000: scanning bus usb@7e980000 for devices... 6 USB Device(s) found
>>      scanning usb for storage devices... 1 Storage Device(s) found
>> Hit any key to stop autoboot:  0
>> 
>> Intervention with run bootcmd_usb0 gives a successful boot from USB. 
>> If nothing is touched, the console displays: 
>> 
>> MMC Device 0 not found
>> no mmc device at slot 0
>> switch to partitions #0, OK
>> mmc1 is current device
>> Scanning mmc 1:1...
>> Found EFI removable media binary efi/boot/bootaa64.efi
>> BootOrder not defined
>> libfdt fdt_check_header(): FDT_ERR_BADMAGIC
> 
> I do not see anything here identifying the FreeBSD loader.efi
> vintage used. Likely it need not be old?
> 
>> Consoles: EFI console
>>   Reading loader env vars from /efi/freebsd/loader.env
> 
> It might be possible to tell the FreeBSD loader to use the
> USB drive via the content of the /efi/freebsd/loader.env
> file on the microsd card's msdos file system. Likely this
> file would need to be created.
> 
> For all I know setting rootdev ( or currdev ?) to the
> appropriate disk?p?: text might do such. (That notation
> presumes UFS, ZFS. ZFS uses zfs:DATASETNOTATION: I've
> never tried using /efi/freebsd/loader.env and I've never
> found documentation in the system. But there are notes
> in:
> 
> https://reviews.freebsd.org/rS346879
> 
> Given that wording, I'm not sure just where
> /efi/freebsd/loader.env ends up being relative to in the
> msdos file system. I've not done much analysis of the
> code that is also listed.
> 
> There also is a loaddev that seems to be involved.
> 
> I expect that in some respects part of what is described
> in:
> 
> # man loader_simp
> 
> applies to the contents of /efi/freebsd/loader.env . But
> Other things may not, such as rootdev being used to
> initialize currdev .
> 
>> Setting currdev to disk0p1:
>> FreeBSD/arm64 EFI loader, Revision 1.1
>> 
>>  Command line arguments: loader.efi
>>  Image base: 0x39e91000
>>  EFI version: 2.80
>>  EFI Firmware: Das U-Boot (rev 8217.4096)
>>  Console: comconsole (0)
>>  Load Path: /efi\boot\bootaa64.efi
>>  Load Device: /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/SD(1)/SD(0)/HD(1,0x
>> 01,0,0x81f,0x18fa8)
>> Trying ESP: /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/SD(1)/SD(0)/HD(1,0x01,0
>> ,0x81f,0x18fa8)
>> Setting currdev to disk0p1:
> 
> /efi/freebsd/loader.env content might be able to control the above?
> 
>> Trying: /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/SD(1)/SD(0)/HD(2,0x01,0,0x1
>> 97c7,0x7726839)
>> Setting currdev to disk0p2:
> 
> /efi/freebsd/loader.env content might be able to control the above?
> 
>> Startup error in /boot/lua/loader.lua:
>> LUA ERROR: cannot open /boot/lua/loader.lua: no such file or directory.
>> 
>> Type '?' for a list of commands, 'help' for more detailed help.
>> 
>> It looks like the root device is still the microSD card,
> 
> /efi/freebsd/loader.env content might be able to control the
> kernel load device (via indirectly or directly controlling
> the currdev value), possibly via assigning the rootdev value
> so that it will be copied to currdev ?
> 
>> even though
>> the USB disk has been found. Any suggestions appreciated. There's a
>> complete and recent ports tree if it's helpful, attempts to use it 
>> on my own have caused more trouble than they've solved, in particular
>> that's what lead to the "saving to FAT....FAILED" messages. .  


I'll note that the code from https://reviews.freebsd.org/rS346879
that added reading /efi/freebsd/loader.env if it exists was
not committed until 2019-Apr-28, well after "Jun  7 2018" (the only
date I have for your context). The FreeBSD loader in the msdos file
system would need to be from after the 2019-Apr-28 commit involved.
My guess is that a modern one would be fine, but it is just a guess.

Setting rootdev via U-Boot may be another alternative that might not
have such a vintage-tie involved.

===
Mark Millard
marklmi at yahoo.com