Commit 670062e7 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull USB / Thunderbolt fixes from Greg KH:
 "Here are some small USB and Thunderbolt driver fixes and new device
  ids for 6.4-rc7 to resolve some reported problems. Included in here
  are:

   - new USB serial device ids

   - USB gadget core fixes for long-dissussed problems

   - dwc3 bugfixes for reported issues.

   - typec driver fixes

   - thunderbolt driver fixes

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

* tag 'usb-6.4-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
  usb: gadget: udc: core: Prevent soft_connect_store() race
  usb: gadget: udc: core: Offload usb_udc_vbus_handler processing
  usb: typec: Fix fast_role_swap_current show function
  usb: typec: ucsi: Fix command cancellation
  USB: dwc3: fix use-after-free on core driver unbind
  USB: dwc3: qcom: fix NULL-deref on suspend
  usb: dwc3: gadget: Reset num TRBs before giving back the request
  usb: gadget: udc: renesas_usb3: Fix RZ/V2M {modprobe,bind} error
  USB: serial: option: add Quectel EM061KGL series
  thunderbolt: Mask ring interrupt on Intel hardware as well
  thunderbolt: Do not touch CL state configuration during discovery
  thunderbolt: Increase DisplayPort Connection Manager handshake timeout
  thunderbolt: dma_test: Use correct value for absent rings when creating paths
parents 3c0eb442 286d9975
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -192,9 +192,9 @@ static int dma_test_start_rings(struct dma_test *dt)
	}

	ret = tb_xdomain_enable_paths(dt->xd, dt->tx_hopid,
				      dt->tx_ring ? dt->tx_ring->hop : 0,
				      dt->tx_ring ? dt->tx_ring->hop : -1,
				      dt->rx_hopid,
				      dt->rx_ring ? dt->rx_ring->hop : 0);
				      dt->rx_ring ? dt->rx_ring->hop : -1);
	if (ret) {
		dma_test_free_rings(dt);
		return ret;
@@ -218,9 +218,9 @@ static void dma_test_stop_rings(struct dma_test *dt)
		tb_ring_stop(dt->tx_ring);

	ret = tb_xdomain_disable_paths(dt->xd, dt->tx_hopid,
				       dt->tx_ring ? dt->tx_ring->hop : 0,
				       dt->tx_ring ? dt->tx_ring->hop : -1,
				       dt->rx_hopid,
				       dt->rx_ring ? dt->rx_ring->hop : 0);
				       dt->rx_ring ? dt->rx_ring->hop : -1);
	if (ret)
		dev_warn(&dt->svc->dev, "failed to disable DMA paths\n");

+8 −3
Original line number Diff line number Diff line
@@ -56,10 +56,15 @@ static int ring_interrupt_index(const struct tb_ring *ring)

static void nhi_mask_interrupt(struct tb_nhi *nhi, int mask, int ring)
{
	if (nhi->quirks & QUIRK_AUTO_CLEAR_INT)
		return;
	if (nhi->quirks & QUIRK_AUTO_CLEAR_INT) {
		u32 val;

		val = ioread32(nhi->iobase + REG_RING_INTERRUPT_BASE + ring);
		iowrite32(val & ~mask, nhi->iobase + REG_RING_INTERRUPT_BASE + ring);
	} else {
		iowrite32(mask, nhi->iobase + REG_RING_INTERRUPT_MASK_CLEAR_BASE + ring);
	}
}

static void nhi_clear_interrupt(struct tb_nhi *nhi, int ring)
{
+12 −5
Original line number Diff line number Diff line
@@ -737,6 +737,7 @@ static void tb_scan_port(struct tb_port *port)
{
	struct tb_cm *tcm = tb_priv(port->sw->tb);
	struct tb_port *upstream_port;
	bool discovery = false;
	struct tb_switch *sw;
	int ret;

@@ -804,8 +805,10 @@ static void tb_scan_port(struct tb_port *port)
	 * tunnels and know which switches were authorized already by
	 * the boot firmware.
	 */
	if (!tcm->hotplug_active)
	if (!tcm->hotplug_active) {
		dev_set_uevent_suppress(&sw->dev, true);
		discovery = true;
	}

	/*
	 * At the moment Thunderbolt 2 and beyond (devices with LC) we
@@ -835,10 +838,14 @@ static void tb_scan_port(struct tb_port *port)
	 * CL0s and CL1 are enabled and supported together.
	 * Silently ignore CLx enabling in case CLx is not supported.
	 */
	if (discovery) {
		tb_sw_dbg(sw, "discovery, not touching CL states\n");
	} else {
		ret = tb_switch_enable_clx(sw, TB_CL1);
		if (ret && ret != -EOPNOTSUPP)
			tb_sw_warn(sw, "failed to enable %s on upstream port\n",
				   tb_switch_clx_name(TB_CL1));
	}

	if (tb_switch_is_clx_enabled(sw, TB_CL1))
		/*
+1 −1
Original line number Diff line number Diff line
@@ -526,7 +526,7 @@ static int tb_dp_xchg_caps(struct tb_tunnel *tunnel)
	 * Perform connection manager handshake between IN and OUT ports
	 * before capabilities exchange can take place.
	 */
	ret = tb_dp_cm_handshake(in, out, 1500);
	ret = tb_dp_cm_handshake(in, out, 3000);
	if (ret)
		return ret;

+5 −0
Original line number Diff line number Diff line
@@ -1929,6 +1929,11 @@ static int dwc3_remove(struct platform_device *pdev)
	pm_runtime_disable(&pdev->dev);
	pm_runtime_dont_use_autosuspend(&pdev->dev);
	pm_runtime_put_noidle(&pdev->dev);
	/*
	 * HACK: Clear the driver data, which is currently accessed by parent
	 * glue drivers, before allowing the parent to suspend.
	 */
	platform_set_drvdata(pdev, NULL);
	pm_runtime_set_suspended(&pdev->dev);

	dwc3_free_event_buffers(dwc);
Loading