From: Ben Dooks <ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
To: linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: gregkh-l3A5Bk7waGM@public.gmane.org,
Ben Dooks <ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
Subject: [PATCH 10/11] USB: s3c-hsotg: Fix OUT packet request retry
Date: Mon, 19 Jul 2010 09:40:49 +0100 [thread overview]
Message-ID: <1279528850-28245-11-git-send-email-ben-linux@fluff.org> (raw)
In-Reply-To: <1279528850-28245-1-git-send-email-ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
If there is more data in the request than we could fit into a single
hardware request, then check when the OutDone event is received if
we have more data, and if so, schedule the new data instead of trying
to complete the request (and in the case of EP0, sending a 0 packet
in the middle of a transfer).
Also, move the debug message about the current transfer state before
the warning about a bad transfer.
Signed-off-by: Ben Dooks <ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
---
drivers/usb/gadget/s3c-hsotg.c | 18 +++++++++++-------
1 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
index 552ec89..825b6ca 100644
--- a/drivers/usb/gadget/s3c-hsotg.c
+++ b/drivers/usb/gadget/s3c-hsotg.c
@@ -1383,6 +1383,9 @@ static void s3c_hsotg_rx_data(struct s3c_hsotg *hsotg, int ep_idx, int size)
read_ptr = hs_req->req.actual;
max_req = hs_req->req.length - read_ptr;
+ dev_dbg(hsotg->dev, "%s: read %d/%d, done %d/%d\n",
+ __func__, to_read, max_req, read_ptr, hs_req->req.length);
+
if (to_read > max_req) {
/* more data appeared than we where willing
* to deal with in this request.
@@ -1392,9 +1395,6 @@ static void s3c_hsotg_rx_data(struct s3c_hsotg *hsotg, int ep_idx, int size)
WARN_ON_ONCE(1);
}
- dev_dbg(hsotg->dev, "%s: read %d/%d, done %d/%d\n",
- __func__, to_read, max_req, read_ptr, hs_req->req.length);
-
hs_ep->total_data += to_read;
hs_req->req.actual += to_read;
to_read = DIV_ROUND_UP(to_read, 4);
@@ -1463,9 +1463,11 @@ static void s3c_hsotg_send_zlp(struct s3c_hsotg *hsotg,
static void s3c_hsotg_handle_outdone(struct s3c_hsotg *hsotg,
int epnum, bool was_setup)
{
+ u32 epsize = readl(hsotg->regs + S3C_DOEPTSIZ(epnum));
struct s3c_hsotg_ep *hs_ep = &hsotg->eps[epnum];
struct s3c_hsotg_req *hs_req = hs_ep->req;
struct usb_request *req = &hs_req->req;
+ unsigned size_left = S3C_DxEPTSIZ_XferSize_GET(epsize);
int result = 0;
if (!hs_req) {
@@ -1474,9 +1476,7 @@ static void s3c_hsotg_handle_outdone(struct s3c_hsotg *hsotg,
}
if (using_dma(hsotg)) {
- u32 epsize = readl(hsotg->regs + S3C_DOEPTSIZ(epnum));
unsigned size_done;
- unsigned size_left;
/* Calculate the size of the transfer by checking how much
* is left in the endpoint size register and then working it
@@ -1486,14 +1486,18 @@ static void s3c_hsotg_handle_outdone(struct s3c_hsotg *hsotg,
* so may overshoot/undershoot the transfer.
*/
- size_left = S3C_DxEPTSIZ_XferSize_GET(epsize);
next prev parent reply other threads:[~2010-07-19 8:40 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-19 8:40 S3C HSOTG fixes Ben Dooks
[not found] ` <1279528850-28245-1-git-send-email-ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
2010-07-19 8:40 ` [PATCH 01/11] USB: s3c-hsotg: Increase TX fifo limit Ben Dooks
2010-07-19 8:40 ` [PATCH 03/11] USB: s3c-hsotg: Avoid overwriting contents of perodic in 'fifo' Ben Dooks
2010-07-19 8:40 ` [PATCH 04/11] USB: s3c-hsotg: Re-initialise all FIFOs on USB bus reset Ben Dooks
2010-07-19 8:40 ` [PATCH 06/11] USB: s3c-hsotg: Only load packet per fifo write Ben Dooks
2010-07-19 8:40 ` [PATCH 08/11] USB: s3c-hsotg: Fix max EP0 IN request length Ben Dooks
2010-07-19 8:40 ` Ben Dooks [this message]
2010-07-19 8:40 ` [PATCH 11/11] USB: s3c-hsotg: Add support for external USB clock Ben Dooks
2010-07-19 8:40 ` [PATCH 02/11] USB: s3c-hsotg: The NPTX/PTX FIFO sizes are in words, not bytes Ben Dooks
2010-07-19 8:40 ` [PATCH 05/11] USB: s3c-hsotg: Add initial detection and setup for dedicated FIFO mode Ben Dooks
2010-07-19 8:40 ` [PATCH 07/11] USB: s3c-hsotg: Check for new request before enqueing new setup Ben Dooks
2010-07-19 8:40 ` [PATCH 09/11] USB: s3c-hsotg: Fix the OUT EP0 limit Ben Dooks
-- strict thread matches above, loose matches on Subject: below --
2010-07-07 0:02 s3c-hsotg patches Ben Dooks
2010-07-07 0:02 ` [PATCH 10/11] USB: s3c-hsotg: Fix OUT packet request retry Ben Dooks
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=1279528850-28245-11-git-send-email-ben-linux@fluff.org \
--to=ben-linux-elnmno+kys3ytjvyw6ydsg@public.gmane.org \
--cc=gregkh-l3A5Bk7waGM@public.gmane.org \
--cc=linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.