Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46552bf4 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull USB fixes from Greg KH:
 "Here is a number of different USB fixes for 4.11-rc2.

  Seems like there were a lot of unresolved issues that people have been
  finding for this subsystem, and a bunch of good security auditing
  happening as well from Johan Hovold. There's the usual batch of gadget
  driver fixes and xhci issues resolved as well.

 All of these have been in linux-next with no reported issues"

* tag 'usb-4.11-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (35 commits)
  usb: host: xhci-plat: Fix timeout on removal of hot pluggable xhci controllers
  usb: host: xhci-dbg: HCIVERSION should be a binary number
  usb: xhci: remove dummy extra_priv_size for size of xhci_hcd struct
  usb: xhci-mtk: check hcc_params after adding primary hcd
  USB: serial: digi_acceleport: fix OOB-event processing
  MAINTAINERS: usb251xb: remove reference inexistent file
  doc: dt-bindings: usb251xb: mark reg as required
  usb: usb251xb: dt: add unit suffix to oc-delay and power-on-time
  usb: usb251xb: remove max_{power,current}_{sp,bp} properties
  usb-storage: Add ignore-residue quirk for Initio INIC-3619
  USB: iowarrior: fix NULL-deref in write
  USB: iowarrior: fix NULL-deref at probe
  usb: phy: isp1301: Add OF device ID table
  usb: ohci-at91: Do not drop unhandled USB suspend control requests
  USB: serial: safe_serial: fix information leak in completion handler
  USB: serial: io_ti: fix information leak in completion handler
  USB: serial: omninet: drop open callback
  USB: serial: omninet: fix reference leaks at open
  USB: serial: io_ti: fix NULL-deref in interrupt callback
  usb: dwc3: gadget: make to increment req->remaining in all cases
  ...
parents cb853a82 dcc7620c
Loading
Loading
Loading
Loading
+18 −35
Original line number Diff line number Diff line
@@ -7,18 +7,18 @@ Required properties :
 - compatible : Should be "microchip,usb251xb" or one of the specific types:
	"microchip,usb2512b", "microchip,usb2512bi", "microchip,usb2513b",
	"microchip,usb2513bi", "microchip,usb2514b", "microchip,usb2514bi"
 - hub-reset-gpios : Should specify the gpio for hub reset
 - reset-gpios : Should specify the gpio for hub reset
 - reg : I2C address on the selected bus (default is <0x2C>)

Optional properties :
 - reg : I2C address on the selected bus (default is <0x2C>)
 - skip-config : Skip Hub configuration, but only send the USB-Attach command
 - vendor-id : USB Vendor ID of the hub (16 bit, default is 0x0424)
 - product-id : USB Product ID of the hub (16 bit, default depends on type)
 - device-id : USB Device ID of the hub (16 bit, default is 0x0bb3)
 - language-id : USB Language ID (16 bit, default is 0x0000)
 - manufacturer : USB Manufacturer string (max 31 characters long)
 - product : USB Product string (max 31 characters long)
 - serial : USB Serial string (max 31 characters long)
 - vendor-id : Set USB Vendor ID of the hub (16 bit, default is 0x0424)
 - product-id : Set USB Product ID of the hub (16 bit, default depends on type)
 - device-id : Set USB Device ID of the hub (16 bit, default is 0x0bb3)
 - language-id : Set USB Language ID (16 bit, default is 0x0000)
 - manufacturer : Set USB Manufacturer string (max 31 characters long)
 - product : Set USB Product string (max 31 characters long)
 - serial : Set USB Serial string (max 31 characters long)
 - {bus,self}-powered : selects between self- and bus-powered operation (default
	is self-powered)
 - disable-hi-speed : disable USB Hi-Speed support
@@ -31,8 +31,10 @@ Optional properties :
	(default is individual)
 - dynamic-power-switching : enable auto-switching from self- to bus-powered
	operation if the local power source is removed or unavailable
 - oc-delay-{100us,4ms,8ms,16ms} : set over current timer delay (default is 8ms)
 - compound-device : indicated the hub is part of a compound device
 - oc-delay-us : Delay time (in microseconds) for filtering the over-current
	sense inputs. Valid values are 100, 4000, 8000 (default) and 16000. If
	an invalid value is given, the default is used instead.
 - compound-device : indicate the hub is part of a compound device
 - port-mapping-mode : enable port mapping mode
 - string-support : enable string descriptor support (required for manufacturer,
	product and serial string configuration)
