diff options
Diffstat (limited to 'drivers/usb/dwc3/core.c')
| -rw-r--r-- | drivers/usb/dwc3/core.c | 23 | 
1 files changed, 23 insertions, 0 deletions
| diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 734de2a8bd21..9eb085f359ce 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -564,9 +564,17 @@ int dwc3_event_buffers_setup(struct dwc3 *dwc)  void dwc3_event_buffers_cleanup(struct dwc3 *dwc)  {  	struct dwc3_event_buffer	*evt; +	u32				reg;  	if (!dwc->ev_buf)  		return; +	/* +	 * Exynos platforms may not be able to access event buffer if the +	 * controller failed to halt on dwc3_core_exit(). +	 */ +	reg = dwc3_readl(dwc->regs, DWC3_DSTS); +	if (!(reg & DWC3_DSTS_DEVCTRLHLT)) +		return;  	evt = dwc->ev_buf; @@ -1379,6 +1387,21 @@ static int dwc3_core_init(struct dwc3 *dwc)  	}  	/* +	 * STAR 9001285599: This issue affects DWC_usb3 version 3.20a +	 * only. If the PM TIMER ECM is enabled through GUCTL2[19], the +	 * link compliance test (TD7.21) may fail. If the ECN is not +	 * enabled (GUCTL2[19] = 0), the controller will use the old timer +	 * value (5us), which is still acceptable for the link compliance +	 * test. Therefore, do not enable PM TIMER ECM in 3.20a by +	 * setting GUCTL2[19] by default; instead, use GUCTL2[19] = 0. +	 */ +	if (DWC3_VER_IS(DWC3, 320A)) { +		reg = dwc3_readl(dwc->regs, DWC3_GUCTL2); +		reg &= ~DWC3_GUCTL2_LC_TIMER; +		dwc3_writel(dwc->regs, DWC3_GUCTL2, reg); +	} + +	/*  	 * When configured in HOST mode, after issuing U3/L2 exit controller  	 * fails to send proper CRC checksum in CRC5 feild. Because of this  	 * behaviour Transaction Error is generated, resulting in reset and | 
