Re: [PATCH v3] xhci: re-initialize the HC during resume if HCE was set

From: Greg KH
Date: Tue Jan 11 2022 - 06:43:19 EST


On Wed, Dec 29, 2021 at 07:25:51PM +0800, Puma Hsu wrote:
> When HCE(Host Controller Error) is set, it means an internal
> error condition has been detected. It needs to re-initialize
> the HC too.

What is "It" in the last sentence?

>
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Puma Hsu <pumahsu@xxxxxxxxxx>

What commit id does this fix?

> ---
> v2: Follow Sergey Shtylyov <s.shtylyov@xxxxxx>'s comment.
> v3: Add stable@xxxxxxxxxxxxxxx for stable release.
>
> drivers/usb/host/xhci.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
> index dc357cabb265..ab440ce8420f 100644
> --- a/drivers/usb/host/xhci.c
> +++ b/drivers/usb/host/xhci.c
> @@ -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) {

But if STS_HCE is set on suspend, that means the suspend was broken so
you wouldn't get here, right?

Or can the error happen between suspend and resume?

This seems like a big hammer for when the host controller throws an
error. Why is this the only place that it should be checked for? What
caused the error that can now allow it to be fixed?

thanks,

greg k-h