]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge remote-tracking branch 'usb/usb-next'
authorStephen Rothwell <sfr@canb.auug.org.au>
Thu, 22 Aug 2013 05:48:20 +0000 (15:48 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Thu, 22 Aug 2013 05:48:20 +0000 (15:48 +1000)
Conflicts:
include/linux/usb/usbnet.h

1  2 
MAINTAINERS
drivers/net/usb/ax88179_178a.c
drivers/net/usb/usbnet.c
drivers/usb/gadget/storage_common.c
drivers/usb/host/fsl-mph-dr-of.c
include/linux/usb/usbnet.h

diff --combined MAINTAINERS
index 64b01d400598455b4282df18807af781dd724eaf,94da71142b7e17f436cddef30912c86569070585..9b2a82ea3b6c111ef2fab903efd5096ac5abd982
@@@ -595,7 -595,6 +595,7 @@@ S: Supporte
  F:    sound/soc/codecs/adau*
  F:    sound/soc/codecs/adav*
  F:    sound/soc/codecs/ad1*
 +F:    sound/soc/codecs/ad7*
  F:    sound/soc/codecs/ssm*
  F:    sound/soc/codecs/sigmadsp.*
  
@@@ -2113,13 -2112,6 +2113,13 @@@ M:    Russell King <linux@arm.linux.org.uk
  S:    Maintained
  F:    include/linux/clk.h
  
 +CLOCKSOURCE, CLOCKEVENT DRIVERS
 +M:    Daniel Lezcano <daniel.lezcano@linaro.org>
 +M:    Thomas Gleixner <tglx@linutronix.de>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
 +S:    Supported
 +F:    drivers/clocksource
 +
  CISCO FCOE HBA DRIVER
  M:    Hiral Patel <hiralpat@cisco.com>
  M:    Suma Ramars <sramars@cisco.com>
@@@ -4373,7 -4365,7 +4373,7 @@@ F:      drivers/net/wireless/iwlegacy
  
  INTEL WIRELESS WIFI LINK (iwlwifi)
  M:    Johannes Berg <johannes.berg@intel.com>
 -M:    Wey-Yi Guy <wey-yi.w.guy@intel.com>
 +M:    Emmanuel Grumbach <emmanuel.grumbach@intel.com>
  M:    Intel Linux Wireless <ilw@linux.intel.com>
  L:    linux-wireless@vger.kernel.org
  W:    http://intellinuxwireless.org
@@@ -5404,7 -5396,6 +5404,7 @@@ F:      drivers/watchdog/mena21_wdt.
  
  METAG ARCHITECTURE
  M:    James Hogan <james.hogan@imgtec.com>
 +L:    linux-metag@vger.kernel.org
  S:    Supported
  F:    arch/metag/
  F:    Documentation/metag/
@@@ -5801,7 -5792,7 +5801,7 @@@ M:      Aloisio Almeida Jr <aloisio.almeida@
  M:    Samuel Ortiz <sameo@linux.intel.com>
  L:    linux-wireless@vger.kernel.org
  L:    linux-nfc@lists.01.org (moderated for non-subscribers)
 -S:    Maintained
 +S:    Supported
  F:    net/nfc/
  F:    include/net/nfc/
  F:    include/uapi/linux/nfc.h
@@@ -7140,7 -7131,6 +7140,7 @@@ F:      drivers/tty/seria
  
  SYNOPSYS DESIGNWARE DMAC DRIVER
  M:    Viresh Kumar <viresh.linux@gmail.com>
 +M:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
  S:    Maintained
  F:    include/linux/dw_dmac.h
  F:    drivers/dma/dw/
@@@ -7153,7 -7143,7 +7153,7 @@@ S:      Maintaine
  F:    include/linux/mmc/dw_mmc.h
  F:    drivers/mmc/host/dw_mmc*
  
 -TIMEKEEPING, NTP
 +TIMEKEEPING, CLOCKSOURCE CORE, NTP
  M:    John Stultz <john.stultz@linaro.org>
  M:    Thomas Gleixner <tglx@linutronix.de>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
@@@ -7166,6 -7156,7 +7166,6 @@@ F:      include/uapi/linux/timex.
  F:    kernel/time/clocksource.c
  F:    kernel/time/time*.c
  F:    kernel/time/ntp.c
 -F:    drivers/clocksource
  
  TLG2300 VIDEO4LINUX-2 DRIVER
  M:    Huang Shijie <shijie8@gmail.com>
@@@ -7245,7 -7236,6 +7245,7 @@@ W:      http://lksctp.sourceforge.ne
  S:    Maintained
  F:    Documentation/networking/sctp.txt
  F:    include/linux/sctp.h
 +F:    include/uapi/linux/sctp.h
  F:    include/net/sctp/
  F:    net/sctp/
  
@@@ -7560,14 -7550,6 +7560,14 @@@ S:    Maintaine
  F:    Documentation/security/Smack.txt
  F:    security/smack/
  
 +SMARTREFLEX DRIVERS FOR ADAPTIVE VOLTAGE SCALING (AVS)
 +M:    Kevin Hilman <khilman@kernel.org>
 +M:    Nishanth Menon <nm@ti.com>
 +S:    Maintained
 +F:    drivers/power/avs/smartreflex.c
 +F:    include/linux/power/smartreflex.h
 +L:    linux-pm@vger.kernel.org
 +
  SMC91x ETHERNET DRIVER
  M:    Nicolas Pitre <nico@fluxnic.net>
  S:    Odd Fixes
@@@ -7693,17 -7675,6 +7693,17 @@@ F:    include/sound
  F:    include/uapi/sound/
  F:    sound/
  
 +SOUND - COMPRESSED AUDIO
 +M:    Vinod Koul <vinod.koul@intel.com>
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
 +S:    Supported
 +F:    Documentation/sound/alsa/compress_offload.txt
 +F:    include/sound/compress_driver.h
 +F:    include/uapi/sound/compress_*
 +F:    sound/core/compress_offload.c
 +F:    sound/soc/soc-compress.c
 +
  SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC)
  M:    Liam Girdwood <lgirdwood@gmail.com>
  M:    Mark Brown <broonie@kernel.org>
