Skip to contentSkip to conversation

xhci: re-initialize the HC during resume if HCE was set

PATCH Superseded Puma Hsu 2 participants 2 messages Jan 17, 2022

Subsystems (3)

v4 of 6 Superseded Latest is v6 →

lore
Share & tools
lore

Puma Hsu

author
#0 lore raw

PATCH v4 1/1 xhci: re-initialize the HC during resume if HCE was set

When HCE(Host Controller Error) is set, it means an internal error condition has been detected. Software needs to re-initialize the HC, so add this check in xhci resume.

---
v2: Follow Sergey Shtylyov <[email protected]>'s comment.
v3: Add [email protected] for stable release.
v4: Refine the commit message.

 drivers/usb/host/xhci.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/usb/host/xhci.c +2 -2
index dc357cabb265..ab440ce8420f 100644
@@ -1146,8 +1146,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
 		temp = readl(&xhci->op_regs->status);
 	}
 
-	/* If restore operation fails, re-initialize the HC during resume */
-	if ((temp & STS_SRE) || hibernated) {
+	/* If restore operation fails or HC error is detected, re-initialize the HC during resume */
+	if ((temp & (STS_SRE | STS_HCE)) || hibernated) {
 
 		if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) &&
 				!(xhci_all_ports_seen_u0(xhci))) {
Signature · 1 line
2.34.1.703.g22d0c6ccf7-goog
#1 lore raw
Quoted 19 lines · Puma Hsu

When HCE(Host Controller Error) is set, it means an internal error condition has been detected. Software needs to re-initialize the HC, so add this check in xhci resume.

---
v2: Follow Sergey Shtylyov <[email protected]>'s comment.
v3: Add [email protected] for stable release.
v4: Refine the commit message.

 drivers/usb/host/xhci.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/usb/host/xhci.c +0 -0
index dc357cabb265..ab440ce8420f 100644

drivers/usb/host/xhci.c int xhci_resume(struct xhci_hcd *xhci, bool hibernated) · line 1150

Quoted 7 lines
drivers/usb/host/xhci.c +2 -2
@@ -1146,8 +1146,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
 		temp = readl(&xhci->op_regs->status);
 	}
 
-	/* If restore operation fails, re-initialize the HC during resume */
-	if ((temp & STS_SRE) || hibernated) {
+	/* If restore operation fails or HC error is detected, re-initialize the HC during resume */
+	if ((temp & (STS_SRE | STS_HCE)) || hibernated) {

Add a debug message in case we reset due to HCE

-Mathias