USB/PHY patches for 4.11-rc1

Here is the big USB and PHY driver updates for 4.11-rc1.
 
 Nothing major, just the normal amount of churn in the usb gadget and dwc
 and xhci controllers, new device ids, new phy drivers, a new usb-serial
 driver, and a few other minor changes in different USB drivers.
 
 All have been in linux-next for a long time with no reported issues.
 
 Signed-off-by: Greg Kroah-Hartman <[email protected]>
 -----BEGIN PGP SIGNATURE-----
 
 iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCWK2lrg8cZ3JlZ0Brcm9h
 aC5jb20ACgkQMUfUDdst+ykh7ACffotTJvB/gwpuSIWh6qhA8KQ9mH8AnjlxMafv
 b5b3vfOXJ8/N0Go25VwI
 =7fqN
 -----END PGP SIGNATURE-----

Merge tag 'usb-4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb

Pull USB/PHY updates from Greg KH:
 "Here is the big USB and PHY driver updates for 4.11-rc1.

  Nothing major, just the normal amount of churn in the usb gadget and
  dwc and xhci controllers, new device ids, new phy drivers, a new
  usb-serial driver, and a few other minor changes in different USB
  drivers.

  All have been in linux-next for a long time with no reported issues"

* tag 'usb-4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (265 commits)
  usb: cdc-wdm: remove logically dead code
  USB: serial: keyspan: drop header file
  USB: serial: io_edgeport: drop io-tables header file
  usb: musb: add code comment for clarification
  usb: misc: add USB251xB/xBi Hi-Speed Hub Controller Driver
  usb: misc: usbtest: remove redundant check on retval < 0
  USB: serial: upd78f0730: sort device ids
  USB: serial: upd78f0730: add ID for EVAL-ADXL362Z
  ohci-hub: fix typo in dbg_port macro
  usb: musb: dsps: Manage CPPI 4.1 DMA interrupt in DSPS
  usb: musb: tusb6010: Clean up tusb_omap_dma structure
  usb: musb: cppi_dma: Clean up cppi41_dma_controller structure
  usb: musb: cppi_dma: Clean up cppi structure
  usb: musb: cppi41: Detect aborted transfers in cppi41_dma_callback()
  usb: musb: dma: Add a DMA completion platform callback
  drivers: usb: usbip: Add missing break statement to switch
  usb: mtu3: remove redundant dev_err call in get_ssusb_rscs()
  USB: serial: mos7840: fix another NULL-deref at open
  USB: serial: console: clean up sanity checks
  USB: serial: console: fix uninitialised spinlock
  ...
This commit is contained in:
Linus Torvalds 2017-02-22 11:15:59 -08:00
commit 8ff546b801
193 changed files with 7780 additions and 4460 deletions

View file

