]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - common/usb_storage.c
mmc: omap_hsmmc: use a default 52MHz max clock rate if none is specified
[people/ms/u-boot.git] / common / usb_storage.c
index 957ccdb29730eafa9ad5aed456f82b555d47fbc4..a91b1c0d2f925eed06881d14ab85afe398eac423 100644 (file)
@@ -939,10 +939,14 @@ do_retry:
        return USB_STOR_TRANSPORT_FAILED;
 }
 
-static void usb_stor_set_max_xfer_blk(struct us_data *us)
+static void usb_stor_set_max_xfer_blk(struct usb_device *udev,
+                                     struct us_data *us)
 {
        unsigned short blk;
+       size_t __maybe_unused size;
+       int __maybe_unused ret;
 
+#ifndef CONFIG_DM_USB
 #ifdef CONFIG_USB_EHCI_HCD
        /*
         * The U-Boot EHCI driver can handle any transfer length as long as
@@ -953,6 +957,17 @@ static void usb_stor_set_max_xfer_blk(struct us_data *us)
 #else
        blk = 20;
 #endif
+#else
+       ret = usb_get_max_xfer_size(udev, (size_t *)&size);
+       if (ret < 0) {
+               /* unimplemented, let's use default 20 */
+               blk = 20;
+       } else {
+               if (size > USHRT_MAX * 512)
+                       size = USHRT_MAX * 512;
+               blk = size / 512;
+       }
+#endif
 
        us->max_xfer_blk = blk;
 }
@@ -1393,7 +1408,7 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
        }
 
        /* Set the maximum transfer size per host controller setting */
-       usb_stor_set_max_xfer_blk(ss);
+       usb_stor_set_max_xfer_blk(dev, ss);
 
        dev->privptr = (void *)ss;
        return 1;