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 6/7] usb_stor_BBB_transport: Do not delay when not required
Date: Fri, 10 Aug 2012 18:27:11 +0200 (CEST)	[thread overview]
Message-ID: <1203370085.2278499.1344616031813.JavaMail.root@advansee.com> (raw)
In-Reply-To: <277000258.2278273.1344615697596.JavaMail.root@advansee.com>

There is a 5-ms delay in usb_stor_BBB_transport, which occurs every 10 kiB of
data for fragmented fatload usb, i.e. roughly 500 ms of delay per MiB. This adds
up to quite a bit of delay if you're loading a large ramdisk.

The purpose of this delay should be to debounce the 5-V/100-mA USB power up.
This patch skips the delay if the device has already been queried as ready.

Signed-off-by: Jim Shimer <mgi2475@motorola.com>

Rework following the review:
 - Rebase against the latest u-boot-usb master.
 - Replace typedef with #define.
 - Use the existing flags struct field instead of adding a new field.
 - Remove the setter function.
 - Remove the typecasts.
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>
Cc: Jim Shimer <mgi2475@motorola.com>
---
Changes for v2: N/A.
Changes for v3:
 - New patch.
Changes for v4: None.

 .../common/usb_storage.c                           |   11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git u-boot-usb-4f8254e.orig/common/usb_storage.c u-boot-usb-4f8254e/common/usb_storage.c
index f0798b2..b000f09 100644
--- u-boot-usb-4f8254e.orig/common/usb_storage.c
+++ u-boot-usb-4f8254e/common/usb_storage.c
@@ -136,6 +136,7 @@ struct us_data {
 	struct usb_device *pusb_dev;	 /* this usb_device */
 
 	unsigned int	flags;			/* from filter initially */
+#	define USB_READY	(1 << 0)
 	unsigned char	ifnum;			/* interface number */
 	unsigned char	ep_in;			/* in endpoint */
 	unsigned char	ep_out;			/* out ....... */
@@ -698,7 +699,8 @@ int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
 		usb_stor_BBB_reset(us);
 		return USB_STOR_TRANSPORT_FAILED;
 	}
-	mdelay(5);
+	if (!(us->flags & USB_READY))
+		mdelay(5);
 	pipein = usb_rcvbulkpipe(us->pusb_dev, us->ep_in);
 	pipeout = usb_sndbulkpipe(us->pusb_dev, us->ep_out);
 	/* DATA phase + error handling */
@@ -963,8 +965,10 @@ static int usb_test_unit_ready(ccb *srb, struct us_data *ss)
 		srb->cmd[1] = srb->lun << 5;
 		srb->datalen = 0;
 		srb->cmdlen = 12;
-		if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD)
+		if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD) {
+			ss->flags |= USB_READY;
 			return 0;
+		}
 		usb_request_sense(srb, ss);
 		mdelay(100);
 	} while (retries--);
@@ -1114,6 +1118,7 @@ retry_it:
 		blks -= smallblks;
 		buf_addr += srb->datalen;
 	} while (blks != 0);
+	ss->flags &= ~USB_READY;
 
 	USB_STOR_PRINTF("usb_read: end startblk %lx, blccnt %x buffer %lx\n",
 			start, smallblks, buf_addr);
@@ -1193,6 +1198,7 @@ retry_it:
 		blks -= smallblks;
 		buf_addr += srb->datalen;
 	} while (blks != 0);
+	ss->flags &= ~USB_READY;
 
 	USB_STOR_PRINTF("usb_write: end startblk %lx, blccnt %x buffer %lx\n",
 			start, smallblks, buf_addr);
@@ -1404,6 +1410,7 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
 		cap[0] = 2880;
 		cap[1] = 0x200;
 	}
+	ss->flags &= ~USB_READY;
 	USB_STOR_PRINTF("Read Capacity returns: 0x%lx, 0x%lx\n", cap[0],
 			cap[1]);
 #if 0

  parent reply	other threads:[~2012-08-10 16:27 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   ` [U-Boot] [PATCH v4 4/7] usb_storage: Remove EHCI constraints Benoît Thébaudeau
2012-08-10 18:34     ` 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   ` Benoît Thébaudeau [this message]
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=1203370085.2278499.1344616031813.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