12-29-2018, 11:27 AM
So I've still been having some intermittent boot issues with my USB3 SATA drive. Every now and then u-boot randomly gives me this result during the usb startup process:
Usually calling reset a few times fixes the issue, which is fine if I'm at home but when this happens remotely I can't do anything about it. Until now!
I've been playing with the u-boot environment a bit and decided to try a custom bootcmd to keep trying the usb until it magically just works. Doing this bypasses the default distro_bootcmd which calls into the sd, mmc, usb, and PXE boot options, so if you use any of these alternate boot options you may not want to do this. I'm only interested in the usb boot device, so this setup just repeats the usb boot attempt until it succeeds or the sun burns out.
If you're having intermittent problems with your usb bootup and want to try this, you can type the following in at your u-boot console:
It's not a perfect solution, but it hasn't failed me yet so far. It seems to get the storage device properly on the 2nd attempt every time (unless the 1st attempt works of course), but I've only been running this for a little bit. I think this problem stems from the usb controller being in a bugged state which is why the forced retry manages to get it to start properly by resetting the adapter into a valid state.
In case you try this but want to restore the system default boot sequence, just type the following at the u-boot console:
Code:
Hit any key to stop autoboot: 0
resetting USB...
USB0: USB EHCI 1.00
USB1: USB OHCI 1.0
USB2: Core Release: 3.10a
USB3: Register 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.10
scanning bus 0 for devices... 1 USB Device(s) found
scanning bus 1 for devices... 1 USB Device(s) found
scanning bus 2 for devices... 1 USB Device(s) found
scanning bus 3 for devices... cannot reset port 1!?
1 USB Device(s) found
scanning usb for storage devices... 0 Storage Device(s) found
Usually calling reset a few times fixes the issue, which is fine if I'm at home but when this happens remotely I can't do anything about it. Until now!
I've been playing with the u-boot environment a bit and decided to try a custom bootcmd to keep trying the usb until it magically just works. Doing this bypasses the default distro_bootcmd which calls into the sd, mmc, usb, and PXE boot options, so if you use any of these alternate boot options you may not want to do this. I'm only interested in the usb boot device, so this setup just repeats the usb boot attempt until it succeeds or the sun burns out.
If you're having intermittent problems with your usb bootup and want to try this, you can type the following in at your u-boot console:
Code:
env set bootcmd 'itest 0 == 1; while itest $? != 0; do run usb_bootretry; done'
env set usb_bootretry 'setenv devnum 0; usb reset; if usb dev ${devnum}; then setenv devtype usb; run scan_dev_for_boot_part; fi'
env save
It's not a perfect solution, but it hasn't failed me yet so far. It seems to get the storage device properly on the 2nd attempt every time (unless the 1st attempt works of course), but I've only been running this for a little bit. I think this problem stems from the usb controller being in a bugged state which is why the forced retry manages to get it to start properly by resetting the adapter into a valid state.
In case you try this but want to restore the system default boot sequence, just type the following at the u-boot console:
Code:
env set bootcmd 'run distro_bootcmd'
env save