usb: gadget: pch_udc: switch over to usb_gadget_map/unmap_request()
We have generic implementations for a reason, let's use them. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://lore.kernel.org/r/20210325135508.70350-1-andriy.shevchenko@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
75bb93be00
commit
de620c3b59
@ -383,11 +383,8 @@ MODULE_PARM_DESC(speed_fs, "true for Full speed operation");
|
|||||||
* @td_data_last: last dma desc. of chain
|
* @td_data_last: last dma desc. of chain
|
||||||
* @queue: associated queue
|
* @queue: associated queue
|
||||||
* @dma_going: DMA in progress for request
|
* @dma_going: DMA in progress for request
|
||||||
* @dma_mapped: DMA memory mapped for request
|
|
||||||
* @dma_done: DMA completed for request
|
* @dma_done: DMA completed for request
|
||||||
* @chain_len: chain length
|
* @chain_len: chain length
|
||||||
* @buf: Buffer memory for align adjustment
|
|
||||||
* @dma: DMA memory for align adjustment
|
|
||||||
*/
|
*/
|
||||||
struct pch_udc_request {
|
struct pch_udc_request {
|
||||||
struct usb_request req;
|
struct usb_request req;
|
||||||
@ -396,11 +393,8 @@ struct pch_udc_request {
|
|||||||
struct pch_udc_data_dma_desc *td_data_last;
|
struct pch_udc_data_dma_desc *td_data_last;
|
||||||
struct list_head queue;
|
struct list_head queue;
|
||||||
unsigned dma_going:1,
|
unsigned dma_going:1,
|
||||||
dma_mapped:1,
|
|
||||||
dma_done:1;
|
dma_done:1;
|
||||||
unsigned chain_len;
|
unsigned chain_len;
|
||||||
void *buf;
|
|
||||||
dma_addr_t dma;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline u32 pch_udc_readl(struct pch_udc_dev *dev, unsigned long reg)
|
static inline u32 pch_udc_readl(struct pch_udc_dev *dev, unsigned long reg)
|
||||||
@ -1482,33 +1476,7 @@ static void complete_req(struct pch_udc_ep *ep, struct pch_udc_request *req,
|
|||||||
status = req->req.status;
|
status = req->req.status;
|
||||||
|
|
||||||
dev = ep->dev;
|
dev = ep->dev;
|
||||||
if (req->dma_mapped) {
|
usb_gadget_unmap_request(&dev->gadget, &req->req, ep->in);
|
||||||
if (req->dma == DMA_ADDR_INVALID) {
|
|
||||||
if (ep->in)
|
|
||||||
dma_unmap_single(&dev->pdev->dev, req->req.dma,
|
|
||||||
req->req.length,
|
|
||||||
DMA_TO_DEVICE);
|
|
||||||
else
|
|
||||||
dma_unmap_single(&dev->pdev->dev, req->req.dma,
|
|
||||||
req->req.length,
|
|
||||||
DMA_FROM_DEVICE);
|
|
||||||
req->req.dma = DMA_ADDR_INVALID;
|
|
||||||
} else {
|
|
||||||
if (ep->in)
|
|
||||||
dma_unmap_single(&dev->pdev->dev, req->dma,
|
|
||||||
req->req.length,
|
|
||||||
DMA_TO_DEVICE);
|
|
||||||
else {
|
|
||||||
dma_unmap_single(&dev->pdev->dev, req->dma,
|
|
||||||
req->req.length,
|
|
||||||
DMA_FROM_DEVICE);
|
|
||||||
memcpy(req->req.buf, req->buf, req->req.length);
|
|
||||||
}
|
|
||||||
kfree(req->buf);
|
|
||||||
req->dma = DMA_ADDR_INVALID;
|
|
||||||
}
|
|
||||||
req->dma_mapped = 0;
|
|
||||||
}
|
|
||||||
ep->halted = 1;
|
ep->halted = 1;
|
||||||
spin_unlock(&dev->lock);
|
spin_unlock(&dev->lock);
|
||||||
if (!ep->in)
|
if (!ep->in)
|
||||||
@ -1586,12 +1554,9 @@ static int pch_udc_create_dma_chain(struct pch_udc_ep *ep,
|
|||||||
if (req->chain_len > 1)
|
if (req->chain_len > 1)
|
||||||
pch_udc_free_dma_chain(ep->dev, req);
|
pch_udc_free_dma_chain(ep->dev, req);
|
||||||
|
|
||||||
if (req->dma == DMA_ADDR_INVALID)
|
td->dataptr = req->req.dma;
|
||||||
td->dataptr = req->req.dma;
|
|
||||||
else
|
|
||||||
td->dataptr = req->dma;
|
|
||||||
|
|
||||||
td->status = PCH_UDC_BS_HST_BSY;
|
td->status = PCH_UDC_BS_HST_BSY;
|
||||||
|
|
||||||
for (; ; bytes -= buf_len, ++len) {
|
for (; ; bytes -= buf_len, ++len) {
|
||||||
td->status = PCH_UDC_BS_HST_BSY | min(buf_len, bytes);
|
td->status = PCH_UDC_BS_HST_BSY | min(buf_len, bytes);
|
||||||
if (bytes <= buf_len)
|
if (bytes <= buf_len)
|
||||||
@ -1797,7 +1762,6 @@ static struct usb_request *pch_udc_alloc_request(struct usb_ep *usbep,
|
|||||||
if (!req)
|
if (!req)
|
||||||
return NULL;
|
return NULL;
|
||||||
req->req.dma = DMA_ADDR_INVALID;
|
req->req.dma = DMA_ADDR_INVALID;
|
||||||
req->dma = DMA_ADDR_INVALID;
|
|
||||||
INIT_LIST_HEAD(&req->queue);
|
INIT_LIST_HEAD(&req->queue);
|
||||||
if (!ep->dev->dma_addr)
|
if (!ep->dev->dma_addr)
|
||||||
return &req->req;
|
return &req->req;
|
||||||
@ -1880,39 +1844,9 @@ static int pch_udc_pcd_queue(struct usb_ep *usbep, struct usb_request *usbreq,
|
|||||||
return -ESHUTDOWN;
|
return -ESHUTDOWN;
|
||||||
spin_lock_irqsave(&dev->lock, iflags);
|
spin_lock_irqsave(&dev->lock, iflags);
|
||||||
/* map the buffer for dma */
|
/* map the buffer for dma */
|
||||||
if (usbreq->length &&
|
retval = usb_gadget_map_request(&dev->gadget, usbreq, ep->in);
|
||||||
((usbreq->dma == DMA_ADDR_INVALID) || !usbreq->dma)) {
|
if (retval)
|
||||||
if (!((unsigned long)(usbreq->buf) & 0x03)) {
|
goto probe_end;
|
||||||
if (ep->in)
|
|
||||||
usbreq->dma = dma_map_single(&dev->pdev->dev,
|
|
||||||
usbreq->buf,
|
|
||||||
usbreq->length,
|
|
||||||
DMA_TO_DEVICE);
|
|
||||||
else
|
|
||||||
usbreq->dma = dma_map_single(&dev->pdev->dev,
|
|
||||||
usbreq->buf,
|
|
||||||
usbreq->length,
|
|
||||||
DMA_FROM_DEVICE);
|
|
||||||
} else {
|
|
||||||
req->buf = kzalloc(usbreq->length, GFP_ATOMIC);
|
|
||||||
if (!req->buf) {
|
|
||||||
retval = -ENOMEM;
|
|
||||||
goto probe_end;
|
|
||||||
}
|
|
||||||
if (ep->in) {
|
|
||||||
memcpy(req->buf, usbreq->buf, usbreq->length);
|
|
||||||
req->dma = dma_map_single(&dev->pdev->dev,
|
|
||||||
req->buf,
|
|
||||||
usbreq->length,
|
|
||||||
DMA_TO_DEVICE);
|
|
||||||
} else
|
|
||||||
req->dma = dma_map_single(&dev->pdev->dev,
|
|
||||||
req->buf,
|
|
||||||
usbreq->length,
|
|
||||||
DMA_FROM_DEVICE);
|
|
||||||
}
|
|
||||||
req->dma_mapped = 1;
|
|
||||||
}
|
|
||||||
if (usbreq->length > 0) {
|
if (usbreq->length > 0) {
|
||||||
retval = prepare_dma(ep, req, GFP_ATOMIC);
|
retval = prepare_dma(ep, req, GFP_ATOMIC);
|
||||||
if (retval)
|
if (retval)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user