Received: by 2002:a05:6358:bb9e:b0:b9:5105:a5b4 with SMTP id df30csp4469535rwb; Tue, 6 Sep 2022 08:00:41 -0700 (PDT) X-Google-Smtp-Source: AA6agR5yM1B0KiatXJJpwCra4JDsLufNUE6NPd5y8wRYDpnuciALFaj8m7oU/g02GNwrVFJT4Sfz X-Received: by 2002:a17:906:58d1:b0:76d:af13:5ae3 with SMTP id e17-20020a17090658d100b0076daf135ae3mr6039085ejs.708.1662476440942; Tue, 06 Sep 2022 08:00:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662476440; cv=none; d=google.com; s=arc-20160816; b=bAwihZCIMk2RrcGQMPLdsFSB7+vAIeuvW8MiHYhYvlsGSPKUzmMu0ffa0X6alDDapg tcLbLBUAxE+HapQalvcG+qXfWoKE3w1bmAdxVKMzxigl45z0sDFLK5FCgNq8KhiFh9Z2 1HhXDM0vyZkEUju+TDNOt267Arl09jAsf+nEtwy0duVQ9tVmfj1GYs85KVaOi42JVttU JUqdj9PfGj/lUDfD2XQs8/4MhH16iGLuhVY8clbDYHJjV5HUqhW2e/JdKygqdlyAYVX3 9RENeFv+6BXEUdDBCPQcnWLuFAP+BdGrRNZcnHn2UTYEx+V0qhU3nvk0D93PrrJy67lk c+Bw== 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=HfywohNQmLfvd/xQOMYO4LJ3jvdmK2nTWzC152zkm4g=; b=ir5OEkEkOCkR2coNUekXM8KCNkpm73J16o3rJ8bux0xT+bCzDCo0RoxligTejJJsMH B+7IVFfGLjnzlu+qEX8awDLIbnTtJ16lsp9LgvS6TispOz98VL/mJFJHs6/r1mAuOvx1 y5gtVmXF0qA8gQyJZXPbNMT8I/d07+OXXT+6f+YM1TYMbqIh5I7yGyngW+T7upvQuhFV KGYP7jqFM//skH60XPE7S5LL7lZleLkVvkSaFOOehpJdWwbVxLRBJ+kUyfWfOvUdOz/3 XcBl874+rrXkQ18d4c8catfCuZ/NNhC2MsCYLt6FsN2FD7S9iwNd3qvvOkJlE3UUNY/+ +j7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=qdIJcJjm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id he16-20020a1709073d9000b007706069c600si100407ejc.540.2022.09.06.08.00.14; Tue, 06 Sep 2022 08:00:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=qdIJcJjm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S241198AbiIFOOc (ORCPT + 99 others); Tue, 6 Sep 2022 10:14:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45410 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241089AbiIFONK (ORCPT ); Tue, 6 Sep 2022 10:13:10 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 60F12895C6; Tue, 6 Sep 2022 06:48:07 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id E06B061566; Tue, 6 Sep 2022 13:46:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EAB82C433D7; Tue, 6 Sep 2022 13:46:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1662471988; bh=aJr5uafAwXxRhLodNKlTHkBERlazyfZKxrU1FJNbSt4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qdIJcJjmhg6jhgGtpNhFSSzGWwzNZeIlDP3uCyoPBaBgP/N/xAZzKZpqlw219mYuB qjeaGFHDRJ6QODaNDwa2LYm1ZAt23NGR/9EG2MrWze/DH0fCkbw9kZOFFMn0EpZfEh 4oA6uRH6nHYNVZ6HMI/inljgSmsbltnQZX1m6se4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Mathias Nyman Subject: [PATCH 5.19 109/155] xhci: Add grace period after xHC start to prevent premature runtime suspend. Date: Tue, 6 Sep 2022 15:30:57 +0200 Message-Id: <20220906132834.094842342@linuxfoundation.org> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20220906132829.417117002@linuxfoundation.org> References: <20220906132829.417117002@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mathias Nyman commit 33e321586e37b642ad10594b9ef25a613555cd08 upstream. After xHC controller is started, either in probe or resume, it can take a while before any of the connected usb devices are visible to the roothub due to link training. It's possible xhci driver loads, sees no acivity and suspends the host before the USB device is visible. In one testcase with a hotplugged xHC controller the host finally detected the connected USB device and generated a wake 500ms after host initial start. If hosts didn't suspend the device duringe training it probablty wouldn't take up to 500ms to detect it, but looking at specs reveal USB3 link training has a couple long timeout values, such as 120ms RxDetectQuietTimeout, and 360ms PollingLFPSTimeout. So Add a 500ms grace period that keeps polling the roothub for 500ms after start, preventing runtime suspend until USB devices are detected. Cc: stable@vger.kernel.org Signed-off-by: Mathias Nyman Link: https://lore.kernel.org/r/20220825150840.132216-3-mathias.nyman@linux.intel.com Signed-off-by: Greg Kroah-Hartman --- drivers/usb/host/xhci-hub.c | 11 +++++++++++ drivers/usb/host/xhci.c | 4 +++- drivers/usb/host/xhci.h | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c @@ -1648,6 +1648,17 @@ int xhci_hub_status_data(struct usb_hcd status = bus_state->resuming_ports; + /* + * SS devices are only visible to roothub after link training completes. + * Keep polling roothubs for a grace period after xHC start + */ + if (xhci->run_graceperiod) { + if (time_before(jiffies, xhci->run_graceperiod)) + status = 1; + else + xhci->run_graceperiod = 0; + } + mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC | PORT_CEC; /* For each port, did anything change? If so, set that bit in buf. */ --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -151,9 +151,11 @@ int xhci_start(struct xhci_hcd *xhci) xhci_err(xhci, "Host took too long to start, " "waited %u microseconds.\n", XHCI_MAX_HALT_USEC); - if (!ret) + if (!ret) { /* clear state flags. Including dying, halted or removing */ xhci->xhc_state = 0; + xhci->run_graceperiod = jiffies + msecs_to_jiffies(500); + } return ret; } --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -1826,7 +1826,7 @@ struct xhci_hcd { /* Host controller watchdog timer structures */ unsigned int xhc_state; - + unsigned long run_graceperiod; u32 command; struct s3_save s3; /* Host controller is dying - not responding to commands. "I'm not dead yet!"