Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3520719pxf; Mon, 15 Mar 2021 11:23:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy6IFL5dRi6rWXMfkbzjzhdT+EhPMixiLywlYA9cw25w0b8dmNFrR8B+w0EF0uTEU9TkhX6 X-Received: by 2002:a17:906:c08f:: with SMTP id f15mr25267184ejz.318.1615832603860; Mon, 15 Mar 2021 11:23:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1615832603; cv=none; d=google.com; s=arc-20160816; b=gIR0/8OTTOquPc+0aWzXZBpzMgs47zbmYtbw3F1FbQUNCVcIpDHv/KebI8g7cwSLqZ 4X+6EKtv4EOEhIAwWaK/eZGXZf1GZxGGD1dRhRP+mNcfxA+0jmmByfXnkgR0qNap4Xyx /goS1b3R389gbXxMgZBASFEcg6pT18gtfaifLBjTSv8/ur5qDsA2BB2m0FS3sm8NzeWs mSBwJxFTfMNqIcCDWa3VLWyX2/aoYAVWAR0MHa+IteGO1JosmwFQUQDdRV0OLxI+0lG1 TeLwRfMcX+USufMO8W9AnsVPlHJ8wjjMOwMRCNHW6aNwsdHgHxf9D2N4KwgL9n9GQdRQ G7Fg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=/PECawXkVLW84qejtC09HcfpvpjTCrncnuns7l0WYLE=; b=j7ZqrT/JijY2lOsykM1tC88G12HEpUK/1bFIJjI535ZF1E7ikiWM0vCgRaiJFJ0SuA c0W3DlRWmH2gfhkJVImWfOYldnLdLjvvY0IzpsQ62bNaD98pV1Jae3C2I8NNlgXxfsSK gJtLAkQqRmlKLh1mIXURvlVH6c2/gIeVhCzD7lpyhA1NOyIgiXMHj7s71igRJ2qTdv0e VMRDc15sN1euqQ78/vDe2NUy83SHknWBlaKzCKKY75oShXwjwF4ep7GicFcJ5MaDXhW6 PUCs6oY9WQ3Bq9plbcsnAJmgcLVSPN8za9zFMjD/Cnoib0OIH6yvYaj9vyinDYVn4NbK X9sQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=XVuqkgxg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t22si4219972ejj.746.2021.03.15.11.23.01; Mon, 15 Mar 2021 11:23:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=XVuqkgxg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238151AbhCOOWr (ORCPT + 99 others); Mon, 15 Mar 2021 10:22:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:34900 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232896AbhCOOAG (ORCPT ); Mon, 15 Mar 2021 10:00:06 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 254C664F1E; Mon, 15 Mar 2021 13:59:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1615816791; bh=j/cRpuSaTG/ikfUPjVyiZeucg2SiJvxu/HB5bNElkEs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XVuqkgxg+Zs7FN2U67SNW6xTcJ1pgpu8GcF4OZb6D+94oLM196mrXSiPUjGfdxyV9 Wq47T7PtyoTdxI8bQfrAIn01LqL1PL9dVT5HWbpFqn07PCayYuSNMTDiWyu8gcfDi6 YZSsogxcFHkLWjnrxxbfiRcgGBQQAZnQwUsOi00Q= From: gregkh@linuxfoundation.org To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Mathias Nyman Subject: [PATCH 5.4 112/168] xhci: Improve detection of device initiated wake signal. Date: Mon, 15 Mar 2021 14:55:44 +0100 Message-Id: <20210315135554.041760279@linuxfoundation.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210315135550.333963635@linuxfoundation.org> References: <20210315135550.333963635@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Greg Kroah-Hartman From: Mathias Nyman commit 253f588c70f66184b1f3a9bbb428b49bbda73e80 upstream. A xHC USB 3 port might miss the first wake signal from a USB 3 device if the port LFPS reveiver isn't enabled fast enough after xHC resume. xHC host will anyway be resumed by a PME# signal, but will go back to suspend if no port activity is seen. The device resends the U3 LFPS wake signal after a 100ms delay, but by then host is already suspended, starting all over from the beginning of this issue. USB 3 specs say U3 wake LFPS signal is sent for max 10ms, then device needs to delay 100ms before resending the wake. Don't suspend immediately if port activity isn't detected in resume. Instead add a retry. If there is no port activity then delay for 120ms, and re-check for port activity. Cc: Signed-off-by: Mathias Nyman Link: https://lore.kernel.org/r/20210311115353.2137560-3-mathias.nyman@linux.intel.com Signed-off-by: Greg Kroah-Hartman --- drivers/usb/host/xhci.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -1088,6 +1088,7 @@ int xhci_resume(struct xhci_hcd *xhci, b struct usb_hcd *secondary_hcd; int retval = 0; bool comp_timer_running = false; + bool pending_portevent = false; if (!hcd->state) return 0; @@ -1226,13 +1227,22 @@ int xhci_resume(struct xhci_hcd *xhci, b done: if (retval == 0) { - /* Resume root hubs only when have pending events. */ - if (xhci_pending_portevent(xhci)) { + /* + * Resume roothubs only if there are pending events. + * USB 3 devices resend U3 LFPS wake after a 100ms delay if + * the first wake signalling failed, give it that chance. + */ + pending_portevent = xhci_pending_portevent(xhci); + if (!pending_portevent) { + msleep(120); + pending_portevent = xhci_pending_portevent(xhci); + } + + if (pending_portevent) { usb_hcd_resume_root_hub(xhci->shared_hcd); usb_hcd_resume_root_hub(hcd); } } - /* * If system is subject to the Quirk, Compliance Mode Timer needs to * be re-initialized Always after a system resume. Ports are subject