@@ -40,34 +42,15 @@ Optional properties :
	device connected.
 - sp-disabled-ports : Specifies the ports which will be self-power disabled
 - bp-disabled-ports : Specifies the ports which will be bus-power disabled
 - max-sp-power : Specifies the maximum current the hub consumes from an
	upstream port when operating as self-powered hub including the power
	consumption of a permanently attached peripheral if the hub is
	configured as a compound device. The value is given in mA in a 0 - 500
	range (default is 2).
 - max-bp-power : Specifies the maximum current the hub consumes from an
	upstream port when operating as bus-powered hub including the power
	consumption of a permanently attached peripheral if the hub is
	configured as a compound device. The value is given in mA in a 0 - 500
	range (default is 100).
 - max-sp-current : Specifies the maximum current the hub consumes from an
	upstream port when operating as self-powered hub EXCLUDING the power
	consumption of a permanently attached peripheral if the hub is
	configured as a compound device. The value is given in mA in a 0 - 500
	range (default is 2).
 - max-bp-current : Specifies the maximum current the hub consumes from an
	upstream port when operating as bus-powered hub EXCLUDING the power
	consumption of a permanently attached peripheral if the hub is
	configured as a compound device. The value is given in mA in a 0 - 500
	range (default is 100).
 - power-on-time : Specifies the time it takes from the time the host initiates
	the power-on sequence to a port until the port has adequate power. The
	value is given in ms in a 0 - 510 range (default is 100ms).
 - power-on-time-ms : Specifies the time it takes from the time the host
	initiates the power-on sequence to a port until the port has adequate
	power. The value is given in ms in a 0 - 510 range (default is 100ms).

