From: "David E. Box" <david.e.box@linux.intel.com> To: shyjumon.n@intel.com, rjw@rjwysocki.net, lenb@kernel.org, bhelgaas@google.com, dan.j.williams@intel.com, kbusch@kernel.org, axboe@fb.com, hch@lst.de, sagi@grimberg.me Cc: "David E. Box" <david.e.box@linux.intel.com>, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org Subject: [PATCH V2 2/2] drivers/nvme: Add support for ACPI StorageD3Enable property Date: Fri, 12 Jun 2020 13:48:20 -0700 [thread overview] Message-ID: <20200612204820.20111-3-david.e.box@linux.intel.com> (raw) In-Reply-To: <20200428003214.3764-1-david.e.box@linux.intel.com> This patch implements a solution for a BIOS hack used on some currently shipping Intel systems to address issues with power management policy decisions concerning PCIe NVMe drives. Some newer Intel platforms, like some Comet Lake systems, require that PCIe devices use D3 when doing suspend-to-idle in order to allow the platform to realize maximum power savings. This is particularly needed to support ATX power supply shutdown on desktop systems. In order to ensure this happens for root ports with storage devices, Microsoft apparently created this ACPI _DSD property as a way to override their driver policy. To my knowledge this property has not been discussed with the NVME specification body. Though the solution is not ideal, it addresses a problem that also affects Linux since the NVMe driver's default policy of using NVMe APST during suspend-to-idle would lead to higher power consumption for these platforms. The patch uses the previously added pci_acpi_storage_d3 function to check for the StorageD3Enable property during probe and enables D3 as a quirk if set. It also provides a 'noacpi' module parameter to allow skipping the quirk if needed. Tested on: PM961 NVMe SED Samsung 512GB INTEL SSDPEKKF512G8 Link: https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelines/power-management-for-storage-hardware-devices-intro Signed-off-by: David E. Box <david.e.box@linux.intel.com> Reviewed-by: Dan Williams <dan.j.williams@intel.com> --- drivers/nvme/host/pci.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index 4e79e412b276..427505c47e79 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -78,6 +78,10 @@ static unsigned int poll_queues; module_param(poll_queues, uint, 0644); MODULE_PARM_DESC(poll_queues, "Number of queues to use for polled IO."); +static bool noacpi; +module_param(noacpi, bool, 0444); +MODULE_PARM_DESC(noacpi, "disable all acpi bios quirks"); + struct nvme_dev; struct nvme_queue; @@ -2777,6 +2781,16 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) quirks |= check_vendor_combination_bug(pdev); + if (!noacpi && pci_acpi_storage_d3(pdev)) { + /* + * Some systems use a bios work around to ask for D3 on + * platforms that support kernel managed suspend. + */ + dev_info(&pdev->dev, + "platform quirk: setting simple suspend\n"); + quirks |= NVME_QUIRK_SIMPLE_SUSPEND; + } + /* * Double check that our mempool alloc size will cover the biggest * command we support. -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: "David E. Box" <david.e.box@linux.intel.com> To: shyjumon.n@intel.com, rjw@rjwysocki.net, lenb@kernel.org, bhelgaas@google.com, dan.j.williams@intel.com, kbusch@kernel.org, axboe@fb.com, hch@lst.de, sagi@grimberg.me Cc: linux-acpi@vger.kernel.org, linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, "David E. Box" <david.e.box@linux.intel.com>, linux-pci@vger.kernel.org Subject: [PATCH V2 2/2] drivers/nvme: Add support for ACPI StorageD3Enable property Date: Fri, 12 Jun 2020 13:48:20 -0700 [thread overview] Message-ID: <20200612204820.20111-3-david.e.box@linux.intel.com> (raw) In-Reply-To: <20200428003214.3764-1-david.e.box@linux.intel.com> This patch implements a solution for a BIOS hack used on some currently shipping Intel systems to address issues with power management policy decisions concerning PCIe NVMe drives. Some newer Intel platforms, like some Comet Lake systems, require that PCIe devices use D3 when doing suspend-to-idle in order to allow the platform to realize maximum power savings. This is particularly needed to support ATX power supply shutdown on desktop systems. In order to ensure this happens for root ports with storage devices, Microsoft apparently created this ACPI _DSD property as a way to override their driver policy. To my knowledge this property has not been discussed with the NVME specification body. Though the solution is not ideal, it addresses a problem that also affects Linux since the NVMe driver's default policy of using NVMe APST during suspend-to-idle would lead to higher power consumption for these platforms. The patch uses the previously added pci_acpi_storage_d3 function to check for the StorageD3Enable property during probe and enables D3 as a quirk if set. It also provides a 'noacpi' module parameter to allow skipping the quirk if needed. Tested on: PM961 NVMe SED Samsung 512GB INTEL SSDPEKKF512G8 Link: https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelines/power-management-for-storage-hardware-devices-intro Signed-off-by: David E. Box <david.e.box@linux.intel.com> Reviewed-by: Dan Williams <dan.j.williams@intel.com> --- drivers/nvme/host/pci.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index 4e79e412b276..427505c47e79 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -78,6 +78,10 @@ static unsigned int poll_queues; module_param(poll_queues, uint, 0644); MODULE_PARM_DESC(poll_queues, "Number of queues to use for polled IO."); +static bool noacpi; +module_param(noacpi, bool, 0444); +MODULE_PARM_DESC(noacpi, "disable all acpi bios quirks"); + struct nvme_dev; struct nvme_queue; @@ -2777,6 +2781,16 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) quirks |= check_vendor_combination_bug(pdev); + if (!noacpi && pci_acpi_storage_d3(pdev)) { + /* + * Some systems use a bios work around to ask for D3 on + * platforms that support kernel managed suspend. + */ + dev_info(&pdev->dev, + "platform quirk: setting simple suspend\n"); + quirks |= NVME_QUIRK_SIMPLE_SUSPEND; + } + /* * Double check that our mempool alloc size will cover the biggest * command we support. -- 2.20.1 _______________________________________________ linux-nvme mailing list linux-nvme@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-nvme
next prev parent reply other threads:[~2020-06-12 20:48 UTC|newest] Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-04-28 0:32 [PATCH 0/2] Add support for StorageD3Enable _DSD property David E. Box 2020-04-28 0:32 ` David E. Box 2020-04-28 0:32 ` [PATCH 1/2] pci: Add ACPI StorageD3Enable _DSD support David E. Box 2020-04-28 0:32 ` David E. Box 2020-05-18 12:34 ` Rafael J. Wysocki 2020-05-18 12:34 ` Rafael J. Wysocki 2020-05-19 17:10 ` David E. Box 2020-05-19 17:10 ` David E. Box 2020-04-28 0:32 ` [PATCH 2/2] drivers/nvme: Add support for ACPI StorageD3Enable property David E. Box 2020-04-28 0:32 ` David E. Box 2020-04-28 5:13 ` [PATCH 0/2] Add support for StorageD3Enable _DSD property Christoph Hellwig 2020-04-28 5:13 ` Christoph Hellwig 2020-04-28 14:09 ` David E. Box 2020-04-28 14:09 ` David E. Box 2020-04-28 14:22 ` Christoph Hellwig 2020-04-28 14:22 ` Christoph Hellwig 2020-04-28 15:27 ` David E. Box 2020-04-28 15:27 ` David E. Box 2020-04-29 5:20 ` Williams, Dan J 2020-04-29 5:20 ` Williams, Dan J 2020-04-29 15:10 ` Keith Busch 2020-04-29 15:10 ` Keith Busch 2020-04-29 16:11 ` David E. Box 2020-04-29 16:11 ` David E. Box 2020-05-01 13:12 ` hch 2020-05-01 13:12 ` hch 2020-05-01 15:54 ` David E. Box 2020-05-01 15:54 ` David E. Box 2020-05-01 13:10 ` hch 2020-05-01 13:10 ` hch 2020-05-18 13:51 ` David Woodhouse 2020-05-18 13:51 ` David Woodhouse 2020-05-18 17:20 ` Dan Williams 2020-05-18 17:20 ` Dan Williams 2020-06-12 20:48 ` [PATCH V2 0/2] nvme: Add support for ACPI StorageD3Enable property David E. Box 2020-06-12 20:48 ` David E. Box 2020-06-24 18:55 ` David E. Box 2020-06-24 18:55 ` David E. Box 2020-06-24 19:10 ` Dan Williams 2020-06-24 19:10 ` Dan Williams 2020-06-24 19:39 ` David E. Box 2020-06-24 19:39 ` David E. Box 2020-07-02 21:04 ` [PATCH v3] drivers/nvme: " David E. Box 2020-07-02 22:50 ` [PATCH v4] " David E. Box 2020-07-02 22:50 ` David E. Box 2020-07-03 7:18 ` kernel test robot 2020-07-03 7:18 ` kernel test robot 2020-07-06 14:57 ` Rafael J. Wysocki 2020-07-06 14:57 ` Rafael J. Wysocki 2020-07-07 21:24 ` David E. Box 2020-07-07 21:24 ` David E. Box 2020-07-07 7:09 ` Christoph Hellwig 2020-07-07 7:09 ` Christoph Hellwig 2020-07-09 18:43 ` [PATCH V5] " David E. Box 2020-07-09 18:43 ` David E. Box 2020-07-13 11:12 ` Rafael J. Wysocki 2020-07-13 11:12 ` Rafael J. Wysocki 2020-07-16 14:39 ` Christoph Hellwig 2020-07-16 14:39 ` Christoph Hellwig 2021-05-26 19:25 ` Raul E Rangel 2021-05-26 19:25 ` Raul E Rangel 2020-06-12 20:48 ` [PATCH V2 1/2] PCI: Add ACPI StorageD3Enable _DSD support David E. Box 2020-06-12 20:48 ` David E. Box 2020-06-24 21:15 ` Bjorn Helgaas 2020-06-24 21:15 ` Bjorn Helgaas 2020-06-25 11:30 ` Rafael J. Wysocki 2020-06-25 11:30 ` Rafael J. Wysocki 2020-06-25 12:16 ` Mika Westerberg 2020-06-25 12:16 ` Mika Westerberg 2020-06-25 17:07 ` David E. Box 2020-06-25 17:30 ` Bjorn Helgaas 2020-06-25 17:30 ` Bjorn Helgaas 2020-06-24 21:37 ` Bjorn Helgaas 2020-06-24 21:37 ` Bjorn Helgaas 2020-06-24 22:09 ` David E. Box 2020-06-24 22:09 ` David E. Box 2020-06-12 20:48 ` David E. Box [this message] 2020-06-12 20:48 ` [PATCH V2 2/2] drivers/nvme: Add support for ACPI StorageD3Enable property David E. Box
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200612204820.20111-3-david.e.box@linux.intel.com \ --to=david.e.box@linux.intel.com \ --cc=axboe@fb.com \ --cc=bhelgaas@google.com \ --cc=dan.j.williams@intel.com \ --cc=hch@lst.de \ --cc=kbusch@kernel.org \ --cc=lenb@kernel.org \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvme@lists.infradead.org \ --cc=linux-pci@vger.kernel.org \ --cc=rjw@rjwysocki.net \ --cc=sagi@grimberg.me \ --cc=shyjumon.n@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.