@ -22,7 +22,7 @@
/* $(CROSS_COMPILE)cc -Wall -Wextra -g -o ffs-test ffs-test.c -lpthread */
#define _BSD_SOURCE /* for endian.h */
#define _DEFAULT_SOURCE /* for endian.h */
#include <endian.h>
#include <errno.h>
@ -110,16 +110,25 @@ static const struct {
struct usb_functionfs_descs_head_v2 header;
__le32 fs_count;
__le32 hs_count;
__le32 ss_count;
struct {
struct usb_interface_descriptor intf;
struct usb_endpoint_descriptor_no_audio sink;
struct usb_endpoint_descriptor_no_audio source;
} __attribute__((packed)) fs_descs, hs_descs;
struct {
struct usb_interface_descriptor intf;
struct usb_endpoint_descriptor_no_audio sink;
struct usb_ss_ep_comp_descriptor sink_comp;
struct usb_endpoint_descriptor_no_audio source;
struct usb_ss_ep_comp_descriptor source_comp;
} ss_descs;
} __attribute__((packed)) descriptors = {
.header = {
.magic = cpu_to_le32(FUNCTIONFS_DESCRIPTORS_MAGIC_V2),
.flags = cpu_to_le32(FUNCTIONFS_HAS_FS_DESC |
FUNCTIONFS_HAS_HS_DESC),
FUNCTIONFS_HAS_HS_DESC |
FUNCTIONFS_HAS_SS_DESC),
.length = cpu_to_le32(sizeof descriptors),
},
.fs_count = cpu_to_le32(3),
@ -171,6 +180,45 @@ static const struct {
.bInterval = 1, /* NAK every 1 uframe */
},
},
.ss_count = cpu_to_le32(5),
.ss_descs = {
.intf = {
.bLength = sizeof descriptors.fs_descs.intf,
.bDescriptorType = USB_DT_INTERFACE,
.bNumEndpoints = 2,
.bInterfaceClass = USB_CLASS_VENDOR_SPEC,
.iInterface = 1,
},
.sink = {
.bLength = sizeof descriptors.hs_descs.sink,
.bDescriptorType = USB_DT_ENDPOINT,
.bEndpointAddress = 1 | USB_DIR_IN,
.bmAttributes = USB_ENDPOINT_XFER_BULK,
.wMaxPacketSize = cpu_to_le16(1024),
},
.sink_comp = {
.bLength = USB_DT_SS_EP_COMP_SIZE,
.bDescriptorType = USB_DT_SS_ENDPOINT_COMP,
.bMaxBurst = 0,
.bmAttributes = 0,
.wBytesPerInterval = 0,
},
.source = {
.bLength = sizeof descriptors.hs_descs.source,
.bDescriptorType = USB_DT_ENDPOINT,
.bEndpointAddress = 2 | USB_DIR_OUT,
.bmAttributes = USB_ENDPOINT_XFER_BULK,
.wMaxPacketSize = cpu_to_le16(1024),
.bInterval = 1, /* NAK every 1 uframe */
},
.source_comp = {
.bLength = USB_DT_SS_EP_COMP_SIZE,
.bDescriptorType = USB_DT_SS_ENDPOINT_COMP,
.bMaxBurst = 0,
.bmAttributes = 0,
.wBytesPerInterval = 0,
},
},
};
static size_t descs_to_legacy(void **legacy, const void *descriptors_v2)

View file

