Commit ed877b13 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge tag 'fixes-for-v4.2-rc4' of...

Merge tag 'fixes-for-v4.2-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-linus

Felipe writes:

usb: fixes for v4.2-rc4

Only four fixes this time so I'll describe them all.

We have an iomen resource leak fix in mv_udc_core. This bug
exists since v3.3.

Renesas got a fix for how they use dma_map_single() with IOMMU.

The new ulpi bus got an ordering fix, so drivers don't try to
probe ahead of the bus.

And finally, we have a fix for a really old regression with
dwc3, one which could only be exposed by a recent patch from
Subbaraya. Basically, we were startving the controller of
transfer resources.
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parents 52721d9d aebda618
...@@ -242,7 +242,7 @@ static int __init ulpi_init(void) ...@@ -242,7 +242,7 @@ static int __init ulpi_init(void)
{ {
return bus_register(&ulpi_bus); return bus_register(&ulpi_bus);
} }
module_init(ulpi_init); subsys_initcall(ulpi_init);
static void __exit ulpi_exit(void) static void __exit ulpi_exit(void)
{ {
......
...@@ -727,6 +727,10 @@ static int dwc3_ep0_std_request(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) ...@@ -727,6 +727,10 @@ static int dwc3_ep0_std_request(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_ISOCH_DELAY"); dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_ISOCH_DELAY");
ret = dwc3_ep0_set_isoch_delay(dwc, ctrl); ret = dwc3_ep0_set_isoch_delay(dwc, ctrl);
break; break;
case USB_REQ_SET_INTERFACE:
dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_INTERFACE");
dwc->start_config_issued = false;
/* Fall through */
default: default:
dwc3_trace(trace_dwc3_ep0, "Forwarding to gadget driver"); dwc3_trace(trace_dwc3_ep0, "Forwarding to gadget driver");
ret = dwc3_ep0_delegate_req(dwc, ctrl); ret = dwc3_ep0_delegate_req(dwc, ctrl);
......
...@@ -2167,7 +2167,7 @@ static int mv_udc_probe(struct platform_device *pdev) ...@@ -2167,7 +2167,7 @@ static int mv_udc_probe(struct platform_device *pdev)
return -ENODEV; return -ENODEV;
} }
udc->phy_regs = ioremap(r->start, resource_size(r)); udc->phy_regs = devm_ioremap(&pdev->dev, r->start, resource_size(r));
if (udc->phy_regs == NULL) { if (udc->phy_regs == NULL) {
dev_err(&pdev->dev, "failed to map phy I/O memory\n"); dev_err(&pdev->dev, "failed to map phy I/O memory\n");
return -EBUSY; return -EBUSY;
......
...@@ -60,13 +60,15 @@ static DEFINE_MUTEX(udc_lock); ...@@ -60,13 +60,15 @@ static DEFINE_MUTEX(udc_lock);
int usb_gadget_map_request(struct usb_gadget *gadget, int usb_gadget_map_request(struct usb_gadget *gadget,
struct usb_request *req, int is_in) struct usb_request *req, int is_in)
{ {
struct device *dev = gadget->dev.parent;
if (req->length == 0) if (req->length == 0)
return 0; return 0;
if (req->num_sgs) { if (req->num_sgs) {
int mapped; int mapped;
mapped = dma_map_sg(&gadget->dev, req->sg, req->num_sgs, mapped = dma_map_sg(dev, req->sg, req->num_sgs,
is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE); is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
if (mapped == 0) { if (mapped == 0) {
dev_err(&gadget->dev, "failed to map SGs\n"); dev_err(&gadget->dev, "failed to map SGs\n");
...@@ -75,11 +77,11 @@ int usb_gadget_map_request(struct usb_gadget *gadget, ...@@ -75,11 +77,11 @@ int usb_gadget_map_request(struct usb_gadget *gadget,
req->num_mapped_sgs = mapped; req->num_mapped_sgs = mapped;
} else { } else {
req->dma = dma_map_single(&gadget->dev, req->buf, req->length, req->dma = dma_map_single(dev, req->buf, req->length,
is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE); is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
if (dma_mapping_error(&gadget->dev, req->dma)) { if (dma_mapping_error(dev, req->dma)) {
dev_err(&gadget->dev, "failed to map buffer\n"); dev_err(dev, "failed to map buffer\n");
return -EFAULT; return -EFAULT;
} }
} }
...@@ -95,12 +97,12 @@ void usb_gadget_unmap_request(struct usb_gadget *gadget, ...@@ -95,12 +97,12 @@ void usb_gadget_unmap_request(struct usb_gadget *gadget,
return; return;
if (req->num_mapped_sgs) { if (req->num_mapped_sgs) {
dma_unmap_sg(&gadget->dev, req->sg, req->num_mapped_sgs, dma_unmap_sg(gadget->dev.parent, req->sg, req->num_mapped_sgs,
is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE); is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
req->num_mapped_sgs = 0; req->num_mapped_sgs = 0;
} else { } else {
dma_unmap_single(&gadget->dev, req->dma, req->length, dma_unmap_single(gadget->dev.parent, req->dma, req->length,
is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE); is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment