Hi, On Thu, Feb 16, 2012 at 09:36:41AM +0800, Peter Chen wrote: > - For Control Read transfer, the ACK handshake on an IN transaction > may be corrupted, so the device may can't recevice the ACK for data > stage, the complete irq will not occur at this situation. > Therefore, we need to move prime status stage from complete irq > routine to the place where the data stage is just primed, or the > host will never get ACK for status stage. > The above issue has described at USB2.0 spec 8.5.3.3. > > - After adding prime status just after prime the data, there is a potential > problem when the status dTD is added before the data prime has finished > by hardware. The reason is the device's dTD descritor has NO direction bit, > if data stage (IN) prime hasn't finished, the status stage(OUT) > dTD will be added at data stage dTD's Next dTD Pointer, so when the data > transfer has finishes, the status dTD will be primed as IN by hardware, > then the host will never receive ACK from the device side at status stage. > > - Delete below code at fsl_ep_queue: > /* Update ep0 state */ > if ((ep_index(ep) == 0)) > udc->ep0_state = DATA_STATE_XMIT; > the udc->ep0_state will be updated again after udc->driver->setup > finishes. > > It is tested at i.mx51 bbg board with g_mass_storage, g_ether, g_serial. please fix the typos, so I can apply. -- balbi
Attachment:
signature.asc
Description: Digital signature