On 2020-09-20 21:01, Stefan Agner wrote: > A JMicron JMS583 based NVMe to USB 3.1 enclosure connected to a Raspberry > Pi 4 fails to enumerate as a USB Mass Storage device on first try: > > ... > startig USB... > Bus xhci_pci: Register 5000420 NbrPorts 5 > Starting the controller > USB XHCI 1.00 > scanning bus xhci_pci for devces... Device NOT ready > Request Sense returned 02 04 01 > 4 USB Device(s) found > scanning usb for storage devices... 0 Sorage Device(s) found
It turned out, the device was not sufficiently powered. Even after I was able to use U-Boot to boot from it, Linux reported USB resets every ~30s or so. Supplying the device with enough power (e.g. by connecting via powered USB 3.0 Hub) things started to work better: The device was always ready below 1s (8 tries). So it seems that the default of 10 is actually good enough also for this device. -- Stefan > > However, it consistently works on the second try. It seems that the > device takes longer than 1s to detect the media. With debug enabled > it shows that the 11th retry count typically works. > > Increase retries to 20 for a startup time of up to 2s. > > Signed-off-by: Stefan Agner <ste...@agner.ch> > --- > common/usb_storage.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/common/usb_storage.c b/common/usb_storage.c > index ff25441995..04910de21f 100644 > --- a/common/usb_storage.c > +++ b/common/usb_storage.c > @@ -1019,7 +1019,7 @@ static int usb_request_sense(struct scsi_cmd > *srb, struct us_data *ss) > > static int usb_test_unit_ready(struct scsi_cmd *srb, struct us_data *ss) > { > - int retries = 10; > + int retries = 20; > > do { > memset(&srb->cmd[0], 0, 12);