@@@ -7711,7 -7682,6 +7711,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  W:    http://alsa-project.org/main/index.php/ASoC
  S:    Supported
 +F:    Documentation/sound/alsa/soc/
  F:    sound/soc/
  F:    include/sound/soc*
  
@@@ -8002,12 -7972,6 +8002,12 @@@ F:    arch/m68k/sun3*
  F:    arch/m68k/include/asm/sun3*
  F:    drivers/net/ethernet/i825xx/sun3*
  
 +SUNDANCE NETWORK DRIVER
 +M:    Denis Kirjanov <kda@linux-powerpc.org>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/ethernet/dlink/sundance.c
 +
  SUPERH
  M:    Paul Mundt <lethal@linux-sh.org>
  L:    linux-sh@vger.kernel.org
@@@ -8343,15 -8307,9 +8343,15 @@@ M:    Chris Metcalf <cmetcalf@tilera.com
  W:    http://www.tilera.com/scm/
  S:    Supported
  F:    arch/tile/
 -F:    drivers/tty/hvc/hvc_tile.c
 -F:    drivers/net/ethernet/tile/
 +F:    drivers/char/tile-srom.c
 +F:    drivers/cpufreq/tilegx-cpufreq.c
  F:    drivers/edac/tile_edac.c
 +F:    drivers/net/ethernet/tile/
 +F:    drivers/rtc/rtc-tile.c
 +F:    drivers/tty/hvc/hvc_tile.c
 +F:    drivers/tty/serial/tilegx.c
 +F:    drivers/usb/host/*-tilegx.c
 +F:    include/linux/usb/tilegx.h
  
  TLAN NETWORK DRIVER
  M:    Samuel Chessman <chessman@tux.org>
@@@ -8845,7 -8803,6 +8845,6 @@@ W:      http://www.linux-usb.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
  S:    Supported
  F:    Documentation/usb/
- F:    drivers/net/usb/
  F:    drivers/usb/
  F:    include/linux/usb.h
  F:    include/linux/usb/
@@@ -9289,9 -9246,9 +9288,9 @@@ F:      drivers/media/tuners/tuner-xc2028.
  
  XEN HYPERVISOR INTERFACE
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
 -M:    Jeremy Fitzhardinge <jeremy@goop.org>
 -L:    xen-devel@lists.xensource.com (moderated for non-subscribers)
 -L:    virtualization@lists.linux-foundation.org
 +M:    Boris Ostrovsky <boris.ostrovsky@oracle.com>
 +M:    David Vrabel <david.vrabel@citrix.com>
 +L:    xen-devel@lists.xenproject.org (moderated for non-subscribers)
  S:    Supported
  F:    arch/x86/xen/
  F:    drivers/*/xen-*front.c
