Hi I have earlier worked with the possibility for disabling U1/U2 to solve an issue where the dwc3 acting as a gadget device sometimes failing to leave U2. Analyzing the situation when the dwc3 failing to leave U2, it happens when the link is in U2 after timeout from U1, and when the device wants to leave U2. Not when the host wants to leave U2. Going back the BOS descriptor from the device reports bU1DevExitLat 1us bU2DevExitLat 500us And the SetSystemExitLatency control transfer ends with U1 System Exit Latency 86 us U1 Device to Host Exit Latency 1 us U2 System Exit Latency 585 us U2 Device to Host Exit Latency 500 us Looking at the length of LFPS etc. it seems that the U2 exit is just above 80 us,and it start link training just after. So I was wandering how the exit latency of the system is communicated to dwc3 core, and found the following code from ep0.c dwc3_ep0_set_sel_cmpl ---- reg = dwc3_readl(dwc->regs, DWC3_DCTL); if (reg & DWC3_DCTL_INITU2ENA) param = dwc->u2pel; if (reg & DWC3_DCTL_INITU1ENA) param = dwc->u1pel; /* * According to Synopsys Databook, if parameter is * greater than 125, a value of zero should be * programmed in the register. */ if (param > 125) param = 0; /* now that we have the time, issue DGCMD Set Sel */ ret = dwc3_send_gadget_generic_command(dwc, DWC3_DGCMD_SET_PERIODIC_PAR, param); WARN_ON(ret < 0); ---- I don't have access to Synopsys Databook, so I am puzzled about the DWC3_DGCMD_SET_PERIODIC_PAR command. The code favor to use the device to host exit latency, and use the u1 if present over the u2. So the dwc3 core never get the system exit latency times, and they just disapeer. I hope that someone have access to the Databook, and is able to share some details about the set periodic command and the parameter. Regards Claus