History log of /drivers/usb/dwc3/ep0.c
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
ecb07797ffc1c2aaa2e58d1ba1b5deea44ea5b9e 16-Mar-2012 Gerard Cauvy <g-cauvy1@ti.com> usb: dwc3: ep0: add a default case for SetFeature command

Without this default case returning an error,
thus replying with a stall, we would fail
USB30CV TD 9.11 Bad Feature test case.

Cc: stable@vger.kernel.org
Signed-off-by: Gerard Cauvy <g-cauvy1@ti.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
cd423dd3634a5232a3019eb372b144619a61cd16 21-Mar-2012 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: increment "actual" on bounced ep0 case

due to a HW limitation we have a bounce buffer for ep0
out transfers which are not aligned with MaxPacketSize.

On such case we were not increment r->actual as we should.

This patch fixes that mistake.

Cc: stable@vger.kernel.org
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
566ccdda07dc5898272b6fbad9c616fc44be305a 14-Mar-2012 Moiz Sonasath <m-sonasath@ti.com> usb: dwc3: ep0: Handle requests greater than wMaxPacketSize

To allow ep0 out transfers of upto bounce buffer size
instead of maxpacketsize, use the transfer size as multiple
of ep0 maxpacket size.

Cc: stable@vger.kernel.org
Signed-off-by: Moiz Sonasath <m-sonasath@ti.com>
Signed-off-by: Partha Basak <p-basak2@ti.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
3d71769014c55e05b2342b6d9c1464f7fb383322 03-Mar-2012 Greg Kroah-Hartman <gregkh@linuxfoundation.org> Merge tag 'dwc3-for-v3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-next

usb: dwc3: changes for v3.4 merge window

Here are the changes for v3.4 merge window.

It includes a new glue layer for Samsung's Exynos platform, a simplification of
memory management on DWC3 driver by using dev_xxx functions, a few
optimizations to IRQ handling by dropping memcpy() and using bitshifts, a fix
for TI's OMAP5430 TX Fifo Allocation, two fixes on USB2 test mode
implementation (one on debugfs and one on ep0), and several minor changes such
as whitespace cleanups, simplification of a few parts of the code, decreasing a
long delay to something a bit saner, dropping a header which was included twice
and so on.

The highlight on this merge is the support for Samsung's Exynos platform,
increasing the number of different users for this driver to three.

Note that Samsung Exynos glue layer will only compile on platforms which
provide implementation for the clk API for now. Once Samsung supports
pm_runtime, that limitation can be dropped from the Makefile.

Conflicts:
drivers/usb/dwc3/gadget.c
c2df85ca31645ed3c68c56bd30a3673e034224f1 25-Feb-2012 Paul Zimmerman <Paul.Zimmerman@synopsys.com> usb: dwc3: clear 'res_trans_idx' as soon as it becomes invalid

Transfer resource index is cleared in hardware when XFERCOMPLETE
event is generated, so clear the driver's res_trans_idx variable
immediately after that event is received. The upcoming hibernation
patches depend on this change.

Signed-off-by: Paul Zimmerman <paulz@synopsys.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
1d046793958f128dd43d42a4a0dac48bf6914273 16-Feb-2012 Paul Zimmerman <Paul.Zimmerman@synopsys.com> usb: dwc3: clean up whitespace damage, typos, missing parens, etc.

trivial patch, no functional changes

Signed-off-by: Paul Zimmerman <paulz@synopsys.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
f9b0f5170918695891f42645737682ccb452ee13 01-Mar-2012 Greg Kroah-Hartman <gregkh@linuxfoundation.org> Merge tag 'gadget-for-v3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-next

USB: Gadget: changes for 3.4

This merge is rather big. Here's what it contains:

For am5536udc we have just simple coding style fixes. Nothing that has any
potential to cause any issues going forward.

With mv_udc, there's only one single change removing an unneeded NULL check.

at91_udc also only saw a single change this merge window, and that's only
removing a duplicated header.

The Renesas controller has a few more involved changes. Support for SUDMAC was
added, there's now a special handling of IRQ resources for when the IRQ line is
shared between Renesas controller and SUDMAC, we also had a bug fix where
Renesas controller would sleep in atomic context while doing DMA transfers from
a tasklet. There were also a set of minor cleanups.

The FSL UDC also had a scheduling in atomic context bug fix, but that's all.

Thanks to Sebastian, the dummy_hcd now works better than ever with support for
scatterlists and streams. Sebastian also added SuperSpeed descriptors to the
serial gadgets.

The highlight on this merge is the addition of a generic API for mapping and
unmapping usb_requests. This will avoid code duplication on all UDC controllers
and also kills all the defines for DMA_ADDR_INVALID which UDC controllers
sprinkled around. A few of the UDC controllers were already converted to use
this new API.

Conflicts:
drivers/usb/dwc3/gadget.c
0fc9a1be09d9f8b19bcf64ab96836cb92beb0970 19-Dec-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: gadget: use generic map/unmap routines

those routines have everything we need to map/unmap
USB requests and it's better to use them.

In order to achieve that, we had to add a simple
change on how we allocate and use our setup buffer;
we cannot allocate it from coherent anymore otherwise
the generic map/unmap routines won't be able to easily
know that the GetStatus request already has a DMA
address.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
f6bafc6a1c9d58f0c234ac5052b9c09b0747348c 06-Feb-2012 Felipe Balbi <balbi@ti.com> usb: dwc3: convert TRBs into bitshifts

this will get rid of a useless memcpy on
IRQ handling, thus improving driver performance.

Tested with OMAP5430 running g_mass_storage on
SuperSpeed and HighSpeed.

Note that we are removing the little endian access
of the TRB and all accesses will be in System endianness,
if there happens to be a system in BE, bit 12 of GSBUSCFG0
should be set so that HW does byte invariant BE accesses
when fetching TRBs.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
3b637367ae40b6d3c20e30cb0cdd059e67bbf848 09-Feb-2012 Gerard Cauvy <g-cauvy1@ti.com> usb: dwc3: ep0: fix SetFeature(TEST)

When host requests us to enter a test mode,
we cannot directly enter the test mode before
Status Phase is completed, otherwise the core
will never be able to deliver the Status ZLP
to host, because it has already entered the
requested Test Mode.

In order to fix the error, we move the actual
start of Test Mode right after we receive
Transfer Complete event of the status phase.

Signed-off-by: Gerard Cauvy <g-cauvy1@ti.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
457e84b6624b4d97e6ffae437887ea51a22d54a0 18-Jan-2012 Felipe Balbi <balbi@ti.com> usb: dwc3: gadget: dynamically re-size TxFifos

We need to dynamically re-size TxFifos for the
cases where default values will not do.

While at that, we create a simple function which,
for now, will just allocate one full packet fifo
space for each of the enabled endpoints.

This can be improved later in order to allow for
better throughput by allocating more space for
endpoints which could make good use of that like
isochronous and bulk.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
bb5cfd6811c63c47403e98028bde7e98bd7a1751 18-Jan-2012 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: move to CONFIGURED also on delayed status

Mass Storage gadget will take some time to handle
the SetConfiguration request, but even on those
cases we should move to CONFIGURED state.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
04a9bfcd50dd568a8f1a10194a7f336f6b3ad81c 02-Jan-2012 Felipe Balbi <balbi@ti.com> usb: dwc3: gadget: re-factor USB2 test mode to a function

There are some situations were we might need to
enable USB Test Modes without having access to a
Host stack. In such situations we cannot rely
solely on USB Control Messages to enable test
features.

For those cases, we will also allow test mode
to be enabled via debugfs and this patch is a
preparation for that.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
1a0955fed11363bea66742fffc6f8ad1e6800a6d 10-Jan-2012 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: fix compile warning

commit 34c60a7 (usb: dwc3: ep0: tidy up Pending
Request handling) introduced a compile warning
by leaving an unused variable.

This patch fixes that warning:

drivers/usb/dwc3/ep0.c: In function ‘__dwc3_gadget_ep0_queue’:
drivers/usb/dwc3/ep0.c:129:8: warning: unused variable ‘type’
[-Wunused-variable]

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
68d8a781575d7be490f97eb2c403fb13b083da6a 29-Dec-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: tidy up Pending Request handling

The way our code was written, we should never have
a DWC3_EP_PENDING_REQUEST flag set out of a Data Phase
and the code in __dwc3_gadget_ep0_queue() did not
reflect that situation properly.

Tidy up that case to avoid any possible mistakes
when starting requests for IRQs which are long
gone.

Cc: stable@vger.kernel.org
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
68d3e668d245bb8300c7c6ddbc8508ddfe352e0f 08-Dec-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: fix for possible early delayed_status

There is a very small possibility (previously unimagined
by us) that the whole Mass Storage delayed status happens
rather early, before we even get our XferNotReady event.

In that case, we will be queueing a request to ep0 while
we're still on Setup Phase and we would be waiting for
another usb_ep_queue() forever.

Handle such cases by clearing dwc->delayed_status so that
we start control status from the next XferNotReady like
there was no wait for Delayed Status.

Tested against Linux 3.2-rc3 and USB30CV tool from USB-IF
(on a Windows XP with USB3 PCIe card).

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
e2617796053437df586c53e462076f74bcf268b4 29-Nov-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: fix GetStatus handling (again)

previous commit fixed part of it but it was still
calling usb_ep_queue() from IRQ context without
loosing locks. That cannot be done otherwise we will
have a recursive locking.

Also, we need to assign the 'dep' pointer on
dwc->ep0_usb_req otherwise we will have a NULL
pointer dereference on dwc3_map_buffer_to_dma().

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
e0ce0b0a0ae5a31ee96b38a7c5390f867634b4f6 25-Nov-2011 Sebastian Andrzej Siewior <bigeasy@linutronix.de> usb: dwc3: ep0: use dwc3_request for ep0 requsts instead of usb_request

Instead of special functions and shortcuts for sending our internal
answers to the host we started doing what the gadget does and used the
public API for this. Since we only were using a few fields the
usb_request was enough. Later added the list handling in order to
synchronize the host / gadget events and now we require to have the
dwc3_request struct around our usb_request or else we touch memory that
does not belong to us. So this patch does this.

Reported-by: Partha Basak <p-basak2@ti.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
df62df56e13d73cb0dd4c54649d4fe13557128f8 14-Oct-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: workaround: missing disconnect event

DWC3 revisions <1.88a have an issue which would
case a missing Disconnect event if cable is
disconnected while there's a Setup packet
pending the FIFO.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
5bdb1dcc63304a407e70020c1118fca1642bebaa 02-Nov-2011 Sebastian Andrzej Siewior <bigeasy@linutronix.de> usb: dwc3: ep0: handle delayed_status again

Since the re-worked ep0 handling (which uses HW's hints to recognize the ep0
status) we lost the delayed status handling. This is used by the file and mass
storage gadget to gain some extra time so setup its internal status before it
can proceed further requests.
In particular the storage gadget does nothing on USB_REQ_SET_CONFIGURATION but
wakes up a thread which handles the request. If the udc driver continues ep0
handling before the thread did its work then then endpoint is not yet
configured and further requests will fail. Once the gadget is ready, it will
enqueue an empty packet which is used for synchronization.
In order to fix this issue, the patch does the following:
Set ->delayed_status once the delayed_status has been notices and do not
continue on the next XferNotReady event. We will continues ep0 processing once
the gadget enqueued the zero packet for synchronization.

A cleaner approach would be to enforce the gadget to enqueue an empty
(zero) request even for the status phase but this would do for now.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
f0f2b2a2db85f99637376caf25e46623af56acad 02-Nov-2011 Sebastian Andrzej Siewior <bigeasy@linutronix.de> usb: dwc3: ep0: push ep0state into xfernotready processing

We wait for the XferNotReady before we start the transfer and by then we
know ep0 state in which we supposed to be.
This is some cleanup work for the following patch in which we require to
know the ep0 state before the transfer completes.
While here, also change the argument to dwc3_ep0_do_control_status() so
we don't require the complete event structure but only the required
piece of information.

Inspired-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
8becf2704415d2bf471a0a73ae84c3cc24da8a90 03-Nov-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: fix sparse errors

sparse caught three mistakes on this driver,
fix them:

drivers/usb/dwc3/ep0.c:806:29: warning: duplicate const
drivers/usb/dwc3/debugfs.c:481:15: warning: symbol 'dwc3_debugfs_init' \
was not declared. Should it be static?
drivers/usb/dwc3/debugfs.c:518:16: warning: symbol 'dwc3_debugfs_exit' \
was not declared. Should it be static?

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
25b8ff68bf1d4954d4a9dcb4862c6b6a53cb09e2 03-Nov-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: fix few coding style problems

There were a few coding style issues with this driver
which are now fixed:

drivers/usb/dwc3/debugfs.c:48: WARNING: Use #include \
<linux/uaccess.h> instead of <asm/uaccess.h>
drivers/usb/dwc3/debugfs.c:484: ERROR: space required \
before the open brace '{'
drivers/usb/dwc3/ep0.c:261: WARNING: line over 80 characters
drivers/usb/dwc3/ep0.c:287: WARNING: suspect code indent \
for conditional statements (16, 23)
drivers/usb/dwc3/gadget.c:749: WARNING: line over 80 characters
drivers/usb/dwc3/gadget.c:1267: WARNING: line over 80 characters
drivers/usb/dwc3/gadget.h:116: WARNING: line over 80 characters
drivers/usb/dwc3/io.h:42: WARNING: Use #include \
<linux/io.h> instead of <asm/io.h>

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
c2da2ff00606ae008f0e233bd29c3307d0c3ce85 20-Oct-2011 Sebastian Andrzej Siewior <bigeasy@linutronix.de> usb: dwc3: ep0: don't use ep0in for transfers

