From nobody Tue Dec 16 05:59:19 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 79DFD4204E for ; Tue, 14 Jan 2025 14:16:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736864198; cv=none; b=JtK3Bo9dmCjMbSJmDEeC+bXuuCSlktPJS/y38pvt2pocAj+eBur0wF8Wfi/ZI33Grz332OuoD3OlokZcRIsSVRljEdLjLBJJbfqmCT1QC6yb4/fElvpVX+QT0uOoEUocTA+xUUGJZVxGr2XXIxgPFxt6rBWPU9tyYBORbN975Wg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736864198; c=relaxed/simple; bh=2E3qbaOE73Jk7sbI6FLKhD7qbg28oP2KAGipqvlhwsI=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=qfVGGcX5hbWCSMqgvlnvzLwbH03MJD6bQ7gIa/SSZ4H68HhHRFKuOfHn8kZRSGlP5CnDJzAxiWq6N/Uaz4rWVukM00gfp9uvH6azlZpSP6u2y8oTw4m1RDlZjRS8+n3aMVEOQOH+qONzdpL+sLKKDZrD9/L3z3QGmO7HCOiWeS8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kyletso.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=gxnZXrpw; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kyletso.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="gxnZXrpw" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2163dc0f689so144319015ad.1 for ; Tue, 14 Jan 2025 06:16:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1736864197; x=1737468997; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=avmnJeP52XhrbIUiTpoZxNrqy28miD97Nfy+XqLUs0Q=; b=gxnZXrpwuGXQJvM72L+oQzDrMxwlEeLnXZ4OHz9GjkvYZ/cBtXNg5QPdlyz6g/7FxQ Zo5uwSxzRxygJS2/NylNUMNJ0RrOH90BGIXrkEFPS000kHmHh2i8iD/GvZEqJFC8cune sBB8geFdcp0p9fOsu8I2b/DYaB08/gf0bVGiD+T/IdmTV2m+pbnEesQIHehwst7C2oVF TUY5X1Rg1NPI3f7Ol8RK/XB0tIbHVRV26m8C/t18SLj0COFhcJpyV0d451DBZaAcbcW7 WknH54Z2Lsu8zpuPvRnB6Ysf6Im1mamvUGX+hWEGa31wHUdLpeYp3QEuAp3A+sucawt0 0x6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736864197; x=1737468997; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=avmnJeP52XhrbIUiTpoZxNrqy28miD97Nfy+XqLUs0Q=; b=whOJRkglRJzI8WBV0EXfUr4QaLdehmNdb5mYdRuvqPmhFBtJO7zjAAb6mddekpSvs0 pYBbwdL0bldNSKVio7QOL1wj7jIihMONJkO49G7v6ly1QcNV/KxMTv/xjosjNkyCvEoR EgyY8FrqT1IJ0LhrESrEu5+kS1m2iS10jmUkyVOT1k4bKUarlPnaejxAT9GoDvPtvMuz AAtmOW/Xe04S1sh0FA/axhaFm0pXLWsLV5eiRCfl7Hi/UNkZts/VU64R2r4Md9oWwIto muXQcYxMAFQE0yvFDTI7ebpARkQcwgU7tMsmaDz7UjyvoDqlG/f2BKFIKkpC+zJGtTML y3ZA== X-Forwarded-Encrypted: i=1; AJvYcCUjych0eywDgVD5nl5EZSt+KiAkubKtuKMQqpL3BJscx2OD56IDREHUYlns7oZgXy6ZkCKK0mG7kKW7peY=@vger.kernel.org X-Gm-Message-State: AOJu0YxuUJsYEtNU7z2x70EZcqxwDnt+meiUpGrMqETbgpuNGWNA0sOv kWGM6TpralrUTkWn8FJ8nMGajZEYLDGrt1Y3Y889cjYtyFg1EtVRG5EVu1/DaZXE8OMRbxc6hMJ 8nTtCIg== X-Google-Smtp-Source: AGHT+IHuhPge/LAKQx8gD9Y76v9vi2x2c/fi/iGzC8d1cvWEsELlR4g/XA0QMzvawNsKc5h+NkXx0WCqBUMc X-Received: from plrf18.prod.google.com ([2002:a17:902:ab92:b0:216:61ba:610]) (user=kyletso job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:230b:b0:20c:6399:d637 with SMTP id d9443c01a7336-21a83ffbea3mr435808695ad.40.1736864196856; Tue, 14 Jan 2025 06:16:36 -0800 (PST) Date: Tue, 14 Jan 2025 22:16:07 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.47.1.688.g23fc6f90ad-goog Message-ID: <20250114141607.2091154-1-kyletso@google.com> Subject: [PATCH v1] usb: dwc3: core: Defer the probe until USB power supply ready From: Kyle Tso To: Thinh.Nguyen@synopsys.com, gregkh@linuxfoundation.org, raychi@google.com Cc: badhri@google.com, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, royluo@google.com, bvanassche@acm.org, Kyle Tso , stable@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, DWC3 driver attempts to acquire the USB power supply only once during the probe. If the USB power supply is not ready at that time, the driver simply ignores the failure and continues the probe, leading to permanent non-functioning of the gadget vbus_draw callback. Address this problem by delaying the dwc3 driver initialization until the USB power supply is registered. Fixes: 6f0764b5adea ("usb: dwc3: add a power supply for current control") Cc: stable@vger.kernel.org Signed-off-by: Kyle Tso --- Note: This is a follow-up of https://lore.kernel.org/all/20240804084612.256= 1230-1-kyletso@google.com/ --- drivers/usb/dwc3/core.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 7578c5133568..1550c39e792a 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -1669,7 +1669,7 @@ static void dwc3_get_software_properties(struct dwc3 = *dwc) } } =20 -static void dwc3_get_properties(struct dwc3 *dwc) +static int dwc3_get_properties(struct dwc3 *dwc) { struct device *dev =3D dwc->dev; u8 lpm_nyet_threshold; @@ -1724,7 +1724,7 @@ static void dwc3_get_properties(struct dwc3 *dwc) if (ret >=3D 0) { dwc->usb_psy =3D power_supply_get_by_name(usb_psy_name); if (!dwc->usb_psy) - dev_err(dev, "couldn't get usb power supply\n"); + return dev_err_probe(dev, -EPROBE_DEFER, "couldn't get usb power supply= \n"); } =20 dwc->has_lpm_erratum =3D device_property_read_bool(dev, @@ -1847,6 +1847,8 @@ static void dwc3_get_properties(struct dwc3 *dwc) dwc->imod_interval =3D 0; =20 dwc->tx_fifo_resize_max_num =3D tx_fifo_resize_max_num; + + return 0; } =20 /* check whether the core supports IMOD */ @@ -2181,7 +2183,9 @@ static int dwc3_probe(struct platform_device *pdev) dwc->regs =3D regs; dwc->regs_size =3D resource_size(&dwc_res); =20 - dwc3_get_properties(dwc); + ret =3D dwc3_get_properties(dwc); + if (ret) + return ret; =20 dwc3_get_software_properties(dwc); =20 --=20 2.47.1.688.g23fc6f90ad-goog