• Sebastian Andrzej Siewior's avatar
    usb: dwc3: ep0: handle delayed_status again · 5bdb1dcc
    Sebastian Andrzej Siewior authored
    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: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
    5bdb1dcc
core.h 22.7 KB