In "usb: dwc3: remove special status request handling in ep0" I simplied
a few things and used the generic API for the status transfers. The bug
I introcuded here is that we queue now requests to dep[1] but we don't
clear that list in the stall+start case.
Actually we don't need to use dep[1] at all. We only did in the past to
talk to the correct endpoint (i.e. in or out). This is now take care of
in a diffent place within the ep0 code. So we could queue the in
transfers to dep[0] and don't use dep[1] at all.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
1e7618d8a1ad7aac6904c3a3915bf63f411344c2 23-Oct-2011 Sebastian Andrzej Siewior <bigeasy@linutronix.de> usb: dwc3: ep0: use proper endianess in SetFeature for wIndex

The first access was correct, the second was wrong.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
8ee6270c7f0aeba07355eee82d687efcd8ca9d39 18-Oct-2011 Sebastian Andrzej Siewior <bigeasy@linutronix.de> usb: dwc3: remove special status request handling in ep0

The GetStatus (STD)-request is handled the driver and uses a tiny hack
to send the two bytes long answer. This patch removes the custom hack
uses the normal usb_ep_queue() for that.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
0cc7a519c424c8f07d5ef5e3928b7a07446c5303 18-Oct-2011 Sebastian Andrzej Siewior <bigeasy@linutronix.de> usb: dwc3: reset pending status flag in error case

If we stall and restart we have to reset also this flag to 0 as there is
nothing pending anymore.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
9cc9bcd5b3e8efa45accf2ccb59f13c8de85a0ce 18-Oct-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: handle unexpected XferNotReady events

Sometimes the host might be trying to initiate Data or
Status phase for an older Control transfer. In such
situations we must STALL that transfer and restart
the state machine rather than letting such situation
go through the wire.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
f96a6ec1db1ac730b5a031f2c2f7fcc6b07459d8 15-Oct-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: SetAddress() won't be issued while Configured

I have talked to USB-IF about USB30CV issuing SetAddres()
with a device on Configured state and they have agreed on
changing USB30CV not to do so.

Adding back the STALL reply in such case and while at
that, also add a debugging message for an address which
is too large.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
dc1c70a774b6fe3744b330d58bb9cf802f7eac89 30-Sep-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: convert structures into bitshifts

our parameter structures need to be written to
HW, so instead of assuming little endian, we
convert those into bit shifts.

Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/drivers/usb/dwc3/ep0.c
b23c843992b659d537514e6493d673284f5d6724 30-Sep-2011 Paul Zimmerman <Paul.Zimmerman@synopsys.com> usb: dwc3: gadget: fix DEPSTARTCFG for non-EP0 EPs

DEPSTARTCFG for non-EP0 EPs must only be sent once per config

[ balbi@ti.com : changed config_start to start_config_issued ]

Signed-off-by: Paul Zimmerman <paulz@synopsys.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/drivers/usb/dwc3/ep0.c
49a25cc9a7effe2993e65229c2ea0be726919bcf 30-Sep-2011 Sebastian Andrzej Siewior <bigeasy@linutronix.de> usb: dwc: remove "All rights reserved" statement.

Some people think that this line is not compatible with the GPL. The
statement was required due to the Buenos Aires Convention and is now
deprecated. I remove it because it is said that it is pointless nowdays.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/drivers/usb/dwc3/ep0.c
b147f3572db230522d158312055f3d28f96fbc92 30-Sep-2011 Sebastian Andrzej Siewior <bigeasy@linutronix.de> usb: dwc3: ep0: fix debug output

Use "ep0in" and "ep0out" instead "ep1in" and "ep0out" which is confusing
and not consistent with the remaining output.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/drivers/usb/dwc3/ep0.c
9876cbe2e2ec685ee620056ba1f2cc2f13a2e01a 30-Sep-2011 Sebastian Andrzej Siewior <bigeasy@linutronix.de> usb: dwc3: ep0: remove second giveback in error case

We already give requests back in dwc3_ep0_stall_and_restart() so
doing it again here will most likely corrupt the list.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/drivers/usb/dwc3/ep0.c
25355be64ef319894c4de2034af1bdeb79dc0bd4 30-Sep-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: fix debug message

The way it was before was really meaningless.
Now it looks saner.

Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/drivers/usb/dwc3/ep0.c
d95b09b90187f06062c0ec9fa05ff3151bd3e0bb 30-Sep-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: ignore direction on 2-stage transfer

