public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v4 4/7] usb_storage: Remove EHCI constraints
Date: Fri, 10 Aug 2012 18:23:25 +0200 (CEST)	[thread overview]
Message-ID: <908848653.2278400.1344615805820.JavaMail.root@advansee.com> (raw)
In-Reply-To: <277000258.2278273.1344615697596.JavaMail.root@advansee.com>

Now that the EHCI driver allocates its qTDs from the heap, the MSC driver is
only limited by the SCSI commands it uses.

Signed-off-by: Beno?t Th?baudeau <benoit.thebaudeau@advansee.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Ilya Yanok <ilya.yanok@cogentembedded.com>
Cc: Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
---
Changes for v2: None.
Changes for v3:
 - Patch swapped with the currently preceding one.
Changes for v4: None.

 .../common/usb_storage.c                           |   33 +++++++++-----------
 1 file changed, 15 insertions(+), 18 deletions(-)

diff --git u-boot-usb-4f8254e.orig/common/usb_storage.c u-boot-usb-4f8254e/common/usb_storage.c
index 0cd6399..822bd64 100644
--- u-boot-usb-4f8254e.orig/common/usb_storage.c
+++ u-boot-usb-4f8254e/common/usb_storage.c
@@ -157,12 +157,13 @@ struct us_data {
 
 #ifdef CONFIG_USB_EHCI
 /*
- * The U-Boot EHCI driver cannot handle more than 5 page aligned buffers
- * of 4096 bytes in a transfer without running itself out of qt_buffers
+ * The U-Boot EHCI driver can handle any transfer length as long as there is
+ * enough free heap space left, but the SCSI READ(10) and WRITE(10) commands are
+ * limited to 65535 bytes.
  */
-#define USB_MAX_XFER_BLK(start, blksz)	(((4096 * 5) - (start % 4096)) / blksz)
+#define USB_MAX_XFER_BLK	65535
 #else
-#define USB_MAX_XFER_BLK(start, blksz)	20
+#define USB_MAX_XFER_BLK	20
 #endif
 
 static struct us_data usb_stor[USB_MAX_STOR_DEV];
@@ -1050,7 +1051,7 @@ static void usb_bin_fixup(struct usb_device_descriptor descriptor,
 unsigned long usb_stor_read(int device, unsigned long blknr,
 			    unsigned long blkcnt, void *buffer)
 {
-	unsigned long start, blks, buf_addr, max_xfer_blk;
+	unsigned long start, blks, buf_addr;
 	unsigned short smallblks;
 	struct usb_device *dev;
 	struct us_data *ss;
@@ -1092,14 +1093,12 @@ unsigned long usb_stor_read(int device, unsigned long blknr,
 		/* XXX need some comment here */
 		retry = 2;
 		srb->pdata = (unsigned char *)buf_addr;
-		max_xfer_blk = USB_MAX_XFER_BLK(buf_addr,
-						usb_dev_desc[device].blksz);
-		if (blks > max_xfer_blk)
-			smallblks = (unsigned short) max_xfer_blk;
+		if (blks > USB_MAX_XFER_BLK)
+			smallblks = USB_MAX_XFER_BLK;
 		else
 			smallblks = (unsigned short) blks;
 retry_it:
-		if (smallblks == max_xfer_blk)
+		if (smallblks == USB_MAX_XFER_BLK)
 			usb_show_progress();
 		srb->datalen = usb_dev_desc[device].blksz * smallblks;
 		srb->pdata = (unsigned char *)buf_addr;
@@ -1120,7 +1119,7 @@ retry_it:
 			start, smallblks, buf_addr);
 
 	usb_disable_asynch(0); /* asynch transfer allowed */
-	if (blkcnt >= max_xfer_blk)
+	if (blkcnt >= USB_MAX_XFER_BLK)
 		debug("\n");
 	return blkcnt;
 }
@@ -1128,7 +1127,7 @@ retry_it:
 unsigned long usb_stor_write(int device, unsigned long blknr,
 				unsigned long blkcnt, const void *buffer)
 {
-	unsigned long start, blks, buf_addr, max_xfer_blk;
+	unsigned long start, blks, buf_addr;
 	unsigned short smallblks;
 	struct usb_device *dev;
 	struct us_data *ss;
@@ -1173,14 +1172,12 @@ unsigned long usb_stor_write(int device, unsigned long blknr,
 		 */
 		retry = 2;
 		srb->pdata = (unsigned char *)buf_addr;
-		max_xfer_blk = USB_MAX_XFER_BLK(buf_addr,
-						usb_dev_desc[device].blksz);
-		if (blks > max_xfer_blk)
-			smallblks = (unsigned short) max_xfer_blk;
+		if (blks > USB_MAX_XFER_BLK)
+			smallblks = USB_MAX_XFER_BLK;
 		else
 			smallblks = (unsigned short) blks;
 retry_it:
-		if (smallblks == max_xfer_blk)
+		if (smallblks == USB_MAX_XFER_BLK)
 			usb_show_progress();
 		srb->datalen = usb_dev_desc[device].blksz * smallblks;
 		srb->pdata = (unsigned char *)buf_addr;
@@ -1201,7 +1198,7 @@ retry_it:
 			start, smallblks, buf_addr);
 
 	usb_disable_asynch(0); /* asynch transfer allowed */
-	if (blkcnt >= max_xfer_blk)
+	if (blkcnt >= USB_MAX_XFER_BLK)
 		debug("\n");
 	return blkcnt;
 

  parent reply	other threads:[~2012-08-10 16:23 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-09 21:50 [U-Boot] [PATCH v3 1/8] ehci: cosmetic: Define used constants Benoît Thébaudeau
2012-08-09 22:25 ` Marek Vasut
2012-08-09 23:13   ` Benoît Thébaudeau
2012-08-09 23:14     ` Marek Vasut
2012-08-09 23:28       ` Benoît Thébaudeau
2012-08-09 23:28         ` Marek Vasut
2012-08-10  0:53           ` Benoît Thébaudeau
2012-08-10  1:12             ` Marek Vasut
2012-08-10 16:21 ` [U-Boot] [PATCH v4 0/7] ehci: Improve performance Benoît Thébaudeau
2012-08-10 16:22   ` [U-Boot] [PATCH v4 1/7] ehci: cosmetic: Define used constants Benoît Thébaudeau
2012-08-10 16:22   ` [U-Boot] [PATCH v4 2/7] ehci-hcd: Boost transfer speed Benoît Thébaudeau
2012-08-10 16:22   ` [U-Boot] [PATCH v4 0/7] ehci: Improve performance Benoît Thébaudeau
2012-08-10 16:23   ` Benoît Thébaudeau [this message]
2012-08-10 18:34     ` [U-Boot] [PATCH v4 4/7] usb_storage: Remove EHCI constraints Ilya Yanok
2012-08-10 18:43       ` Benoît Thébaudeau
2012-08-10 19:34         ` Marek Vasut
2012-08-10 16:23   ` [U-Boot] [PATCH v4 5/7] usb_storage: Adjust time-outs Benoît Thébaudeau
2012-08-10 18:03     ` Ilya Yanok
2012-08-10 18:39       ` Benoît Thébaudeau
2012-08-10 16:26   ` [U-Boot] [PATCH v4 3/7] usb_storage: Restore non-EHCI support Benoît Thébaudeau
2012-08-10 16:27   ` [U-Boot] [PATCH v4 6/7] usb_stor_BBB_transport: Do not delay when not required Benoît Thébaudeau
2012-08-10 16:27   ` [U-Boot] [PATCH v4 7/7] ehci: Optimize qTD allocations Benoît Thébaudeau
2012-08-10 20:07   ` [U-Boot] [PATCH v4 0/7] ehci: Improve performance Marek Vasut
2012-08-11 20:42     ` Benoît Thébaudeau
2012-08-11 22:10       ` Marek Vasut

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=908848653.2278400.1344615805820.JavaMail.root@advansee.com \
    --to=benoit.thebaudeau@advansee.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox