Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp3316233ybz; Mon, 4 May 2020 00:06:24 -0700 (PDT) X-Google-Smtp-Source: APiQypJt2BS4/5dhH3v5jzVep39Znd0ABlhE/J6SKM5HHGgYeBfR2hN+DGd2qByIsBYKk7x6FNge X-Received: by 2002:a17:907:41b6:: with SMTP id na6mr13234828ejb.119.1588575983947; Mon, 04 May 2020 00:06:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588575983; cv=none; d=google.com; s=arc-20160816; b=Y2K3yXzcjXlUcfY592TvWBf7WKY2EG0hbnNO6IvNzy1FKoNY2d0AcYXJ1PfqcaaY19 exGzw+C7pGJef4suCiTyMJQZH0RidTV85IYge0XzS3YzjlntPdNJWVC3QDjp8EXtItdK 0D2LtfXYUPIUslsspnF0H8hkl591toT8KsE/brdX2hiKlxsG0T4zyDasfsJXb0WeQvjs 7y2LUPo8e62imYxVXwocDzqWU84v6+VwgYs8LmBJfwawkIFpfmuZWZq+uCasqe5VPfzq fCJoGd8aHFse9sfqaaqaVAoBjjuy550Ibe7NSub9Dz7F12c/ZCoTyWYQuzp8TplWf1AZ zvSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=gmfBv4UfJjL4l/3kuBygfzNdHpUw3AVwutEjJ2uJv3w=; b=EYe9WiBJvOaSaOUD/HLSV20u/u115GVaI+1lbRmwsTgZEd1bNYVdg9PW0MSUelW1Mx lnE6ppcA6+F6R32lmOF0Y2+xxrOP69914T+Grlco0MJmQ8e97VlbArrlcOPYpZP5dmdr hID1uoCJfxYmQqvAReKV7vWWX14+4hNF3ZATk2ZqeZypi3D+rIxKAkslWxt3be1tJFhu Z3zsUR479VRwqi6pCxlUzvZXRDcpe5wesD5qeZjby7F9KCg2TP9KLhpVDBcDw/cdjGKY m+MFVo6nvgcu8g6lPC1t7HdRHhzhJEgtxIOjzwlGsgzZjTmai3ClGpzNHs+xQYUiOO5O R1Kw== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k18si6119181edx.296.2020.05.04.00.06.00; Mon, 04 May 2020 00:06: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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727975AbgEDHDJ (ORCPT + 99 others); Mon, 4 May 2020 03:03:09 -0400 Received: from youngberry.canonical.com ([91.189.89.112]:55251 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726410AbgEDHDI (ORCPT ); Mon, 4 May 2020 03:03:08 -0400 Received: from 61-220-137-37.hinet-ip.hinet.net ([61.220.137.37] helo=localhost) by youngberry.canonical.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1jVV85-0002cB-SL; Mon, 04 May 2020 07:03:06 +0000 From: Kai-Heng Feng To: bhelgaas@google.com Cc: Kai-Heng Feng , linux-pci@vger.kernel.org (open list:PCI SUBSYSTEM), linux-kernel@vger.kernel.org (open list) Subject: [PATCH] PCI: Enable ASPM L1 on TI PCIe-to-PCI bridge Date: Mon, 4 May 2020 15:02:59 +0800 Message-Id: <20200504070259.6034-1-kai.heng.feng@canonical.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The TI PCIe-to-PCI bridge prevents the Intel SoC from entering power state deeper than PC3, consumes lots of unnecessary power. On Windows ASPM L1 is enabled on the device and its upstream bridge, so it can make the Intel SoC reach PC8 or PC10 to save lots of power. So enable ASPM L1 like Windows does, to save additional power. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=207571 Signed-off-by: Kai-Heng Feng --- drivers/pci/quirks.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index ca9ed5774eb1..ac7eccf34f87 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -2330,6 +2330,27 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10f1, quirk_disable_aspm_l0s); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x10f4, quirk_disable_aspm_l0s); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1508, quirk_disable_aspm_l0s); +static void quirk_enable_aspm_l1(struct pci_dev *dev) +{ + struct pci_dev *bridge = pci_upstream_bridge(dev); + u16 lnkctl; + + pci_info(dev, "Enabling L1\n"); + pcie_capability_read_word(dev, PCI_EXP_LNKCTL, &lnkctl); + if (!(lnkctl & PCI_EXP_LNKCTL_ASPM_L1)) + pcie_capability_write_word(dev, PCI_EXP_LNKCTL, + lnkctl | PCI_EXP_LNKCTL_ASPM_L1); + + if (!bridge) + return; + + pcie_capability_read_word(bridge, PCI_EXP_LNKCTL, &lnkctl); + if (!(lnkctl & PCI_EXP_LNKCTL_ASPM_L1)) + pcie_capability_write_word(bridge, PCI_EXP_LNKCTL, + lnkctl | PCI_EXP_LNKCTL_ASPM_L1); +} +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_TI, 0x8240, quirk_enable_aspm_l1); + /* * Some Pericom PCIe-to-PCI bridges in reverse mode need the PCIe Retrain * Link bit cleared after starting the link retrain process to allow this -- 2.17.1