usb: dwc3: gadget: fix writing NYET threshold
commit01ea6bf5cbupstream. 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:80caf7d21a("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>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
05da04bbf3
commit
c995c81b2a
@@ -451,6 +451,7 @@
|
||||
#define DWC3_DCTL_TRGTULST_SS_INACT (DWC3_DCTL_TRGTULST(6))
|
||||
|
||||
/* These apply for core versions 1.94a and later */
|
||||
#define DWC3_DCTL_NYET_THRES_MASK (0xf << 20)
|
||||
#define DWC3_DCTL_NYET_THRES(n) (((n) & 0xf) << 20)
|
||||
|
||||
#define DWC3_DCTL_KEEP_CONNECT BIT(19)
|
||||
|
||||
@@ -4208,8 +4208,10 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
|
||||
WARN_ONCE(DWC3_VER_IS_PRIOR(DWC3, 240A) && dwc->has_lpm_erratum,
|
||||
"LPM Erratum not available on dwc3 revisions < 2.40a\n");
|
||||
|
||||
if (dwc->has_lpm_erratum && !DWC3_VER_IS_PRIOR(DWC3, 240A))
|
||||
if (dwc->has_lpm_erratum && !DWC3_VER_IS_PRIOR(DWC3, 240A)) {
|
||||
reg &= ~DWC3_DCTL_NYET_THRES_MASK;
|
||||
reg |= DWC3_DCTL_NYET_THRES(dwc->lpm_nyet_threshold);
|
||||
}
|
||||
|
||||
dwc3_gadget_dctl_write_safe(dwc, reg);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user