usb: dwc3: workaround: unexpected transtion U3 -> RESUME
In DWC3 versions < 2.50a configured without Hibernation mode enabled, there will be an extra link status change interrupt if device detects host-initiated U3 exit. In that case, core will generate an unnecessary U3 -> RESUME transition which should be ignored by the driver. Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
7ac6a593d5
commit
0b0cc1cd31
1 changed files with 28 additions and 0 deletions
|
@ -2317,6 +2317,34 @@ static void dwc3_gadget_linksts_change_interrupt(struct dwc3 *dwc,
|
|||
unsigned int evtinfo)
|
||||
{
|
||||
enum dwc3_link_state next = evtinfo & DWC3_LINK_STATE_MASK;
|
||||
unsigned int pwropt;
|
||||
|
||||
/*
|
||||
* WORKAROUND: DWC3 < 2.50a have an issue when configured without
|
||||
* Hibernation mode enabled which would show up when device detects
|
||||
* host-initiated U3 exit.
|
||||
*
|
||||
* In that case, device will generate a Link State Change Interrupt
|
||||
* from U3 to RESUME which is only necessary if Hibernation is
|
||||
* configured in.
|
||||
*
|
||||
* There are no functional changes due to such spurious event and we
|
||||
* just need to ignore it.
|
||||
*
|
||||
* Refers to:
|
||||
*
|
||||
* STAR#9000570034 RTL: SS Resume event generated in non-Hibernation
|
||||
* operational mode
|
||||
*/
|
||||
pwropt = DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams1);
|
||||
if ((dwc->revision < DWC3_REVISION_250A) &&
|
||||
(pwropt != DWC3_GHWPARAMS1_EN_PWROPT_HIB)) {
|
||||
if ((dwc->link_state == DWC3_LINK_STATE_U3) &&
|
||||
(next == DWC3_LINK_STATE_RESUME)) {
|
||||
dev_vdbg(dwc->dev, "ignoring transition U3 -> Resume\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* WORKAROUND: DWC3 Revisions <1.83a have an issue which, depending
|
||||
|
|
Loading…
Reference in a new issue