diff options
Diffstat (limited to 'drivers/usb/dwc2/gadget.c')
| -rw-r--r-- | drivers/usb/dwc2/gadget.c | 20 | 
1 files changed, 6 insertions, 14 deletions
| diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c index b95930f20d90..77c5fcf3a5bf 100644 --- a/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c @@ -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,11 +3749,11 @@ 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_KERNEL); +			&hs_ep->desc_list_dma, GFP_ATOMIC);  		if (!hs_ep->desc_list) {  			ret = -ENOMEM;  			goto error2; @@ -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; |