@@@ -9302,35 -9259,35 +9301,35 @@@ F:   include/uapi/xen
  
  XEN HYPERVISOR ARM
  M:    Stefano Stabellini <stefano.stabellini@eu.citrix.com>
 -L:    xen-devel@lists.xensource.com (moderated for non-subscribers)
 +L:    xen-devel@lists.xenproject.org (moderated for non-subscribers)
  S:    Supported
  F:    arch/arm/xen/
  F:    arch/arm/include/asm/xen/
  
  XEN HYPERVISOR ARM64
  M:    Stefano Stabellini <stefano.stabellini@eu.citrix.com>
 -L:    xen-devel@lists.xensource.com (moderated for non-subscribers)
 +L:    xen-devel@lists.xenproject.org (moderated for non-subscribers)
  S:    Supported
  F:    arch/arm64/xen/
  F:    arch/arm64/include/asm/xen/
  
  XEN NETWORK BACKEND DRIVER
  M:    Ian Campbell <ian.campbell@citrix.com>
 -L:    xen-devel@lists.xensource.com (moderated for non-subscribers)
 +L:    xen-devel@lists.xenproject.org (moderated for non-subscribers)
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/xen-netback/*
  
  XEN PCI SUBSYSTEM
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
 -L:    xen-devel@lists.xensource.com (moderated for non-subscribers)
 +L:    xen-devel@lists.xenproject.org (moderated for non-subscribers)
  S:    Supported
  F:    arch/x86/pci/*xen*
  F:    drivers/pci/*xen*
  
  XEN SWIOTLB SUBSYSTEM
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
 -L:    xen-devel@lists.xensource.com (moderated for non-subscribers)
 +L:    xen-devel@lists.xenproject.org (moderated for non-subscribers)
  S:    Supported
  F:    arch/x86/xen/*swiotlb*
  F:    drivers/xen/*swiotlb*
index fb0caa289d0bfe53e8632305379afbc86abf2502,4233c05a3e326401ef1c2462d408861c693f0db1..3569293df8726df8c87786ad83b5be506e6b3285
@@@ -688,9 -688,6 +688,9 @@@ static int ax88179_change_mtu(struct ne
                                  2, 2, &tmp16);
        }
  
 +      /* max qlen depend on hard_mtu and rx_urb_size */
 +      usbnet_update_max_qlen(dev);
 +
        return 0;
  }
  
