linux-acpi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Add support for StorageD3Enable _DSD property
@ 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
                   ` (5 more replies)
  0 siblings, 6 replies; 42+ messages in thread
From: David E. Box @ 2020-04-28  0:32 UTC (permalink / raw)
  To: rjw, lenb, bhelgaas, kbusch, axboe, hch, sagi
  Cc: David E. Box, linux-acpi, linux-pci, linux-nvme, linux-kernel

NVMe storage power management during suspend-to-idle, particularly on
laptops, has been inconsistent with some devices working with D3 while
others must rely on NVMe APST in order for power savings to be realized.
Currently the default is to use APST unless quirked to do otherwise.
However newer platforms, like Intel Comet Lake systems, may require NVMe
drives to use D3 in order for the PCIe ports to be properly power managed.
To make it easier for drivers to choose, these platforms may supply a
special "StorageD3Enable" _DSD property under the root port that the device
is attached to. If supplied, the driver must use D3 in order for the
platform to realize the deepest power savings in suspend-to-idle.
    
The first patch adds the new _DSD GUID and fowards the property through the
pci/acpi layer to the pci device.

The second patch adds support for the property to the nvme driver.

David E. Box (2):
  pci: Add ACPI StorageD3Enable _DSD support
  drivers/nvme: Add support for ACPI StorageD3Enable property

 drivers/acpi/property.c |  3 +++
 drivers/nvme/host/pci.c |  7 ++++++
 drivers/pci/pci-acpi.c  | 47 +++++++++++++++++++++++++++++++++++++++++
 drivers/pci/pci.c       |  6 ++++++
 drivers/pci/pci.h       |  4 ++++
 include/linux/pci.h     |  1 +
 6 files changed, 68 insertions(+)

-- 
2.20.1


^ permalink raw reply	[flat|nested] 42+ messages in thread
* Re: [PATCH V5] drivers/nvme: Add support for ACPI StorageD3Enable property
@ 2021-05-26 17:53 Raul Rangel
  2021-05-27  2:20 ` David E. Box
  0 siblings, 1 reply; 42+ messages in thread
From: Raul Rangel @ 2021-05-26 17:53 UTC (permalink / raw)
  To: David E. Box
  Cc: Rafael J. Wysocki, Len Brown, kbusch, axboe, hch, sagi,
	dan.j.williams, shyjumon.n, linux-acpi, linux-kernel, linux-nvme

On Thu, Jul 09, 2020 at 11:43:33AM -0700, David E. Box wrote:
> +#ifdef CONFIG_ACPI
> +static bool nvme_acpi_storage_d3(struct pci_dev *dev)
> +{
> +     const struct fwnode_handle *fwnode;
> +     struct acpi_device *adev;
> +     struct pci_dev *root;
> +     acpi_handle handle;
> +     acpi_status status;
> +     u8 val;
> +
> +     /*
> +      * Look for _DSD property specifying that the storage device on
> +      * the port must use D3 to support deep platform power savings during
> +      * suspend-to-idle
> +      */
> +     root = pcie_find_root_port(dev);
> +     if (!root)
> +             return false;
> +
> +     adev = ACPI_COMPANION(&root->dev);
> +     if (!adev)
> +             return false;
> +
> +     /*
> +      * The property is defined in the PXSX device for South complex ports
> +      * and in the PEGP device for North complex ports.
> +      */
> +     status = acpi_get_handle(adev->handle, "PXSX", &handle);
So I'm curious why we need to directly look at the PXSX and PEGP
devices instead of the ACPI_COMPANION node attached to the pci device?

I've looked around and I can't find any documentation that defines
the PXSX and PEGP device names.

I've dumped some ACPI from a system that uses the PXSX name and
StorageD3Cold attribute:

    Scope (\_SB.PCI0.GP14)
    {
        Device (PXSX)
        {
            Name (_ADR, 0x0000000000000000)  // _ADR: Address
            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                Return (0x0F)
            }

            Name (_DSD, Package (0x02)  // _DSD: Device-Specific Data
            {
                ToUUID ("5025030f-842f-4ab4-a561-99a5189762d0"),
                Package (0x01)
                {
                    Package (0x02)
                    {
                        "StorageD3Enable",
                        One
                    }
                }
            })
        }
    }

