Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'fixes-for-v3.15-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-linus

Felipe writes:

usb: fixes for v3.15-rc3

Quite a few fixes this time since I lost v3.15-rc2
window.

Most fixes are MUSB which learned to remove its debugfs directories
properly, got a fix for PHY handling and now knows that it should
make sure its clocks aren't gated before trying to access registers.

ffs got a race fix between ffs_epfile_io() and ffs_func_eps_disable().

dwc3 got a fix for system suspend/resume and now only iterates over
valid endpoints when trying to resize TX fifos.

usb_get_phy() now will properly return an error if try_module_get() fails.

We also have a revert for a NAPI conversion on the ethernet gadget which
was causing a kernel BUG.

Signed-of-by: Felipe Balbi <balbi@ti.com>

+78 -81
+1 -1
drivers/usb/dwc3/core.c
··· 821 821 822 822 spin_lock_irqsave(&dwc->lock, flags); 823 823 824 + dwc3_event_buffers_setup(dwc); 824 825 switch (dwc->dr_mode) { 825 826 case USB_DR_MODE_PERIPHERAL: 826 827 case USB_DR_MODE_OTG: ··· 829 828 /* FALLTHROUGH */ 830 829 case USB_DR_MODE_HOST: 831 830 default: 832 - dwc3_event_buffers_setup(dwc); 833 831 break; 834 832 } 835 833
+4 -8
drivers/usb/dwc3/gadget.c
··· 187 187 * improve this algorithm so that we better use the internal 188 188 * FIFO space 189 189 */ 190 - for (num = 0; num < DWC3_ENDPOINTS_NUM; num++) { 191 - struct dwc3_ep *dep = dwc->eps[num]; 192 - int fifo_number = dep->number >> 1; 190 + for (num = 0; num < dwc->num_in_eps; num++) { 191 + /* bit0 indicates direction; 1 means IN ep */ 192 + struct dwc3_ep *dep = dwc->eps[(num << 1) | 1]; 193 193 int mult = 1; 194 194 int tmp; 195 - 196 - if (!(dep->number & 1)) 197 - continue; 198 195 199 196 if (!(dep->flags & DWC3_EP_ENABLED)) 200 197 continue; ··· 221 224 dev_vdbg(dwc->dev, "%s: Fifo Addr %04x Size %d\n", 222 225 dep->name, last_fifo_depth, fifo_size & 0xffff); 223 226 224 - dwc3_writel(dwc->regs, DWC3_GTXFIFOSIZ(fifo_number), 225 - fifo_size); 227 + dwc3_writel(dwc->regs, DWC3_GTXFIFOSIZ(num), fifo_size); 226 228 227 229 last_fifo_depth += (fifo_size & 0xffff); 228 230 }
+7
drivers/usb/gadget/f_fs.c
··· 745 745 */ 746 746 struct usb_gadget *gadget = epfile->ffs->gadget; 747 747 748 + spin_lock_irq(&epfile->ffs->eps_lock); 749 + /* In the meantime, endpoint got disabled or changed. */ 750 + if (epfile->ep != ep) { 751 + spin_unlock_irq(&epfile->ffs->eps_lock); 752 + return -ESHUTDOWN; 753 + } 748 754 /* 749 755 * Controller may require buffer size to be aligned to 750 756 * maxpacketsize of an out endpoint. ··· 758 752 data_len = io_data->read ? 759 753 usb_ep_align_maybe(gadget, ep->ep, io_data->len) : 760 754 io_data->len; 755 + spin_unlock_irq(&epfile->ffs->eps_lock); 761 756 762 757 data = kmalloc(data_len, GFP_KERNEL); 763 758 if (unlikely(!data))
+1 -1
drivers/usb/gadget/f_rndis.c
··· 377 377 if (skb2) 378 378 rndis_add_hdr(skb2); 379 379 380 - dev_kfree_skb_any(skb); 380 + dev_kfree_skb(skb); 381 381 return skb2; 382 382 } 383 383
+5 -1
drivers/usb/gadget/fsl_udc_core.c
··· 1219 1219 struct fsl_udc *udc; 1220 1220 1221 1221 udc = container_of(gadget, struct fsl_udc, gadget); 1222 + 1223 + if (!udc->vbus_active) 1224 + return -EOPNOTSUPP; 1225 + 1222 1226 udc->softconnect = (is_on != 0); 1223 1227 if (can_pullup(udc)) 1224 1228 fsl_writel((fsl_readl(&dr_regs->usbcmd) | USB_CMD_RUN_STOP), ··· 2536 2532 if (!udc_controller) 2537 2533 return -ENODEV; 2538 2534 2539 - usb_del_gadget_udc(&udc_controller->gadget); 2540 2535 udc_controller->done = &done; 2536 + usb_del_gadget_udc(&udc_controller->gadget); 2541 2537 2542 2538 fsl_udc_clk_release(); 2543 2539
+1
drivers/usb/gadget/inode.c
··· 2043 2043 return -ESRCH; 2044 2044 2045 2045 /* fake probe to determine $CHIP */ 2046 + CHIP = NULL; 2046 2047 usb_gadget_probe_driver(&probe_driver); 2047 2048 if (!CHIP) 2048 2049 return -ENODEV;
+1
drivers/usb/gadget/rndis.c
··· 35 35 #include <asm/byteorder.h> 36 36 #include <asm/unaligned.h> 37 37 38 + #include "u_rndis.h" 38 39 39 40 #undef VERBOSE_DEBUG 40 41
+35 -66
drivers/usb/gadget/u_ether.c
··· 48 48 49 49 #define UETH__VERSION "29-May-2008" 50 50 51 - #define GETHER_NAPI_WEIGHT 32 52 - 53 51 struct eth_dev { 54 52 /* lock is held while accessing port_usb 55 53 */ ··· 72 74 struct sk_buff_head *list); 73 75 74 76 struct work_struct work; 75 - struct napi_struct rx_napi; 76 77 77 78 unsigned long todo; 78 79 #define WORK_RX_MEMORY 0 ··· 253 256 DBG(dev, "rx submit --> %d\n", retval); 254 257 if (skb) 255 258 dev_kfree_skb_any(skb); 259 + spin_lock_irqsave(&dev->req_lock, flags); 260 + list_add(&req->list, &dev->rx_reqs); 261 + spin_unlock_irqrestore(&dev->req_lock, flags); 256 262 } 257 263 return retval; 258 264 } 259 265 260 266 static void rx_complete(struct usb_ep *ep, struct usb_request *req) 261 267 { 262 - struct sk_buff *skb = req->context; 268 + struct sk_buff *skb = req->context, *skb2; 263 269 struct eth_dev *dev = ep->driver_data; 264 270 int status = req->status; 265 - bool rx_queue = 0; 266 271 267 272 switch (status) { 268 273 ··· 288 289 } else { 289 290 skb_queue_tail(&dev->rx_frames, skb); 290 291 } 291 - if (!status) 292 - rx_queue = 1; 292 + skb = NULL; 293 + 294 + skb2 = skb_dequeue(&dev->rx_frames); 295 + while (skb2) { 296 + if (status < 0 297 + || ETH_HLEN > skb2->len 298 + || skb2->len > VLAN_ETH_FRAME_LEN) { 299 + dev->net->stats.rx_errors++; 300 + dev->net->stats.rx_length_errors++; 301 + DBG(dev, "rx length %d\n", skb2->len); 302 + dev_kfree_skb_any(skb2); 303 + goto next_frame; 304 + } 305 + skb2->protocol = eth_type_trans(skb2, dev->net); 306 + dev->net->stats.rx_packets++; 307 + dev->net->stats.rx_bytes += skb2->len; 308 + 309 + /* no buffer copies needed, unless hardware can't 310 + * use skb buffers. 311 + */ 312 + status = netif_rx(skb2); 313 + next_frame: 314 + skb2 = skb_dequeue(&dev->rx_frames); 315 + } 293 316 break; 294 317 295 318 /* software-driven interface shutdown */ ··· 334 313 /* FALLTHROUGH */ 335 314 336 315 default: 337 - rx_queue = 1; 338 - dev_kfree_skb_any(skb); 339 316 dev->net->stats.rx_errors++; 340 317 DBG(dev, "rx status %d\n", status); 341 318 break; 342 319 } 343 320 321 + if (skb) 322 + dev_kfree_skb_any(skb); 323 + if (!netif_running(dev->net)) { 344 324 clean: 345 325 spin_lock(&dev->req_lock); 346 326 list_add(&req->list, &dev->rx_reqs); 347 327 spin_unlock(&dev->req_lock); 348 - 349 - if (rx_queue && likely(napi_schedule_prep(&dev->rx_napi))) 350 - __napi_schedule(&dev->rx_napi); 328 + req = NULL; 329 + } 330 + if (req) 331 + rx_submit(dev, req, GFP_ATOMIC); 351 332 } 352 333 353 334 static int prealloc(struct list_head *list, struct usb_ep *ep, unsigned n) ··· 414 391 { 415 392 struct usb_request *req; 416 393 unsigned long flags; 417 - int rx_counts = 0; 418 394 419 395 /* fill unused rxq slots with some skb */ 420 396 spin_lock_irqsave(&dev->req_lock, flags); 421 397 while (!list_empty(&dev->rx_reqs)) { 422 - 423 - if (++rx_counts > qlen(dev->gadget, dev->qmult)) 424 - break; 425 - 426 398 req = container_of(dev->rx_reqs.next, 427 399 struct usb_request, list); 428 400 list_del_init(&req->list); 429 401 spin_unlock_irqrestore(&dev->req_lock, flags); 430 402 431 403 if (rx_submit(dev, req, gfp_flags) < 0) { 432 - spin_lock_irqsave(&dev->req_lock, flags); 433 - list_add(&req->list, &dev->rx_reqs); 434 - spin_unlock_irqrestore(&dev->req_lock, flags); 435 404 defer_kevent(dev, WORK_RX_MEMORY); 436 405 return; 437 406 } ··· 431 416 spin_lock_irqsave(&dev->req_lock, flags); 432 417 } 433 418 spin_unlock_irqrestore(&dev->req_lock, flags); 434 - } 435 - 436 - static int gether_poll(struct napi_struct *napi, int budget) 437 - { 438 - struct eth_dev *dev = container_of(napi, struct eth_dev, rx_napi); 439 - struct sk_buff *skb; 440 - unsigned int work_done = 0; 441 - int status = 0; 442 - 443 - while ((skb = skb_dequeue(&dev->rx_frames))) { 444 - if (status < 0 445 - || ETH_HLEN > skb->len 446 - || skb->len > VLAN_ETH_FRAME_LEN) { 447 - dev->net->stats.rx_errors++; 448 - dev->net->stats.rx_length_errors++; 449 - DBG(dev, "rx length %d\n", skb->len); 450 - dev_kfree_skb_any(skb); 451 - continue; 452 - } 453 - skb->protocol = eth_type_trans(skb, dev->net); 454 - dev->net->stats.rx_packets++; 455 - dev->net->stats.rx_bytes += skb->len; 456 - 457 - status = netif_rx_ni(skb); 458 - } 459 - 460 - if (netif_running(dev->net)) { 461 - rx_fill(dev, GFP_KERNEL); 462 - work_done++; 463 - } 464 - 465 - if (work_done < budget) 466 - napi_complete(&dev->rx_napi); 467 - 468 - return work_done; 469 419 } 470 420 471 421 static void eth_work(struct work_struct *work) ··· 625 645 /* and open the tx floodgates */ 626 646 atomic_set(&dev->tx_qlen, 0); 627 647 netif_wake_queue(dev->net); 628 - napi_enable(&dev->rx_napi); 629 648 } 630 649 631 650 static int eth_open(struct net_device *net) ··· 651 672 unsigned long flags; 652 673 653 674 VDBG(dev, "%s\n", __func__); 654 - napi_disable(&dev->rx_napi); 655 675 netif_stop_queue(net); 656 676 657 677 DBG(dev, "stop stats: rx/tx %ld/%ld, errs %ld/%ld\n", ··· 768 790 return ERR_PTR(-ENOMEM); 769 791 770 792 dev = netdev_priv(net); 771 - netif_napi_add(net, &dev->rx_napi, gether_poll, GETHER_NAPI_WEIGHT); 772 793 spin_lock_init(&dev->lock); 773 794 spin_lock_init(&dev->req_lock); 774 795 INIT_WORK(&dev->work, eth_work); ··· 830 853 return ERR_PTR(-ENOMEM); 831 854 832 855 dev = netdev_priv(net); 833 - netif_napi_add(net, &dev->rx_napi, gether_poll, GETHER_NAPI_WEIGHT); 834 856 spin_lock_init(&dev->lock); 835 857 spin_lock_init(&dev->req_lock); 836 858 INIT_WORK(&dev->work, eth_work); ··· 1113 1137 { 1114 1138 struct eth_dev *dev = link->ioport; 1115 1139 struct usb_request *req; 1116 - struct sk_buff *skb; 1117 1140 1118 1141 WARN_ON(!dev); 1119 1142 if (!dev) ··· 1139 1164 spin_lock(&dev->req_lock); 1140 1165 } 1141 1166 spin_unlock(&dev->req_lock); 1142 - 1143 - spin_lock(&dev->rx_frames.lock); 1144 - while ((skb = __skb_dequeue(&dev->rx_frames))) 1145 - dev_kfree_skb_any(skb); 1146 - spin_unlock(&dev->rx_frames.lock); 1147 - 1148 1167 link->in_ep->driver_data = NULL; 1149 1168 link->in_ep->desc = NULL; 1150 1169
+1 -1
drivers/usb/gadget/zero.c
··· 300 300 ss_opts->isoc_interval = gzero_options.isoc_interval; 301 301 ss_opts->isoc_maxpacket = gzero_options.isoc_maxpacket; 302 302 ss_opts->isoc_mult = gzero_options.isoc_mult; 303 - ss_opts->isoc_maxburst = gzero_options.isoc_maxpacket; 303 + ss_opts->isoc_maxburst = gzero_options.isoc_maxburst; 304 304 ss_opts->bulk_buflen = gzero_options.bulk_buflen; 305 305 306 306 func_ss = usb_get_function(func_inst_ss);
+2 -3
drivers/usb/musb/musb_dsps.c
··· 470 470 struct dsps_glue *glue = dev_get_drvdata(dev->parent); 471 471 472 472 del_timer_sync(&glue->timer); 473 - 474 473 usb_phy_shutdown(musb->xceiv); 474 + debugfs_remove_recursive(glue->dbgfs_root); 475 + 475 476 return 0; 476 477 } 477 478 ··· 708 707 /* disable usbss clocks */ 709 708 pm_runtime_put(&pdev->dev); 710 709 pm_runtime_disable(&pdev->dev); 711 - 712 - debugfs_remove_recursive(glue->dbgfs_root); 713 710 714 711 return 0; 715 712 }
+8
drivers/usb/musb/omap2430.c
··· 316 316 { 317 317 struct omap2430_glue *glue = container_of(mailbox_work, 318 318 struct omap2430_glue, omap_musb_mailbox_work); 319 + struct musb *musb = glue_to_musb(glue); 320 + struct device *dev = musb->controller; 321 + 322 + pm_runtime_get_sync(dev); 319 323 omap_musb_set_mailbox(glue); 324 + pm_runtime_mark_last_busy(dev); 325 + pm_runtime_put_autosuspend(dev); 320 326 } 321 327 322 328 static irqreturn_t omap2430_musb_interrupt(int irq, void *__hci) ··· 422 416 omap_musb_set_mailbox(glue); 423 417 424 418 phy_init(musb->phy); 419 + phy_power_on(musb->phy); 425 420 426 421 pm_runtime_put_noidle(musb->controller); 427 422 return 0; ··· 485 478 del_timer_sync(&musb_idle_timer); 486 479 487 480 omap2430_low_level_exit(musb); 481 + phy_power_off(musb->phy); 488 482 phy_exit(musb->phy); 489 483 490 484 return 0;
+9
drivers/usb/phy/phy-am335x-control.c
··· 3 3 #include <linux/err.h> 4 4 #include <linux/of.h> 5 5 #include <linux/io.h> 6 + #include <linux/delay.h> 6 7 #include "am35x-phy-control.h" 7 8 8 9 struct am335x_control_usb { ··· 87 86 } 88 87 89 88 writel(val, usb_ctrl->phy_reg + reg); 89 + 90 + /* 91 + * Give the PHY ~1ms to complete the power up operation. 92 + * Tests have shown unstable behaviour if other USB PHY related 93 + * registers are written too shortly after such a transition. 94 + */ 95 + if (on) 96 + mdelay(1); 90 97 } 91 98 92 99 static const struct phy_control ctrl_am335x = {
+3
drivers/usb/phy/phy.c
··· 132 132 if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) { 133 133 pr_debug("PHY: unable to find transceiver of type %s\n", 134 134 usb_phy_type_string(type)); 135 + if (!IS_ERR(phy)) 136 + phy = ERR_PTR(-ENODEV); 137 + 135 138 goto err0; 136 139 } 137 140