diff mbox series

usb: storage: increase retries to 20

Message ID 91041dfa88e2dc4919ef42fdf2524534bf6a47e3.1600628472.git.stefan@agner.ch
State Rejected
Delegated to: Tom Rini
Headers show
Series usb: storage: increase retries to 20 | expand

Commit Message

Stefan Agner Sept. 20, 2020, 7:01 p.m. UTC
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

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 <stefan@agner.ch>
---
 common/usb_storage.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Stefan Agner Sept. 20, 2020, 7:55 p.m. UTC | #1
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 <stefan@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);
diff mbox series

Patch

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);