@ -4,10 +4,33 @@
# Copyright (C) 2011 matt mooney <[email protected]>
# 2005-2008 Takahiro Hirofuchi
[Overview]
USB/IP protocol allows to pass USB device from server to client over the
network. Server is a machine which provides (shares) a USB device. Client is
a machine which uses USB device provided by server over the network.
The USB device may be either physical device connected to a server or
software entity created on a server using USB gadget subsystem.
Whole project consists of four parts:
- usbip-vhci
A client side kernel module which provides a virtual USB Host Controller
and allows to import a USB device from a remote machine.
- usbip-host (stub driver)
A server side module which provides a USB device driver which can be
bound to a physical USB device to make it exportable.
- usbip-vudc
A server side module which provides a virtual USB Device Controller and allows
to export a USB device created using USB Gadget Subsystem.
- usbip-utils
A set of userspace tools used to handle connection and management.
Used on both sides.
[Requirements]
- USB/IP device drivers
Found in the staging directory of the Linux kernel.
Found in the drivers/usb/usbip/ directory of the Linux kernel tree.
- libudev >= 2.0
libudev library
@ -36,6 +59,10 @@
[Usage]
On a server side there are two entities which can be shared.
First of them is physical usb device connected to the machine.
To make it available below steps should be executed:
server:# (Physically attach your USB device.)
server:# insmod usbip-core.ko
@ -52,6 +79,30 @@
- The USB device 1-2 is now exportable to other hosts!
- Use `usbip unbind --busid 1-2' to stop exporting the device.
Second of shareable entities is USB Gadget created using USB Gadget Subsystem
on a server machine. To make it available below steps should be executed:
server:# (Create your USB gadget)
- Currently the most preferable way of creating a new USB gadget
is ConfigFS Composite Gadget. Please refer to its documentation
for details.
- See vudc_server_example.sh for a short example of USB gadget creation
server:# insmod usbip-core.ko
server:# insmod usbip-vudc.ko
- To create more than one instance of vudc use num module param
server:# (Bind gadget to one of available vudc)
- Assign your new gadget to USB/IP UDC
- Using ConfigFS interface you may do this simply by:
server:# cd /sys/kernel/config/usb_gadget/<gadget_name>
server:# echo "usbip-vudc.0" > UDC
server:# usbipd -D --device
- Start usbip daemon.
To attach new device to client machine below commands should be used:
client:# insmod usbip-core.ko
client:# insmod vhci-hcd.ko
@ -60,6 +111,8 @@
client:# usbip attach --remote <host> --busid 1-2
- Connect the remote USB device.
- When using vudc on a server side busid is really vudc instance name.
For example: usbip-vudc.0
client:# usbip port
- Show virtual port status.
@ -192,6 +245,8 @@ Detach the imported device:
- http://usbip.wiki.sourceforge.net/how-to-debug-usbip
- usbip-host.ko must be bound to the target device.
- See /proc/bus/usb/devices and find "Driver=..." lines of the device.
- Target USB gadget must be bound to vudc
(using USB gadget susbsys, not usbip bind command)
- Shutdown firewall.
- usbip now uses TCP port 3240.
- Disable SELinux.

View file

@ -0,0 +1,107 @@
#!/bin/bash
################################################################################
# This is free and unencumbered software released into the public domain.
#
# Anyone is free to copy, modify, publish, use, compile, sell, or
# distribute this software, either in source code form or as a compiled
# binary, for any purpose, commercial or non-commercial, and by any
# means.
#
# In jurisdictions that recognize copyright laws, the author or authors
# of this software dedicate any and all copyright interest in the
# software to the public domain. We make this dedication for the benefit
# of the public at large and to the detriment of our heirs and
# successors. We intend this dedication to be an overt act of
# relinquishment in perpetuity of all present and future rights to this
# software under copyright law.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
#
# For more information, please refer to <http://unlicense.org/>
################################################################################
################################################################################
# This is a sample script which shows how to use vUDC with ConfigFS gadgets
################################################################################
# Stop script on error
set -e
################################################################################
# Create your USB gadget
# You may use bare ConfigFS interface (as below)
# or libusbgx or gt toool
# Instead of ConfigFS gadgets you may use any of legacy gadgets.
################################################################################
CONFIGFS_MOUNT_POINT="/sys/kernel/config"
GADGET_NAME="g1"
ID_VENDOR="0x1d6b"
ID_PRODUCT="0x0104"
cd ${CONFIGFS_MOUNT_POINT}/usb_gadget
# Create a new USB gadget
mkdir ${GADGET_NAME}
cd ${GADGET_NAME}
# This gadget contains one function - ACM (serial port over USB)
FUNC_DIR="functions/acm.ser0"
mkdir ${FUNC_DIR}
# Just one configuration
mkdir configs/c.1
ln -s ${FUNC_DIR} configs/c.1
# Set our gadget identity
echo ${ID_VENDOR} > idVendor
echo ${ID_PRODUCT} > idProduct
################################################################################
# Load vudc-module if vudc is not available
# You may change value of num param to get more than one vUDC instance
################################################################################
[[ -d /sys/class/udc/usbip-vudc.0 ]] || modprobe usbip-vudc num=1
################################################################################
# Bind gadget to our vUDC
# By default we bind to first one but you may change this if you would like
# to use more than one instance
################################################################################
echo "usbip-vudc.0" > UDC
################################################################################
# Let's now run our usbip daemon in a USB device mode
################################################################################
usbipd --device &
################################################################################
# Now your USB gadget is available using USB/IP protocol.
# To prepare your client, you should ensure that usbip-vhci module is inside
# your kernel. If it's not then you can load it:
#
# $ modprobe usbip-vhci
#
# To check availability of your gadget you may try to list devices exported
# on a remote server:
#
# $ modprobe usbip-vhci
# $ usbip list -r $SERVER_IP
# Exportable USB devices
# ======================
# usbipd: info: request 0x8005(6): complete
# - 127.0.0.1
# usbip-vudc.0: Linux Foundation : unknown product (1d6b:0104)
# : /sys/devices/platform/usbip-vudc.0
# : (Defined at Interface level) (00/00/00)
#
# To attach this device to your client you may use:
#
# $ usbip attach -r $SERVER_IP -d usbip-vudc.0
#
################################################################################