• Robert Jarzmik's avatar
    USB: pxa27x_udc: single-thread setup requests · 367815ee
    Robert Jarzmik authored
    Since the PXA 27x UDC automatically ACK's some control
    packets such as SET_INTERFACE, the gadgets may not get a
    chance to process the request before another control packet
    is received. The Linux gadgets do not expect to receive
    setup callbacks out of order. The file storage gadget only
    saves the "highest" priority request.
    
    The PXA27x UDC driver must make sure it only sends one up at
    a time, allowing the gadget to make changes before
    continuing. In theory, the host would be NACK'd while the
    gadget processes the change but the UDC has already ACK'd
    the request. If another request is sent by the host that is
    not automatically ACK'd by the UDC, then the throttling
    happens properly to regain sync.
    
    The observed case was the file_storage gadget timing out on
    a BulkReset request because the SET_INTERFACE was being
    processed by the gadget. Since SET_INTERFACE is higher
    priority than BulkReset, the BulkReset was dropped.  This
    was exacerbated by turning on the debug which delayed the
    fsg signal processing thread.
    
    This also fixes the "should never get in
    WAIT_ACK_SET_CONF_INTERF state here!!!" warning.
    Reported-by: default avatarVernon Sauder <vernoninhand@gmail.com>
    Signed-off-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
    Acked-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    
    index 51790b0..1937d8c 100644
    367815ee
pxa27x_udc.c 66.3 KB