diff options
Diffstat (limited to 'drivers/usb/dwc2/hcd_queue.c')
| -rw-r--r-- | drivers/usb/dwc2/hcd_queue.c | 15 | 
1 files changed, 9 insertions, 6 deletions
| diff --git a/drivers/usb/dwc2/hcd_queue.c b/drivers/usb/dwc2/hcd_queue.c index d7c3d6c776d8..40839591d2ec 100644 --- a/drivers/usb/dwc2/hcd_queue.c +++ b/drivers/usb/dwc2/hcd_queue.c @@ -383,7 +383,7 @@ static unsigned long *dwc2_get_ls_map(struct dwc2_hsotg *hsotg,  	/* Get the map and adjust if this is a multi_tt hub */  	map = qh->dwc_tt->periodic_bitmaps;  	if (qh->dwc_tt->usb_tt->multi) -		map += DWC2_ELEMENTS_PER_LS_BITMAP * qh->ttport; +		map += DWC2_ELEMENTS_PER_LS_BITMAP * (qh->ttport - 1);  	return map;  } @@ -1510,7 +1510,7 @@ static void dwc2_qh_init(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh,  	bool ep_is_in = !!dwc2_hcd_is_pipe_in(&urb->pipe_info);  	bool ep_is_isoc = (ep_type == USB_ENDPOINT_XFER_ISOC);  	bool ep_is_int = (ep_type == USB_ENDPOINT_XFER_INT); -	u32 hprt = dwc2_readl(hsotg->regs + HPRT0); +	u32 hprt = dwc2_readl(hsotg, HPRT0);  	u32 prtspd = (hprt & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;  	bool do_split = (prtspd == HPRT0_SPD_HIGH_SPEED &&  			 dev_speed != USB_SPEED_HIGH); @@ -1696,6 +1696,9 @@ void dwc2_hcd_qh_free(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)  	if (qh->desc_list)  		dwc2_hcd_qh_free_ddma(hsotg, qh); +	else if (hsotg->unaligned_cache && qh->dw_align_buf) +		kmem_cache_free(hsotg->unaligned_cache, qh->dw_align_buf); +  	kfree(qh);  } @@ -1744,9 +1747,9 @@ int dwc2_hcd_qh_add(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)  	if (status)  		return status;  	if (!hsotg->periodic_qh_count) { -		intr_mask = dwc2_readl(hsotg->regs + GINTMSK); +		intr_mask = dwc2_readl(hsotg, GINTMSK);  		intr_mask |= GINTSTS_SOF; -		dwc2_writel(intr_mask, hsotg->regs + GINTMSK); +		dwc2_writel(hsotg, intr_mask, GINTMSK);  	}  	hsotg->periodic_qh_count++; @@ -1785,9 +1788,9 @@ void dwc2_hcd_qh_unlink(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)  	hsotg->periodic_qh_count--;  	if (!hsotg->periodic_qh_count &&  	    !hsotg->params.dma_desc_enable) { -		intr_mask = dwc2_readl(hsotg->regs + GINTMSK); +		intr_mask = dwc2_readl(hsotg, GINTMSK);  		intr_mask &= ~GINTSTS_SOF; -		dwc2_writel(intr_mask, hsotg->regs + GINTMSK); +		dwc2_writel(hsotg, intr_mask, GINTMSK);  	}  } |