|
@@ -3169,7 +3169,7 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
|
|
|
/* keep other bits untouched (so e.g. forced modes are not lost) */
|
|
|
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
usbcfg &= ~(GUSBCFG_TOUTCAL_MASK | GUSBCFG_PHYIF16 | GUSBCFG_SRPCAP |
|
|
|
- GUSBCFG_HNPCAP);
|
|
|
+ GUSBCFG_HNPCAP | GUSBCFG_USBTRDTIM_MASK);
|
|
|
|
|
|
if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS &&
|
|
|
(hsotg->params.speed == DWC2_SPEED_PARAM_FULL ||
|
|
@@ -3749,8 +3749,8 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep,
|
|
|
__func__, epctrl, epctrl_reg);
|
|
|
|
|
|
/* Allocate DMA descriptor chain for non-ctrl endpoints */
|
|
|
- if (using_desc_dma(hsotg)) {
|
|
|
- hs_ep->desc_list = dma_alloc_coherent(hsotg->dev,
|
|
|
+ if (using_desc_dma(hsotg) && !hs_ep->desc_list) {
|
|
|
+ hs_ep->desc_list = dmam_alloc_coherent(hsotg->dev,
|
|
|
MAX_DMA_DESC_NUM_GENERIC *
|
|
|
sizeof(struct dwc2_dma_desc),
|
|
|
&hs_ep->desc_list_dma, GFP_ATOMIC);
|
|
@@ -3872,7 +3872,7 @@ error1:
|
|
|
|
|
|
error2:
|
|
|
if (ret && using_desc_dma(hsotg) && hs_ep->desc_list) {
|
|
|
- dma_free_coherent(hsotg->dev, MAX_DMA_DESC_NUM_GENERIC *
|
|
|
+ dmam_free_coherent(hsotg->dev, MAX_DMA_DESC_NUM_GENERIC *
|
|
|
sizeof(struct dwc2_dma_desc),
|
|
|
hs_ep->desc_list, hs_ep->desc_list_dma);
|
|
|
hs_ep->desc_list = NULL;
|
|
@@ -3902,14 +3902,6 @@ static int dwc2_hsotg_ep_disable(struct usb_ep *ep)
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- /* Remove DMA memory allocated for non-control Endpoints */
|
|
|
- if (using_desc_dma(hsotg)) {
|
|
|
- dma_free_coherent(hsotg->dev, MAX_DMA_DESC_NUM_GENERIC *
|
|
|
- sizeof(struct dwc2_dma_desc),
|
|
|
- hs_ep->desc_list, hs_ep->desc_list_dma);
|
|
|
- hs_ep->desc_list = NULL;
|
|
|
- }
|
|
|
-
|
|
|
epctrl_reg = dir_in ? DIEPCTL(index) : DOEPCTL(index);
|
|
|
|
|
|
spin_lock_irqsave(&hsotg->lock, flags);
|
|
@@ -4131,7 +4123,7 @@ static void dwc2_hsotg_init(struct dwc2_hsotg *hsotg)
|
|
|
/* keep other bits untouched (so e.g. forced modes are not lost) */
|
|
|
usbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
|
|
|
usbcfg &= ~(GUSBCFG_TOUTCAL_MASK | GUSBCFG_PHYIF16 | GUSBCFG_SRPCAP |
|
|
|
- GUSBCFG_HNPCAP);
|
|
|
+ GUSBCFG_HNPCAP | GUSBCFG_USBTRDTIM_MASK);
|
|
|
|
|
|
/* set the PLL on, remove the HNP/SRP and set the PHY */
|
|
|
trdtim = (hsotg->phyif == GUSBCFG_PHYIF8) ? 9 : 5;
|