|
@@ -1146,15 +1146,15 @@ static int scan_dma_completions(struct net2280_ep *ep)
|
|
*/
|
|
*/
|
|
while (!list_empty(&ep->queue)) {
|
|
while (!list_empty(&ep->queue)) {
|
|
struct net2280_request *req;
|
|
struct net2280_request *req;
|
|
- u32 tmp;
|
|
|
|
|
|
+ u32 req_dma_count;
|
|
|
|
|
|
req = list_entry(ep->queue.next,
|
|
req = list_entry(ep->queue.next,
|
|
struct net2280_request, queue);
|
|
struct net2280_request, queue);
|
|
if (!req->valid)
|
|
if (!req->valid)
|
|
break;
|
|
break;
|
|
rmb();
|
|
rmb();
|
|
- tmp = le32_to_cpup(&req->td->dmacount);
|
|
|
|
- if ((tmp & BIT(VALID_BIT)) != 0)
|
|
|
|
|
|
+ req_dma_count = le32_to_cpup(&req->td->dmacount);
|
|
|
|
+ if ((req_dma_count & BIT(VALID_BIT)) != 0)
|
|
break;
|
|
break;
|
|
|
|
|
|
/* SHORT_PACKET_TRANSFERRED_INTERRUPT handles "usb-short"
|
|
/* SHORT_PACKET_TRANSFERRED_INTERRUPT handles "usb-short"
|
|
@@ -1163,40 +1163,41 @@ static int scan_dma_completions(struct net2280_ep *ep)
|
|
*/
|
|
*/
|
|
if (unlikely(req->td->dmadesc == 0)) {
|
|
if (unlikely(req->td->dmadesc == 0)) {
|
|
/* paranoia */
|
|
/* paranoia */
|
|
- tmp = readl(&ep->dma->dmacount);
|
|
|
|
- if (tmp & DMA_BYTE_COUNT_MASK)
|
|
|
|
|
|
+ u32 const ep_dmacount = readl(&ep->dma->dmacount);
|
|
|
|
+
|
|
|
|
+ if (ep_dmacount & DMA_BYTE_COUNT_MASK)
|
|
break;
|
|
break;
|
|
/* single transfer mode */
|
|
/* single transfer mode */
|
|
- dma_done(ep, req, tmp, 0);
|
|
|
|
|
|
+ dma_done(ep, req, req_dma_count, 0);
|
|
num_completed++;
|
|
num_completed++;
|
|
break;
|
|
break;
|
|
} else if (!ep->is_in &&
|
|
} else if (!ep->is_in &&
|
|
(req->req.length % ep->ep.maxpacket) &&
|
|
(req->req.length % ep->ep.maxpacket) &&
|
|
!(ep->dev->quirks & PLX_PCIE)) {
|
|
!(ep->dev->quirks & PLX_PCIE)) {
|
|
|
|
|
|
- tmp = readl(&ep->regs->ep_stat);
|
|
|
|
|
|
+ u32 const ep_stat = readl(&ep->regs->ep_stat);
|
|
/* AVOID TROUBLE HERE by not issuing short reads from
|
|
/* AVOID TROUBLE HERE by not issuing short reads from
|
|
* your gadget driver. That helps avoids errata 0121,
|
|
* your gadget driver. That helps avoids errata 0121,
|
|
* 0122, and 0124; not all cases trigger the warning.
|
|
* 0122, and 0124; not all cases trigger the warning.
|
|
*/
|
|
*/
|
|
- if ((tmp & BIT(NAK_OUT_PACKETS)) == 0) {
|
|
|
|
|
|
+ if ((ep_stat & BIT(NAK_OUT_PACKETS)) == 0) {
|
|
ep_warn(ep->dev, "%s lost packet sync!\n",
|
|
ep_warn(ep->dev, "%s lost packet sync!\n",
|
|
ep->ep.name);
|
|
ep->ep.name);
|
|
req->req.status = -EOVERFLOW;
|
|
req->req.status = -EOVERFLOW;
|
|
} else {
|
|
} else {
|
|
- tmp = readl(&ep->regs->ep_avail);
|
|
|
|
- if (tmp) {
|
|
|
|
|
|
+ u32 const ep_avail = readl(&ep->regs->ep_avail);
|
|
|
|
+ if (ep_avail) {
|
|
/* fifo gets flushed later */
|
|
/* fifo gets flushed later */
|
|
ep->out_overflow = 1;
|
|
ep->out_overflow = 1;
|
|
ep_dbg(ep->dev,
|
|
ep_dbg(ep->dev,
|
|
"%s dma, discard %d len %d\n",
|
|
"%s dma, discard %d len %d\n",
|
|
- ep->ep.name, tmp,
|
|
|
|
|
|
+ ep->ep.name, ep_avail,
|
|
req->req.length);
|
|
req->req.length);
|
|
req->req.status = -EOVERFLOW;
|
|
req->req.status = -EOVERFLOW;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- dma_done(ep, req, tmp, 0);
|
|
|
|
|
|
+ dma_done(ep, req, req_dma_count, 0);
|
|
num_completed++;
|
|
num_completed++;
|
|
}
|
|
}
|
|
|
|
|