Skip to content

Commit a1a9314

Browse files
andredmehmetb0
authored andcommitted
usb: dwc3: gadget: fix writing NYET threshold
BugLink: https://bugs.launchpad.net/bugs/2097298 commit 01ea6bf upstream. Before writing a new value to the register, the old value needs to be masked out for the new value to be programmed as intended, because at least in some cases the reset value of that field is 0xf (max value). At the moment, the dwc3 core initialises the threshold to the maximum value (0xf), with the option to override it via a DT. No upstream DTs seem to override it, therefore this commit doesn't change behaviour for any upstream platform. Nevertheless, the code should be fixed to have the desired outcome. Do so. Fixes: 80caf7d ("usb: dwc3: add lpm erratum support") Cc: stable@vger.kernel.org # 5.10+ (needs adjustment for 5.4) Signed-off-by: André Draszik <andre.draszik@linaro.org> Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> Link: https://lore.kernel.org/r/20241209-dwc3-nyet-fix-v2-1-02755683345b@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Noah Wager <noah.wager@canonical.com> Signed-off-by: Koichiro Den <koichiro.den@canonical.com>
1 parent 39f4a9b commit a1a9314

File tree

2 files changed

+4
-1
lines changed

2 files changed

+4
-1
lines changed

drivers/usb/dwc3/core.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,7 @@
430430
#define DWC3_DCTL_TRGTULST_SS_INACT (DWC3_DCTL_TRGTULST(6))
431431

432432
/* These apply for core versions 1.94a and later */
433+
#define DWC3_DCTL_NYET_THRES_MASK (0xf << 20)
433434
#define DWC3_DCTL_NYET_THRES(n) (((n) & 0xf) << 20)
434435

435436
#define DWC3_DCTL_KEEP_CONNECT BIT(19)

drivers/usb/dwc3/gadget.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4004,8 +4004,10 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
40044004
WARN_ONCE(DWC3_VER_IS_PRIOR(DWC3, 240A) && dwc->has_lpm_erratum,
40054005
"LPM Erratum not available on dwc3 revisions < 2.40a\n");
40064006

4007-
if (dwc->has_lpm_erratum && !DWC3_VER_IS_PRIOR(DWC3, 240A))
4007+
if (dwc->has_lpm_erratum && !DWC3_VER_IS_PRIOR(DWC3, 240A)) {
4008+
reg &= ~DWC3_DCTL_NYET_THRES_MASK;
40084009
reg |= DWC3_DCTL_NYET_THRES(dwc->lpm_nyet_threshold);
4010+
}
40094011

40104012
dwc3_gadget_dctl_write_safe(dwc, reg);
40114013
} else {

0 commit comments

Comments
 (0)