Received: by 2002:a05:6359:c8b:b0:c7:702f:21d4 with SMTP id go11csp5979997rwb; Wed, 21 Sep 2022 15:39:20 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7nwKUz1JXrOaAU/mDbNtFoxLRhnFoAk+NUothB2YN5uOgBpSY8MQyQ1Rmehhp67OaFW9vV X-Received: by 2002:a63:4408:0:b0:439:befa:3d47 with SMTP id r8-20020a634408000000b00439befa3d47mr398642pga.64.1663799960232; Wed, 21 Sep 2022 15:39:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663799960; cv=none; d=google.com; s=arc-20160816; b=xLmeASWCnok1WDDS1tcfmomvfiNLxg2B3G/y3uJTiRRHMvtntGw58DsCUyVREj1OZS u+JT63SGwGRBJMwrR8REafW34JmDLfPAsqByjg2n61GxCWqcJc4/sM+hAvLFPtgCHPHU 0K56lygWUvam7O9EOiRDBPFj3D0zyh5P5yoeLrLlSljquwvdDxLih/z4qe7J9whE/M6w OMLj5yVq9d+rXH6Z+udT3qnvCeDkkVajgKhHxqlLL7pGdw/V9rvCqMafWEfzyqelsaFW OZLaTp9pBo/XHT2nd6c1B9G0rCkoz4+8Gg2tlswseI6a8Ejw/hBdIp3/2Ro/TiIeA8hL yANw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:mime-version:date :dkim-signature; bh=Rj57beHCIEQ+ldfbuTVP/EURNkRb2EXXRe6WPMDPyCc=; b=W0gVpTsS2iGX2ohQv9so6lY/rCA8NUZWj/Ez7KOpq7GkEpGm4wFhdzm8eIxx/2q8cj pU63LmbPk3/LoMfQJrgl29I+1T0AToAfZKuwqS09Tw8gJfpnubrP4wsHrnZ8cpu1z3AK zT+pz1ZojN9m5eBQTW8n1+AaZGGd+jf41Pflbeg+VqzIVUxjYYaVf/rODK4NGTClWCU4 VX9H17a0a5NP8fVh/I3mkGc/92z5Ffa1qn916ykMKPkA6LR9iO7cV5Y4wX80qTzkG8CA O1j+YDH7mGF1WtX1axuLy/fWc6Jyt3g4vBhgzIuUthlttNKBesok9IotJ6iwW00txD9r BL4Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=GYVh1Hv2; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p1-20020a170902e74100b001751a9de12esi4747011plf.288.2022.09.21.15.39.08; Wed, 21 Sep 2022 15:39:20 -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=@google.com header.s=20210112 header.b=GYVh1Hv2; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230054AbiIUV2W (ORCPT + 99 others); Wed, 21 Sep 2022 17:28:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57212 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230357AbiIUV2H (ORCPT ); Wed, 21 Sep 2022 17:28:07 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5192FA5C7D for ; Wed, 21 Sep 2022 14:28:06 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id x13-20020a170902ec8d00b00177f0fa642cso4608207plg.10 for ; Wed, 21 Sep 2022 14:28:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date; bh=Rj57beHCIEQ+ldfbuTVP/EURNkRb2EXXRe6WPMDPyCc=; b=GYVh1Hv2Gcij7haZHYTZEMfH/lnByf/3y5MSsbXvhHiBfK+A+BYPENJDuzsSzoR7NW Iy9Tz1XcjiMkpveXZpqcgEfFCrMGSEqgpO+hWaUIjqkuxF0QT36fZtYb7UFmM+iW0eGh meDKyvNcKVG4/6WdDGEzHaD6LlsfLTJQPp/Ij6mzKeCo3bovst4NjEOSjKzsUzmnrvAy xh/xKWaS0ZGrxoHVqWbwAZc26NlkKS2n96WMBCwuENEbgWcAVTCQqwNbpY5RwVDnH8mf +APEBFXVKaU7t0YLDp3Bq6aV8wOHoyd1vuRX9liZHfCY7CuMAv4wXqWZfc62vYBLw4KU +SlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date; bh=Rj57beHCIEQ+ldfbuTVP/EURNkRb2EXXRe6WPMDPyCc=; b=cg9yrgjMIrzjywaW3F4q0oR99h32g+eEhdMKs8pqkoGkD+L1Ez86KCVdUOZzCjZ4LM DY5ifWA5PNBIIHKQ2blxpHK09aZZp1WfPVdmHxHIoX7dahsahfmhKypv9Qq37p0taHUt B4cKDcY+0r/GxW3LZk0K8JYQHVeY6qyF1HI7HPY0O4NQ7Uh8G0iFKHO//TkxsCJNs81C NpzZ5zwrYsufaBlAqRey65lR1eeGws9ehhKdW57G3UvGM4UlpN7GyKemznp1eT/+Zr5I ReUSqs6FZIn7PIGQ7pvWK1NMvhaXweWfMQogDlldY8GG3YqfC7WdfZy3n5iGF0HuZCE2 mO5A== X-Gm-Message-State: ACrzQf0fBRxaqQ23BDcCvClM8ouJbOE5i5bTgBaYMkg/7wlQpKS6fJ4S 9h5f2MD5X54nWwbaEFVz1FocACXp98ZRGyZ8jcM= X-Received: from wmcvicker.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5ebe]) (user=willmcvicker job=sendgmr) by 2002:a05:6a00:1342:b0:545:4d30:eecb with SMTP id k2-20020a056a00134200b005454d30eecbmr164457pfu.69.1663795685856; Wed, 21 Sep 2022 14:28:05 -0700 (PDT) Date: Wed, 21 Sep 2022 21:27:35 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.37.3.968.ga6b4b080e4-goog Message-ID: <20220921212735.2131588-1-willmcvicker@google.com> Subject: [PATCH v4] PCI/PM: Switch D3hot delay to use usleep_range() From: Will McVicker To: Bjorn Helgaas Cc: kernel-team@android.com, Sajid Dalvi , Matthias Kaehlcke , Will McVicker , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-8.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,HK_RANDOM_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=no 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: Sajid Dalvi The PCIe r6.0, sec 5.9 spec requires a 10ms D3hot delay (defined by PCI_PM_D3HOT_WAIT) for transitions to or from D3hot. So let's switch to usleep_range() for the delay time to improve the delay accuracy. This patch is based off of a commit from Sajid Dalvi in the Pixel 6 kernel tree [1]. Testing on a Pixel 6, found that the 10ms delay for the Exynos PCIe device was on average delaying for 19ms when the spec requires 10ms. Switching from msleep() to usleep_range() therefore decreases the resume time on a Pixel 6 on average by 9ms. Note: some ancient Intel chips do have a quirk that sets the delay to 120ms. Using usleep_delay() may add a few extra milliseconds for those chips. [1] https://android.googlesource.com/kernel/gs/+/18a8cad68d8e6d50f339a716a18295e6d987cee3 Signed-off-by: Sajid Dalvi Signed-off-by: Will McVicker Reviewed-by: Matthias Kaehlcke --- drivers/pci/pci.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) v4: * Drop use of msleep() in favor of always using usleep_range(). * Update the commit message. v3: * Use DIV_ROUND_CLOSEST instead of bit manipulation. * Minor refactor to use max() where relavant. v2: * Update to use 20-25% upper bound * Update to use usleep_range() for <=20ms, else use msleep() diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 516bf0c2ca02..2127aba3550b 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -66,13 +66,15 @@ struct pci_pme_device { static void pci_dev_d3_sleep(struct pci_dev *dev) { - unsigned int delay = dev->d3hot_delay; - - if (delay < pci_pm_d3hot_delay) - delay = pci_pm_d3hot_delay; - - if (delay) - msleep(delay); + unsigned int delay_ms = max(dev->d3hot_delay, pci_pm_d3hot_delay); + unsigned int upper; + + if (delay_ms) { + /* Use a 20% upper bound, 1ms minimum */ + upper = max(DIV_ROUND_CLOSEST(delay_ms, 5), 1U); + usleep_range(delay_ms * USEC_PER_MSEC, + (delay_ms + upper) * USEC_PER_MSEC); + } } bool pci_reset_supported(struct pci_dev *dev) base-commit: fcf773ae8016c6bffe5d408d3eda50d981b946e6 -- 2.37.3.968.ga6b4b080e4-goog