aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-07-22 12:41:15 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-07-22 12:41:15 -0400
commited877b130dded73fbc6474ae935fce6d18c1a646 (patch)
treefec951eae8a5e725e36451b11e23ad66dc327916
parent52721d9d3334c1cb1f76219a161084094ec634dc (diff)
parentaebda618718157a69c0dc0adb978d69bc2b8723c (diff)
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: Felipe Balbi <balbi@ti.com>
-rw-r--r--drivers/usb/common/ulpi.c2
-rw-r--r--drivers/usb/dwc3/ep0.c4
-rw-r--r--drivers/usb/gadget/udc/mv_udc_core.c2
-rw-r--r--drivers/usb/gadget/udc/udc-core.c14
4 files changed, 14 insertions, 8 deletions
diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c
index 0e6f968e93fe..01c0c0477a9e 100644
--- a/drivers/usb/common/ulpi.c
+++ b/drivers/usb/common/ulpi.c
@@ -242,7 +242,7 @@ static int __init ulpi_init(void)
242{ 242{
243 return bus_register(&ulpi_bus); 243 return bus_register(&ulpi_bus);
244} 244}
245module_init(ulpi_init); 245subsys_initcall(ulpi_init);
246 246
247static void __exit ulpi_exit(void) 247static void __exit ulpi_exit(void)
248{ 248{
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
index 2ef3c8d6a9db..69e769c35cf5 100644
--- a/drivers/usb/dwc3/ep0.c
+++ b/drivers/usb/dwc3/ep0.c
@@ -727,6 +727,10 @@ static int dwc3_ep0_std_request(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
727 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_ISOCH_DELAY"); 727 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_ISOCH_DELAY");
728 ret = dwc3_ep0_set_isoch_delay(dwc, ctrl); 728 ret = dwc3_ep0_set_isoch_delay(dwc, ctrl);
729 break; 729 break;
730 case USB_REQ_SET_INTERFACE:
731 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_INTERFACE");
732 dwc->start_config_issued = false;
733 /* Fall through */
730 default: 734 default:
731 dwc3_trace(trace_dwc3_ep0, "Forwarding to gadget driver"); 735 dwc3_trace(trace_dwc3_ep0, "Forwarding to gadget driver");
732 ret = dwc3_ep0_delegate_req(dwc, ctrl); 736 ret = dwc3_ep0_delegate_req(dwc, ctrl);
diff --git a/drivers/usb/gadget/udc/mv_udc_core.c b/drivers/usb/gadget/udc/mv_udc_core.c
index d32160d6463f..5da37c957b53 100644
--- a/drivers/usb/gadget/udc/mv_udc_core.c
+++ b/drivers/usb/gadget/udc/mv_udc_core.c
@@ -2167,7 +2167,7 @@ static int mv_udc_probe(struct platform_device *pdev)
2167 return -ENODEV; 2167 return -ENODEV;
2168 } 2168 }
2169 2169
2170 udc->phy_regs = ioremap(r->start, resource_size(r)); 2170 udc->phy_regs = devm_ioremap(&pdev->dev, r->start, resource_size(r));
2171 if (udc->phy_regs == NULL) { 2171 if (udc->phy_regs == NULL) {
2172 dev_err(&pdev->dev, "failed to map phy I/O memory\n"); 2172 dev_err(&pdev->dev, "failed to map phy I/O memory\n");
2173 return -EBUSY; 2173 return -EBUSY;
diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
index d69c35558f68..362ee8af5fce 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -60,13 +60,15 @@ static DEFINE_MUTEX(udc_lock);
60int usb_gadget_map_request(struct usb_gadget *gadget, 60int usb_gadget_map_request(struct usb_gadget *gadget,
61 struct usb_request *req, int is_in) 61 struct usb_request *req, int is_in)
62{ 62{
63 struct device *dev = gadget->dev.parent;
64
63 if (req->length == 0) 65 if (req->length == 0)
64 return 0; 66 return 0;
65 67
66 if (req->num_sgs) { 68 if (req->num_sgs) {
67 int mapped; 69 int mapped;
68 70
69 mapped = dma_map_sg(&gadget->dev, req->sg, req->num_sgs, 71 mapped = dma_map_sg(dev, req->sg, req->num_sgs,
70 is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE); 72 is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
71 if (mapped == 0) { 73 if (mapped == 0) {
72 dev_err(&gadget->dev, "failed to map SGs\n"); 74 dev_err(&gadget->dev, "failed to map SGs\n");
@@ -75,11 +77,11 @@ int usb_gadget_map_request(struct usb_gadget *gadget,
75 77
76 req->num_mapped_sgs = mapped; 78 req->num_mapped_sgs = mapped;
77 } else { 79 } else {
78 req->dma = dma_map_single(&gadget->dev, req->buf, req->length, 80 req->dma = dma_map_single(dev, req->buf, req->length,
79 is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE); 81 is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
80 82
81 if (dma_mapping_error(&gadget->dev, req->dma)) { 83 if (dma_mapping_error(dev, req->dma)) {
82 dev_err(&gadget->dev, "failed to map buffer\n"); 84 dev_err(dev, "failed to map buffer\n");
83 return -EFAULT; 85 return -EFAULT;
84 } 86 }
85 } 87 }
@@ -95,12 +97,12 @@ void usb_gadget_unmap_request(struct usb_gadget *gadget,
95 return; 97 return;
96 98
97 if (req->num_mapped_sgs) { 99 if (req->num_mapped_sgs) {
98 dma_unmap_sg(&gadget->dev, req->sg, req->num_mapped_sgs, 100 dma_unmap_sg(gadget->dev.parent, req->sg, req->num_mapped_sgs,
99 is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE); 101 is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
100 102
101 req->num_mapped_sgs = 0; 103 req->num_mapped_sgs = 0;
102 } else { 104 } else {
103 dma_unmap_single(&gadget->dev, req->dma, req->length, 105 dma_unmap_single(gadget->dev.parent, req->dma, req->length,
104 is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE); 106 is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
105 } 107 }
106} 108}