@@@ -1031,12 -1028,20 +1031,20 @@@ static int ax88179_bind(struct usbnet *
        dev->mii.phy_id = 0x03;
        dev->mii.supports_gmii = 1;
  
+       if (usb_device_no_sg_constraint(dev->udev))
+               dev->can_dma_sg = 1;
        dev->net->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
                              NETIF_F_RXCSUM;
  
        dev->net->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
                                 NETIF_F_RXCSUM;
  
+       if (dev->can_dma_sg) {
+               dev->net->features |= NETIF_F_SG | NETIF_F_TSO;
+               dev->net->hw_features |= NETIF_F_SG | NETIF_F_TSO;
+       }
        /* Enable checksum offload */
        *tmp = AX_RXCOE_IP | AX_RXCOE_TCP | AX_RXCOE_UDP |
               AX_RXCOE_TCPV6 | AX_RXCOE_UDPV6;
@@@ -1169,18 -1174,31 +1177,18 @@@ ax88179_tx_fixup(struct usbnet *dev, st
        int frame_size = dev->maxpacket;
        int mss = skb_shinfo(skb)->gso_size;
        int headroom;
 -      int tailroom;
  
        tx_hdr1 = skb->len;
        tx_hdr2 = mss;
        if (((skb->len + 8) % frame_size) == 0)
                tx_hdr2 |= 0x80008000;  /* Enable padding */
  
 -      headroom = skb_headroom(skb);
 -      tailroom = skb_tailroom(skb);
 -
 -      if (!skb_header_cloned(skb) &&
 -          !skb_cloned(skb) &&
 -          (headroom + tailroom) >= 8) {
 -              if (headroom < 8) {
 -                      skb->data = memmove(skb->head + 8, skb->data, skb->len);
 -                      skb_set_tail_pointer(skb, skb->len);
 -              }
 -      } else {
 -              struct sk_buff *skb2;
 +      headroom = skb_headroom(skb) - 8;
  
 -              skb2 = skb_copy_expand(skb, 8, 0, flags);
 +      if ((skb_header_cloned(skb) || headroom < 0) &&
 +          pskb_expand_head(skb, headroom < 0 ? 8 : 0, 0, GFP_ATOMIC)) {
                dev_kfree_skb_any(skb);
 -              skb = skb2;
 -              if (!skb)
 -                      return NULL;
 +              return NULL;
        }
  
        skb_push(skb, 4);
diff --combined drivers/net/usb/usbnet.c
index e4811d7b5af1cb19aad389f231781cede61c3f81,27a00b00603325c61a96d36a7b7ecd1fe64dd269..534b60b1056732efdecd931798d85784f00a2f31
   * For high speed, each frame comfortably fits almost 36 max size
   * Ethernet packets (so queues should be bigger).
   *
 - * REVISIT qlens should be members of 'struct usbnet'; the goal is to
 - * let the USB host controller be busy for 5msec or more before an irq
 - * is required, under load.  Jumbograms change the equation.
 + * The goal is to let the USB host controller be busy for 5msec or
 + * more before an irq is required, under load.  Jumbograms change
 + * the equation.
   */
 -#define RX_MAX_QUEUE_MEMORY (60 * 1518)
 -#define       RX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? \
 -                      (RX_MAX_QUEUE_MEMORY/(dev)->rx_urb_size) : 4)
 -#define       TX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? \
 -                      (RX_MAX_QUEUE_MEMORY/(dev)->hard_mtu) : 4)
 +#define       MAX_QUEUE_MEMORY        (60 * 1518)
 +#define       RX_QLEN(dev)            ((dev)->rx_qlen)
 +#define       TX_QLEN(dev)            ((dev)->tx_qlen)
  
  // reawaken network queue this soon after stopping; else watchdog barks
  #define TX_TIMEOUT_JIFFIES    (5*HZ)
@@@ -345,31 -347,6 +345,31 @@@ void usbnet_skb_return (struct usbnet *
  }
  EXPORT_SYMBOL_GPL(usbnet_skb_return);
  
 +/* must be called if hard_mtu or rx_urb_size changed */
 +void usbnet_update_max_qlen(struct usbnet *dev)
 +{
 +      enum usb_device_speed speed = dev->udev->speed;
 +
 +      switch (speed) {
 +      case USB_SPEED_HIGH:
 +              dev->rx_qlen = MAX_QUEUE_MEMORY / dev->rx_urb_size;
 +              dev->tx_qlen = MAX_QUEUE_MEMORY / dev->hard_mtu;
 +              break;
 +      case USB_SPEED_SUPER:
 +              /*
 +               * Not take default 5ms qlen for super speed HC to
 +               * save memory, and iperf tests show 2.5ms qlen can
 +               * work well
 +               */
 +              dev->rx_qlen = 5 * MAX_QUEUE_MEMORY / dev->rx_urb_size;
 +              dev->tx_qlen = 5 * MAX_QUEUE_MEMORY / dev->hard_mtu;
 +              break;
 +      default:
 +              dev->rx_qlen = dev->tx_qlen = 4;
 +      }
 +}
 +EXPORT_SYMBOL_GPL(usbnet_update_max_qlen);
 +
  \f
  /*-------------------------------------------------------------------------
   *
@@@ -398,9 -375,6 +398,9 @@@ int usbnet_change_mtu (struct net_devic
                        usbnet_unlink_rx_urbs(dev);
        }
  
 +      /* max qlen depend on hard_mtu and rx_urb_size */
 +      usbnet_update_max_qlen(dev);
 +
        return 0;
  }
  EXPORT_SYMBOL_GPL(usbnet_change_mtu);
