From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AF06AC44511 for ; Thu, 16 Jul 2026 16:16:52 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id E6DD184E40; Thu, 16 Jul 2026 18:09:39 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="rHNdOnUH"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C807284CC4; Thu, 16 Jul 2026 15:44:19 +0200 (CEST) Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id C230C84C3F for ; Thu, 16 Jul 2026 15:44:17 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=anders.roxell@linaro.org Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-c160d8760e0so75994466b.0 for ; Thu, 16 Jul 2026 06:44:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1784209457; x=1784814257; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=OlqxXzsuKiMYuyRzMCc9CYe8R3cavUr9w8KhmTYvYsc=; b=rHNdOnUHndfrOI++PpKNRhZeiAwducoYYUUcBQUDU+kkKEx/bwUrFvUJwBhmB1uKZ5 6U5q5Ifw+jCrLPh1pXqdgdUcJPHknuqRWSAUjFtJAc+37ilVaL+r2FyB9DJkv8qx/kBZ sPsx+ClqIM/IsaOIWFkSXNu5lPaxoLEe/bEPa6tDsMG1I7dJ2P3jV3goBqevi0d6i3KF mr5ldTckIRfko9InsbkjzKUT1D8ayfiGTFZKCwbVWRgMZpzIVYMqdoD05O4tOPj89o1g GajCMVCh5SXrnK0g7g0j9H9G29dUKcYJaPsuWZ889U1S13zSpGPB0MnZbhoemScA4Ow/ G2DQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784209457; x=1784814257; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=OlqxXzsuKiMYuyRzMCc9CYe8R3cavUr9w8KhmTYvYsc=; b=bsvVM6P7rxY2FfJGnI6cNquHI5PkwJl785puBS8fLgYw6XDNJG60iZizC6on2rzOOg lNzE1dNmXPwFVGkmy0Y/uESSuzsBXN039zIVoaqpyn8mPCjduCOoBV1ZXUphUGesMm86 2HJdBrd8szAtNp6fJk32w+Xe0zpJkBxRbCrYeWOX9wT9mU0lcct7y9Wx0zso98GhsZsc lpfstkGBE06xEjqGXmk94LAs3I8uC1Cifoq+D9bR4FEjA2flRui05I8IGJchBwdRtJle yJAIx4L1PYXdd1LsfDauzKKnIjD+gPVXPvxXsPM2eK0mrzD25X0jaKXt8EecDyLoNReQ HwUA== X-Gm-Message-State: AOJu0YxgRgDnZzdC+W/y4xTzm2IH1PCl3IN/6ZPK+nKGyIXqY2wdFsW1 d5p/I5lCZXYh1sGz6j6eZbXczaYJ1t+o7IULlNk4l6R+MVLMjo1kh5P9uezVxl8DH2x7JLpy757 iw/lV X-Gm-Gg: AfdE7clcJiEzEye0vzv2BOpNcKvbxwTQoiU588eAAlVlh3KYMQgouH1kyfSZt8P7/Sp YB2FKE7ST0H8SUMDxEaddPkmAaP1OL3mhDekZeStw9H9bnnFBfDOBYcPwtrcbC3GyAq5w/njr2C +qJDCYUvM+3nDQ2pIBOuLRCOw/ekJQ8Me2aoIwenAOyx3DemJ91A0MX44qfoMzK1CnkoKie5YcH 8PK/4z1GhWSWNX5xCepyP5BKps6ulQ74vZmPXEg/v109bWlRNJqk9sKVDPR8PkwVcnC0Ph7alN5 FjhBZN50BRVmbB5HGsbPCGcGYA9vl54vNeRlQVqhigTWL+iRZs5RWP1RT7us6a99VaSyNwLjkP+ y1ycNfLXKEqoB2rnig/gW0KykP5dFj6f3XfMxFeW0IrSx9YU+3OSrz/e9mjBXqNN2dx8++vA9Ln 4ErIxDaZayz1jasX+cBSMiiot6BzsElz73nE2mHQ== X-Received: by 2002:a17:907:3e1e:b0:c12:81be:b077 with SMTP id a640c23a62f3a-c161f359f34mr634665966b.8.1784209457036; Thu, 16 Jul 2026 06:44:17 -0700 (PDT) Received: from localhost (c-85-229-7-191.bbcust.telenor.se. [85.229.7.191]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c16874515basm211513866b.53.2026.07.16.06.44.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jul 2026 06:44:16 -0700 (PDT) From: Anders Roxell To: u-boot@lists.denx.de, marex@denx.de Cc: mkorpershoek@kernel.org, ilias.apalodimas@linaro.org, trini@konsulko.com, michal.simek@amd.com, alchark@flipper.net, jerome.forissier@arm.com, Jens Wiklander , Anders Roxell , Lukasz Majewski Subject: [PATCH v5 46/75] usb: dwc3: import from kernel v6.2 Date: Thu, 16 Jul 2026 15:42:16 +0200 Message-ID: <20260716134305.614278-47-anders.roxell@linaro.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260716134305.614278-1-anders.roxell@linaro.org> References: <20260716134305.614278-1-anders.roxell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Mailman-Approved-At: Thu, 16 Jul 2026 18:09:05 +0200 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean From: Jens Wiklander Sync Linux kernel dwc3 changes from v6.1 to v6.2. The following files are preserved accross the import: Makefile Kconfig dwc3-meson-g12a.c dwc3-meson-gxl.c dwc3-omap.c dwc3-uniphier.c dwc3-generic.h dwc3-generic.c dwc3-generic-sti.c dwc3-layerscape.c ti_usb_phy.c Skipping unused files: debugfs.c drd.c dwc3-exynos.c dwc3-haps.c dwc3-imx8mp.c dwc3-keystone.c dwc3-octeon.c dwc3-of-simple.c dwc3-pci.c dwc3-qcom.c dwc3-qcom-legacy.c dwc3-rtk.c dwc3-st.c dwc3-xilinx.c host.c trace.c trace.h ulpi.c Note that this is a raw import and doesn't build. A fixup commit at the end of the series fixes that. List of commits: git log --oneline v6.1..v6.2 Commits imported: eb320f76e31d usb: dwc3: qcom: enable vbus override when in OTG dr-mode 7d80dbd708c1 usb: dwc3: fix extcon dependency c4e3ef568539 usb: dwc3: gadget: Ignore End Transfer delay on teardown e498a0444324 usb: dwc3: xilinx: include linux/gpio/consumer.h 63130462c919 usb: dwc3: core: defer probe on ulpi_read_id timeout 97a48da1619b usb: dwc3: qcom: Fix memory leak in dwc3_qcom_interconnect_init 62c73bfea048 usb: dwc3: Fix race between dwc3_set_mode and __dwc3_set_mode f05f80f217bf usb: dwc3: pci: Update PCIe device ID for USB3 controller on CPU sub-system for Raptor Lake 3205054dc6fe usb: dwc3: improve the config dependency of USB_DWC3_XILINX 049142335613 usb: dwc3: gadget: Reduce TRB IOC settings Signed-off-by: Jens Wiklander Signed-off-by: Anders Roxell --- drivers/usb/dwc3/core.c | 23 ++++++++++++++++------- drivers/usb/dwc3/gadget.c | 19 ++++++++++++++++--- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 1f348bc867c2..476b63618511 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -122,21 +122,25 @@ static void __dwc3_set_mode(struct work_struct *work) unsigned long flags; int ret; u32 reg; + u32 desired_dr_role; mutex_lock(&dwc->mutex); + spin_lock_irqsave(&dwc->lock, flags); + desired_dr_role = dwc->desired_dr_role; + spin_unlock_irqrestore(&dwc->lock, flags); pm_runtime_get_sync(dwc->dev); if (dwc->current_dr_role == DWC3_GCTL_PRTCAP_OTG) dwc3_otg_update(dwc, 0); - if (!dwc->desired_dr_role) + if (!desired_dr_role) goto out; - if (dwc->desired_dr_role == dwc->current_dr_role) + if (desired_dr_role == dwc->current_dr_role) goto out; - if (dwc->desired_dr_role == DWC3_GCTL_PRTCAP_OTG && dwc->edev) + if (desired_dr_role == DWC3_GCTL_PRTCAP_OTG && dwc->edev) goto out; switch (dwc->current_dr_role) { @@ -164,7 +168,7 @@ static void __dwc3_set_mode(struct work_struct *work) */ if (dwc->current_dr_role && ((DWC3_IP_IS(DWC3) || DWC3_VER_IS_PRIOR(DWC31, 190A)) && - dwc->desired_dr_role != DWC3_GCTL_PRTCAP_OTG)) { + desired_dr_role != DWC3_GCTL_PRTCAP_OTG)) { reg = dwc3_readl(dwc->regs, DWC3_GCTL); reg |= DWC3_GCTL_CORESOFTRESET; dwc3_writel(dwc->regs, DWC3_GCTL, reg); @@ -184,11 +188,11 @@ static void __dwc3_set_mode(struct work_struct *work) spin_lock_irqsave(&dwc->lock, flags); - dwc3_set_prtcap(dwc, dwc->desired_dr_role); + dwc3_set_prtcap(dwc, desired_dr_role); spin_unlock_irqrestore(&dwc->lock, flags); - switch (dwc->desired_dr_role) { + switch (desired_dr_role) { case DWC3_GCTL_PRTCAP_HOST: ret = dwc3_host_init(dwc); if (ret) { @@ -1096,8 +1100,13 @@ static int dwc3_core_init(struct dwc3 *dwc) if (!dwc->ulpi_ready) { ret = dwc3_core_ulpi_init(dwc); - if (ret) + if (ret) { + if (ret == -ETIMEDOUT) { + dwc3_core_soft_reset(dwc); + ret = -EPROBE_DEFER; + } goto err0; + } dwc->ulpi_ready = true; } diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 6d524fa76443..89dcfac01235 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1464,8 +1464,18 @@ static int dwc3_prepare_trbs_sg(struct dwc3_ep *dep, */ if (num_trbs_left == 1 || (needs_extra_trb && num_trbs_left <= 2 && - sg_dma_len(sg_next(s)) >= length)) - must_interrupt = true; + sg_dma_len(sg_next(s)) >= length)) { + struct dwc3_request *r; + + /* Check if previous requests already set IOC */ + list_for_each_entry(r, &dep->started_list, list) { + if (r != req && !r->request.no_interrupt) + break; + + if (r == req) + must_interrupt = true; + } + } dwc3_prepare_one_trb(dep, req, trb_length, 1, i, false, must_interrupt); @@ -1717,6 +1727,7 @@ static int __dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force, bool int else if (!ret) dep->flags |= DWC3_EP_END_TRANSFER_PENDING; + dep->flags &= ~DWC3_EP_DELAY_STOP; return ret; } @@ -3722,8 +3733,10 @@ void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force, if (dep->number <= 1 && dwc->ep0state != EP0_DATA_PHASE) return; + if (interrupt && (dep->flags & DWC3_EP_DELAY_STOP)) + return; + if (!(dep->flags & DWC3_EP_TRANSFER_STARTED) || - (dep->flags & DWC3_EP_DELAY_STOP) || (dep->flags & DWC3_EP_END_TRANSFER_PENDING)) return; -- 2.53.0