mirror of
https://github.com/hardkernel/linux.git
synced 2026-04-04 12:13:05 +09:00
usb: dwc2: Fix dwc2_hsotg_core_init_disconnected()
[ Upstream commit 755d739534 ]
We should call dwc2_hsotg_enqueue_setup() after properly
setting lx_state. Because it may cause error-out from
dwc2_hsotg_enqueue_setup() due to wrong value in lx_state.
Issue can be reproduced by loading driver while connected
A-Connector (start in A-HOST mode) then disconnect A-Connector
to switch to B-DEVICE.
Acked-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Vardan Mikayelyan <mvardan@synopsys.com>
Signed-off-by: Grigor Tovmasyan <tovmasya@synopsys.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a3fcccd4a7
commit
ee4ed01d4b
@@ -3414,12 +3414,6 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
|
||||
dwc2_writel(dwc2_hsotg_ep0_mps(hsotg->eps_out[0]->ep.maxpacket) |
|
||||
DXEPCTL_USBACTEP, hsotg->regs + DIEPCTL0);
|
||||
|
||||
dwc2_hsotg_enqueue_setup(hsotg);
|
||||
|
||||
dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
|
||||
dwc2_readl(hsotg->regs + DIEPCTL0),
|
||||
dwc2_readl(hsotg->regs + DOEPCTL0));
|
||||
|
||||
/* clear global NAKs */
|
||||
val = DCTL_CGOUTNAK | DCTL_CGNPINNAK;
|
||||
if (!is_usb_reset)
|
||||
@@ -3430,6 +3424,12 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
|
||||
mdelay(3);
|
||||
|
||||
hsotg->lx_state = DWC2_L0;
|
||||
|
||||
dwc2_hsotg_enqueue_setup(hsotg);
|
||||
|
||||
dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
|
||||
dwc2_readl(hsotg->regs + DIEPCTL0),
|
||||
dwc2_readl(hsotg->regs + DOEPCTL0));
|
||||
}
|
||||
|
||||
static void dwc2_hsotg_core_disconnect(struct dwc2_hsotg *hsotg)
|
||||
|
||||
Reference in New Issue
Block a user