@@@ -869,9 -843,6 +869,9 @@@ int usbnet_open (struct net_device *net
                goto done;
        }
  
 +      /* hard_mtu or rx_urb_size may change in reset() */
 +      usbnet_update_max_qlen(dev);
 +
        // insist peer be connected
        if (info->check_connect && (retval = info->check_connect (dev)) < 0) {
                netif_dbg(dev, ifup, dev->net, "can't open; %d\n", retval);
@@@ -956,9 -927,6 +956,9 @@@ int usbnet_set_settings (struct net_dev
        if (dev->driver_info->link_reset)
                dev->driver_info->link_reset(dev);
  
 +      /* hard_mtu or rx_urb_size may change in link_reset() */
 +      usbnet_update_max_qlen(dev);
 +
        return retval;
  
  }
@@@ -1052,9 -1020,6 +1052,9 @@@ static void __handle_link_change(struc
                tasklet_schedule(&dev->bh);
        }
  
 +      /* hard_mtu or rx_urb_size may change during link change */
 +      usbnet_update_max_qlen(dev);
 +
        clear_bit(EVENT_LINK_CHANGE, &dev->flags);
  }
  
@@@ -1232,6 -1197,37 +1232,37 @@@ EXPORT_SYMBOL_GPL(usbnet_tx_timeout)
  
  /*-------------------------------------------------------------------------*/
  
+ static int build_dma_sg(const struct sk_buff *skb, struct urb *urb)
+ {
+       unsigned num_sgs, total_len = 0;
+       int i, s = 0;
+       num_sgs = skb_shinfo(skb)->nr_frags + 1;
+       if (num_sgs == 1)
+               return 0;
+       urb->sg = kmalloc(num_sgs * sizeof(struct scatterlist), GFP_ATOMIC);
+       if (!urb->sg)
+               return -ENOMEM;
+       urb->num_sgs = num_sgs;
+       sg_init_table(urb->sg, urb->num_sgs);
+       sg_set_buf(&urb->sg[s++], skb->data, skb_headlen(skb));
+       total_len += skb_headlen(skb);
+       for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
+               struct skb_frag_struct *f = &skb_shinfo(skb)->frags[i];
+               total_len += skb_frag_size(f);
+               sg_set_page(&urb->sg[i + s], f->page.p, f->size,
+                               f->page_offset);
+       }
+       urb->transfer_buffer_length = total_len;
+       return 1;
+ }
  netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
                                     struct net_device *net)
  {
                        goto drop;
                }
        }