It looks to me like it's just the firmware node for the NVMe device
attached to the root port. Is that the correct assumption?

I'm wondering if we can simplify the look up logic to look at the
ACPI_COMPANION of the pci device?

The reason I ask is that I'm working on enabling S0i3 on an AMD device.
This device also defines the StorageD3Enable property, but it don't use
the PXSX name:

    Scope (GPP6) {
        Device (NVME)
        {
            Name (_ADR, Zero)  // _ADR: Address

            Name (_DSD, Package (0x02)  // _DSD: Device-Specific Data
            {
                ToUUID ("5025030f-842f-4ab4-a561-99a5189762d0"),
                Package (0x01)
                {
                    Package (0x02)
                    {
                        "StorageD3Enable",
                        One
                    }
                }
            })
        }
    }

The Windows
[documentation](https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelines/power-management-for-storage-hardware-devices-intro#d3-support)
makes it sound like the _DSD should be defined on the PCI device.

I can send one of the following patches depending on the feedback:
1) Additionally check the pci device's ACPI_COMPANION for the _DSD.
2) Delete the PXSX and PEGP lookups and only look at the pci device's
   ACPI_COMPANION.

> +     if (ACPI_FAILURE(status)) {
> +             status = acpi_get_handle(adev->handle, "PEGP", &handle);
> +             if (ACPI_FAILURE(status))
> +                     return false;
> +     }
> +
> +     if (acpi_bus_get_device(handle, &adev))
> +             return false;
> +
> +     fwnode = acpi_fwnode_handle(adev);
> +
> +     return fwnode_property_read_u8(fwnode, "StorageD3Enable", &val) ?
> +             false : val == 1;
> +}

Thanks,
Raul

^ permalink raw reply	[flat|nested] 42+ messages in thread

end of thread, other threads:[~2021-05-27  2:20 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-28  0:32 [PATCH 0/2] Add support for StorageD3Enable _DSD property David E. Box
2020-04-28  0:32 ` [PATCH 1/2] pci: Add ACPI StorageD3Enable _DSD support David E. Box
2020-05-18 12:34   ` Rafael J. Wysocki
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  5:13 ` [PATCH 0/2] Add support for StorageD3Enable _DSD property Christoph Hellwig
2020-04-28 14:09   ` David E. Box
2020-04-28 14:22     ` Christoph Hellwig
2020-04-28 15:27       ` David E. Box
2020-04-29  5:20         ` Williams, Dan J
2020-04-29 15:10           ` Keith Busch
2020-04-29 16:11           ` David E. Box
2020-05-01 13:12             ` hch
2020-05-01 15:54               ` David E. Box
2020-05-01 13:10           ` hch
2020-05-18 13:51           ` David Woodhouse
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-24 18:55   ` David E. Box
2020-06-24 19:10     ` Dan Williams
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-03  7:18     ` kernel test robot
2020-07-06 14:57     ` Rafael J. Wysocki
2020-07-07 21:24       ` David E. Box
2020-07-07  7:09     ` Christoph Hellwig
2020-07-09 18:43     ` [PATCH V5] " David E. Box
2020-07-13 11:12       ` Rafael J. Wysocki
2020-07-16 14:39         ` Christoph Hellwig
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-24 21:15   ` Bjorn Helgaas
2020-06-25 11:30     ` Rafael J. Wysocki
2020-06-25 12:16       ` Mika Westerberg
2020-06-25 17:07       ` David E. Box
2020-06-25 17:30       ` Bjorn Helgaas
2020-06-24 21:37   ` Bjorn Helgaas
2020-06-24 22:09     ` David E. Box
2020-06-12 20:48 ` [PATCH V2 2/2] drivers/nvme: Add support for ACPI StorageD3Enable property David E. Box
2021-05-26 17:53 [PATCH V5] " Raul Rangel
2021-05-27  2:20 ` David E. Box

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).