We don't need to care about direction on a two stage
transfer.

Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/drivers/usb/dwc3/ep0.c
2646021e1d5235c6c2143d27405fb057e5560d2b 30-Sep-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: Make USB30CV happy with SetAddress

According to USB 3.0 Specification, a SetAddress()
while device is in Configured State has an unspecified
behavior (see Section 9.4.6). Still USB30CV wasn't
happy with my Stall reply.

To make that thing happy, just accept the SetAddress()
always. No problems have been observed thus far.

Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/drivers/usb/dwc3/ep0.c
55f3fba6c822f05b02f06070efaadf0300b5f9f1 08-Sep-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: introduce ep0_expect_in flag

This flag will tell us which direction we're
expecting on the next (data or status) phase.

It will help us catching errors of host going
crazy and requesting data of the wrong direction.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
d742220b357769fa0a764d238373b8667116cf64 08-Sep-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: giveback requests on stall_and_restart

if we don't, the list will be busy forever.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
1ddcb218b5920fb20c2b3f029f0189568c2dc6e2 30-Aug-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: use ep0_next_event field

Start tracking the next expected event and act
on the error conditions as suggested by databook.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
0b7836a9eb32f626ffd3fe3045e8c618cb8ed965 30-Aug-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: drop EP0_STALL state

Whenever we issue a Set Stall command on EP0,
the state machine will be restarted and Stall
is cleared automatically, when core receives
the next SETUP packet.

There's no need to track that EP0_STALL state.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
76cb323f80ac32833109e2c089842be2b99d8d2b 30-Aug-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: clear all EP0 flags

when we're going to issue Set Stall command,
we should clear DWC3_EP_STALL flag, but also
we should clear BUSY, HALTED and all others.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
b673cf3002bfded05d68c8bad394ee68f5e8c515 31-Aug-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: fix Get Status handling

data was prepared on setup_buf but transfer
was started on ctrl_req, fix it.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
c7fcdeb2627c46b7ec3f0bcb2054b10405f9a70e 27-Aug-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: simplify EP0 state machine

The DesignWare USB3 core tells us which phase
of a control transfer should be started, it
also tells us which physical endpoint needs
that transfer.

With these two informations, we have all we
need to simply EP0 handling quite a lot and
get rid rid of the SW state machine tracking
ep0 states.

For achieving this perfectly, we needed to
add support for situations where we get
XferNotReady while endpoint is still busy
and XferNotReady while gadget driver still
hasn't queued a request.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
a6829706ce0bae7e4623ea987a639d91a721eee2 27-Aug-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: add handling for unaligned OUT transfers

In case we have transfers which aren't aligned
to wMaxPacketSize, we need to be careful with
how we start the transfer with the HW. OUT
transfers _must_ be aligned with wMaxPacketSize
and in order to guarantee that, we use a bounce
buffer.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
c611ccb48ac9b95e35741b43d018a2f6ed74c0e6 27-Aug-2011 Felipe Balbi <balbi@ti.com> usb: dwc3: ep0: fix 'transfered' typo

trivial patch. No functional changes.

Signed-off-by: Felipe Balbi <balbi@ti.com>
/drivers/usb/dwc3/ep0.c
72246da40f3719af3bfd104a2365b32537c27d83 19-Aug-2011 Felipe Balbi <balbi@ti.com> usb: Introduce DesignWare USB3 DRD Driver

The DesignWare USB3 is a highly
configurable IP Core which can be
instantiated as Dual-Role Device (DRD),
Peripheral Only and Host Only (XHCI)
configurations.

Several other parameters can be configured
like amount of FIFO space, amount of TX and
RX endpoints, amount of Host Interrupters,
etc.

The current driver has been validated with
a virtual model of version 1.73a of that core
and with an FPGA burned with version 1.83a
of the DRD core. We have support for PCIe
bus, which is used on FPGA prototyping, and
for the OMAP5, more adaptation (or glue)
layers can be easily added and the driver
is half prepared to handle any possible
configuration the HW engineer has chosen
considering we have the information on
one of the GHWPARAMS registers to do
runtime checking of certain features.

More runtime checks can, and should, be added
in order to make this driver even more flexible
with regards to number of endpoints, FIFO sizes,
transfer types, etc.

While this supports only the device side, for
now, we will add support for Host side (xHCI -
see the updated series Sebastian has sent [1])
and OTG after we have it all stabilized.

[1] http://marc.info/?l=linux-usb&m=131341992020339&w=2

Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/drivers/usb/dwc3/ep0.c