Oliver Neukum 454e4d
From f4fd84ae0765a80494b28c43b756a95100351a94 Mon Sep 17 00:00:00 2001
Oliver Neukum 454e4d
From: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Oliver Neukum 454e4d
Date: Thu, 21 Apr 2022 19:33:56 -0700
Oliver Neukum 454e4d
Subject: [PATCH] usb: dwc3: core: Only handle soft-reset in DCTL
Oliver Neukum 454e4d
Git-commit: f4fd84ae0765a80494b28c43b756a95100351a94
Oliver Neukum 454e4d
References: git-fixes
Oliver Neukum 454e4d
Patch-mainline: v5.18-rc5
Oliver Neukum 454e4d
Oliver Neukum 454e4d
Make sure not to set run_stop bit or link state change request while
Oliver Neukum 454e4d
initiating soft-reset. Register read-modify-write operation may
Oliver Neukum 454e4d
unintentionally start the controller before the initialization completes
Oliver Neukum 454e4d
with its previous DCTL value, which can cause initialization failure.
Oliver Neukum 454e4d
Oliver Neukum 454e4d
Fixes: f59dcab17629 ("usb: dwc3: core: improve reset sequence")
Oliver Neukum 454e4d
Cc: <stable@vger.kernel.org>
Oliver Neukum 454e4d
Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Oliver Neukum 454e4d
Link: https://lore.kernel.org/r/6aecbd78328f102003d40ccf18ceeebd411d3703.1650594792.git.Thinh.Nguyen@synopsys.com
Oliver Neukum 454e4d
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Oliver Neukum 454e4d
Signed-off-by: Oliver Neukum <oneukum@suse.com>
Oliver Neukum 454e4d
---
Oliver Neukum 454e4d
 drivers/usb/dwc3/core.c | 3 ++-
Oliver Neukum 454e4d
 1 file changed, 2 insertions(+), 1 deletion(-)
Oliver Neukum 454e4d
Oliver Neukum 454e4d
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
Oliver Neukum 454e4d
index 1ca9dae57855..d28cd1a6709b 100644
Oliver Neukum 454e4d
--- a/drivers/usb/dwc3/core.c
Oliver Neukum 454e4d
+++ b/drivers/usb/dwc3/core.c
Oliver Neukum 454e4d
@@ -274,7 +274,8 @@ int dwc3_core_soft_reset(struct dwc3 *dwc)
Oliver Neukum 454e4d
 
Oliver Neukum 454e4d
 	reg = dwc3_readl(dwc->regs, DWC3_DCTL);
Oliver Neukum 454e4d
 	reg |= DWC3_DCTL_CSFTRST;
Oliver Neukum 454e4d
-	dwc3_writel(dwc->regs, DWC3_DCTL, reg);
Oliver Neukum 454e4d
+	reg &= ~DWC3_DCTL_RUN_STOP;
Oliver Neukum 454e4d
+	dwc3_gadget_dctl_write_safe(dwc, reg);
Oliver Neukum 454e4d
 
Oliver Neukum 454e4d
 	/*
Oliver Neukum 454e4d
 	 * For DWC_usb31 controller 1.90a and later, the DCTL.CSFRST bit
Oliver Neukum 454e4d
-- 
Oliver Neukum 454e4d
2.35.3
Oliver Neukum 454e4d