-       length = skb->len;
  
        if (!(urb = usb_alloc_urb (0, GFP_ATOMIC))) {
                netif_dbg(dev, tx_err, dev->net, "no urb\n");
        entry = (struct skb_data *) skb->cb;
        entry->urb = urb;
        entry->dev = dev;
-       entry->length = length;
  
        usb_fill_bulk_urb (urb, dev->udev, dev->out,
                        skb->data, skb->len, tx_complete, skb);
+       if (dev->can_dma_sg) {
+               if (build_dma_sg(skb, urb) < 0)
+                       goto drop;
+       }
+       entry->length = length = urb->transfer_buffer_length;
  
        /* don't assume the hardware handles USB_ZERO_PACKET
         * NOTE:  strictly conforming cdc-ether devices should expect
@@@ -1340,7 -1339,10 +1374,10 @@@ drop
  not_drop:
                if (skb)
                        dev_kfree_skb_any (skb);
-               usb_free_urb (urb);
+               if (urb) {
+                       kfree(urb->sg);
+                       usb_free_urb(urb);
+               }
        } else
                netif_dbg(dev, tx_queued, dev->net,
                          "> tx, len %d, type 0x%x\n", length, skb->protocol);
@@@ -1391,6 -1393,7 +1428,7 @@@ static void usbnet_bh (unsigned long pa
                        rx_process (dev, skb);
                        continue;
                case tx_done:
+                       kfree(entry->urb->sg);
                case rx_cleanup:
                        usb_free_urb (entry->urb);
                        dev_kfree_skb (skb);
@@@ -1634,9 -1637,6 +1672,9 @@@ usbnet_probe (struct usb_interface *ude
        if ((dev->driver_info->flags & FLAG_WWAN) != 0)
                SET_NETDEV_DEVTYPE(net, &wwan_type);
  
 +      /* initialize max rx_qlen and tx_qlen */
 +      usbnet_update_max_qlen(dev);
 +
        status = register_netdev (net);
        if (status)
                goto out4;
@@@ -1727,6 -1727,7 +1765,7 @@@ int usbnet_resume (struct usb_interfac
                        retval = usb_submit_urb(res, GFP_ATOMIC);
                        if (retval < 0) {
                                dev_kfree_skb_any(skb);
+                               kfree(res->sg);
                                usb_free_urb(res);
                                usb_autopm_put_interface_async(dev->intf);
                        } else {
index a801a005540e3c3e5958b577302f40ad07b2eb1e,8c71212a8c524cbf4b494b0c8aaa9bd94b3c7186..072561ba5a0bd5c6e51580778cf7652ffa40c6f6
@@@ -172,7 -172,7 +172,7 @@@ MODULE_PARM_DESC(num_buffers, "Number o
   */
  #define fsg_num_buffers       CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS
  
- #endif /* CONFIG_USB_DEBUG */
+ #endif /* CONFIG_USB_GADGET_DEBUG_FILES */
  
  /* check if fsg_num_buffers is within a valid range */
  static inline int fsg_num_buffers_validate(void)
@@@ -450,11 -450,11 +450,11 @@@ static int fsg_lun_open(struct fsg_lun 
         * If we can't read the file, it's no good.
         * If we can't write the file, use it read-only.
         */
 -      if (!(filp->f_op->read || filp->f_op->aio_read)) {
 +      if (!file_readable(filp)) {
                LINFO(curlun, "file not readable: %s\n", filename);
                goto out;
        }
 -      if (!(filp->f_op->write || filp->f_op->aio_write))
 +      if (!file_writable(filp))
                ro = 1;
  
        size = i_size_read(inode->i_mapping->host);
index b8a18665b1805ad8609b97cbbce5e671cfbda202,cfbff7161828005c6ea3732f30e452563c238d9e..217d2f7e65555287ca183a1134b920d1e29cd953
@@@ -258,9 -258,8 +258,9 @@@ static int fsl_usb2_mph_dr_of_remove(st
  
  int fsl_usb2_mpc5121_init(struct platform_device *pdev)
  {
-       struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data;
+       struct fsl_usb2_platform_data *pdata = dev_get_platdata(&pdev->dev);
        struct clk *clk;
 +      int err;
        char clk_name[10];
        int base, clk_num;
  
                return -ENODEV;
  
        snprintf(clk_name, sizeof(clk_name), "usb%d_clk", clk_num);
 -      clk = clk_get(&pdev->dev, clk_name);
 +      clk = devm_clk_get(&pdev->dev, clk_name);
        if (IS_ERR(clk)) {
                dev_err(&pdev->dev, "failed to get clk\n");
                return PTR_ERR(clk);
        }
 -
 -      clk_enable(clk);
 +      err = clk_prepare_enable(clk);
 +      if (err) {
 +              dev_err(&pdev->dev, "failed to enable clk\n");
 +              return err;
 +      }
        pdata->clk = clk;
  
        if (pdata->phy_mode == FSL_USB2_PHY_UTMI_WIDE) {
  
  static void fsl_usb2_mpc5121_exit(struct platform_device *pdev)
  {
-       struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data;
+       struct fsl_usb2_platform_data *pdata = dev_get_platdata(&pdev->dev);
  
        pdata->regs = NULL;
  
 -      if (pdata->clk) {
 -              clk_disable(pdata->clk);
 -              clk_put(pdata->clk);
 -      }
 +      if (pdata->clk)
 +              clk_disable_unprepare(pdata->clk);
  }
  
  static struct fsl_usb2_platform_data fsl_usb2_mpc5121_pd = {
index 8fbc008e183e33704ddbc0f8cc63c3cd69b5f753,2b47e6364e3697ff1fbd684b923da5cd6ec65e82..9cb2fe8ca944d5095043dd7b7ce71116a3fc21eb
@@@ -34,7 -34,7 +34,8 @@@ struct usbnet 
        struct mutex            phy_mutex;
        unsigned char           suspend_count;
        unsigned char           pkt_cnt, pkt_err;
 +      unsigned short          rx_qlen, tx_qlen;
+       unsigned                can_dma_sg:1;
  
        /* i/o info: pipes etc */
        unsigned                in, out;
@@@ -254,6 -254,4 +255,6 @@@ extern void usbnet_link_change(struct u
  extern int usbnet_status_start(struct usbnet *dev, gfp_t mem_flags);
  extern void usbnet_status_stop(struct usbnet *dev);
  
 +extern void usbnet_update_max_qlen(struct usbnet *dev);
 +
  #endif /* __LINUX_USB_USBNET_H */