Examples:
	usb2512b@2c {
		compatible = "microchip,usb2512b";
		hub-reset-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;
		reg = <0x2c>;
		reset-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;
	};

	usb2514b@2c {
+0 −1
Original line number Diff line number Diff line
@@ -8307,7 +8307,6 @@ M: Richard Leitner <richard.leitner@skidata.com>
L:	linux-usb@vger.kernel.org
S:	Maintained
F:	drivers/usb/misc/usb251xb.c
F:	include/linux/platform_data/usb251xb.h
F:	Documentation/devicetree/bindings/usb/usb251xb.txt

MICROSOFT SURFACE PRO 3 BUTTON DRIVER
+2 −1
Original line number Diff line number Diff line
@@ -250,6 +250,7 @@ static void dwc3_omap_set_mailbox(struct dwc3_omap *omap,
		val = dwc3_omap_read_utmi_ctrl(omap);
		val |= USBOTGSS_UTMI_OTG_CTRL_IDDIG;
		dwc3_omap_write_utmi_ctrl(omap, val);
		break;

	case OMAP_DWC3_VBUS_OFF:
		val = dwc3_omap_read_utmi_ctrl(omap);
@@ -392,7 +393,7 @@ static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap)
{
	u32			reg;
	struct device_node	*node = omap->dev->of_node;
	int			utmi_mode = 0;
	u32			utmi_mode = 0;

	reg = dwc3_omap_read_utmi_ctrl(omap);

+67 −9
Original line number Diff line number Diff line
@@ -1342,6 +1342,68 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
		if (r == req) {
			/* wait until it is processed */
			dwc3_stop_active_transfer(dwc, dep->number, true);

			/*
			 * If request was already started, this means we had to
			 * stop the transfer. With that we also need to ignore
			 * all TRBs used by the request, however TRBs can only
			 * be modified after completion of END_TRANSFER
			 * command. So what we do here is that we wait for
			 * END_TRANSFER completion and only after that, we jump
			 * over TRBs by clearing HWO and incrementing dequeue
			 * pointer.
			 *
			 * Note that we have 2 possible types of transfers here:
			 *
			 * i) Linear buffer request
			 * ii) SG-list based request
			 *
			 * SG-list based requests will have r->num_pending_sgs
			 * set to a valid number (> 0). Linear requests,
			 * normally use a single TRB.
			 *
			 * For each of these two cases, if r->unaligned flag is
			 * set, one extra TRB has been used to align transfer
			 * size to wMaxPacketSize.
			 *
			 * All of these cases need to be taken into
			 * consideration so we don't mess up our TRB ring
			 * pointers.
			 */
			wait_event_lock_irq(dep->wait_end_transfer,
					!(dep->flags & DWC3_EP_END_TRANSFER_PENDING),
					dwc->lock);

			if (!r->trb)
				goto out1;

			if (r->num_pending_sgs) {
				struct dwc3_trb *trb;
				int i = 0;

				for (i = 0; i < r->num_pending_sgs; i++) {
					trb = r->trb + i;
					trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
					dwc3_ep_inc_deq(dep);
				}

				if (r->unaligned) {
					trb = r->trb + r->num_pending_sgs + 1;
					trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
					dwc3_ep_inc_deq(dep);
				}
			} else {
				struct dwc3_trb *trb = r->trb;

				trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
				dwc3_ep_inc_deq(dep);

				if (r->unaligned) {
					trb = r->trb + 1;
					trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
					dwc3_ep_inc_deq(dep);
				}
			}
			goto out1;
		}
		dev_err(dwc->dev, "request %p was not queued to %s\n",
@@ -1352,6 +1414,7 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,

out1:
	/* giveback the request */
	dep->queued_requests--;
	dwc3_gadget_giveback(dep, req, -ECONNRESET);

out0:
@@ -2126,12 +2189,12 @@ static int __dwc3_cleanup_done_trbs(struct dwc3 *dwc, struct dwc3_ep *dep,
		return 1;
	}

	if ((trb->ctrl & DWC3_TRB_CTRL_HWO) && status != -ESHUTDOWN)
		return 1;

	count = trb->size & DWC3_TRB_SIZE_MASK;
	req->remaining += count;

	if ((trb->ctrl & DWC3_TRB_CTRL_HWO) && status != -ESHUTDOWN)
		return 1;

	if (dep->direction) {
		if (count) {
			trb_status = DWC3_TRB_SIZE_TRBSTS(trb->size);
@@ -3228,15 +3291,10 @@ void dwc3_gadget_exit(struct dwc3 *dwc)

int dwc3_gadget_suspend(struct dwc3 *dwc)
{
	int ret;

	if (!dwc->gadget_driver)
		return 0;

	ret = dwc3_gadget_run_stop(dwc, false, false);
	if (ret < 0)
		return ret;

	dwc3_gadget_run_stop(dwc, false, false);
	dwc3_disconnect_gadget(dwc);
	__dwc3_gadget_stop(dwc);

+7 −7
Original line number Diff line number Diff line
@@ -28,23 +28,23 @@ struct dwc3;
#define gadget_to_dwc(g)	(container_of(g, struct dwc3, gadget))

/* DEPCFG parameter 1 */
#define DWC3_DEPCFG_INT_NUM(n)		((n) << 0)
#define DWC3_DEPCFG_INT_NUM(n)		(((n) & 0x1f) << 0)
#define DWC3_DEPCFG_XFER_COMPLETE_EN	(1 << 8)
#define DWC3_DEPCFG_XFER_IN_PROGRESS_EN	(1 << 9)
#define DWC3_DEPCFG_XFER_NOT_READY_EN	(1 << 10)
#define DWC3_DEPCFG_FIFO_ERROR_EN	(1 << 11)
#define DWC3_DEPCFG_STREAM_EVENT_EN	(1 << 13)
#define DWC3_DEPCFG_BINTERVAL_M1(n)	((n) << 16)
#define DWC3_DEPCFG_BINTERVAL_M1(n)	(((n) & 0xff) << 16)
#define DWC3_DEPCFG_STREAM_CAPABLE	(1 << 24)
#define DWC3_DEPCFG_EP_NUMBER(n)	((n) << 25)
#define DWC3_DEPCFG_EP_NUMBER(n)	(((n) & 0x1f) << 25)
#define DWC3_DEPCFG_BULK_BASED		(1 << 30)
#define DWC3_DEPCFG_FIFO_BASED		(1 << 31)

/* DEPCFG parameter 0 */
#define DWC3_DEPCFG_EP_TYPE(n)		((n) << 1)
#define DWC3_DEPCFG_MAX_PACKET_SIZE(n)	((n) << 3)
#define DWC3_DEPCFG_FIFO_NUMBER(n)	((n) << 17)
#define DWC3_DEPCFG_BURST_SIZE(n)	((n) << 22)
#define DWC3_DEPCFG_EP_TYPE(n)		(((n) & 0x3) << 1)
#define DWC3_DEPCFG_MAX_PACKET_SIZE(n)	(((n) & 0x7ff) << 3)
#define DWC3_DEPCFG_FIFO_NUMBER(n)	(((n) & 0x1f) << 17)
#define DWC3_DEPCFG_BURST_SIZE(n)	(((n) & 0xf) << 22)
#define DWC3_DEPCFG_DATA_SEQ_NUM(n)	((n) << 26)
/* This applies for core versions earlier than 1.94a */
#define DWC3_DEPCFG_IGN_SEQ_NUM		(1 << 31)
Loading