mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 14:07:05 +07:00
usb: dwc2: fix transfer stop programming for out endpoint
To stop an out endpoint, software should set sets the Global OUT NAK, but not the Global Non-periodic IN NAK. This driver bug leads the out-ep failed be in disabled state with below error. dwc2_hsotg_ep_stop_xfr: timeout DOEPCTL.EPDisable Acked-by: John Youn <johnyoun@synopsys.com> Signed-off-by: Du, Changbin <changbin.du@intel.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
a5beaaf394
commit
0676c7e734
@ -2911,15 +2911,15 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg,
|
||||
"%s: timeout DIEPINT.NAKEFF\n", __func__);
|
||||
} else {
|
||||
/* Clear any pending nak effect interrupt */
|
||||
dwc2_writel(GINTSTS_GINNAKEFF, hsotg->regs + GINTSTS);
|
||||
dwc2_writel(GINTSTS_GOUTNAKEFF, hsotg->regs + GINTSTS);
|
||||
|
||||
__orr32(hsotg->regs + DCTL, DCTL_SGNPINNAK);
|
||||
__orr32(hsotg->regs + DCTL, DCTL_SGOUTNAK);
|
||||
|
||||
/* Wait for global nak to take effect */
|
||||
if (dwc2_hsotg_wait_bit_set(hsotg, GINTSTS,
|
||||
GINTSTS_GINNAKEFF, 100))
|
||||
GINTSTS_GOUTNAKEFF, 100))
|
||||
dev_warn(hsotg->dev,
|
||||
"%s: timeout GINTSTS.GINNAKEFF\n", __func__);
|
||||
"%s: timeout GINTSTS.GOUTNAKEFF\n", __func__);
|
||||
}
|
||||
|
||||
/* Disable ep */
|
||||
@ -2944,7 +2944,7 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg,
|
||||
/* TODO: Flush shared tx fifo */
|
||||
} else {
|
||||
/* Remove global NAKs */
|
||||
__bic32(hsotg->regs + DCTL, DCTL_SGNPINNAK);
|
||||
__bic32(hsotg->regs + DCTL, DCTL_SGOUTNAK);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user