From: Bjorn Helgaas <helgaas@kernel.org>
To: Anshuman Gupta <anshuman.gupta@intel.com>
Cc: intel-xe@lists.freedesktop.org, linux-acpi@vger.kernel.org,
linux-pci@vger.kernel.org, rafael@kernel.org, lenb@kernel.org,
bhelgaas@google.com, ilpo.jarvinen@linux.intel.com,
lucas.demarchi@intel.com, rodrigo.vivi@intel.com,
badal.nilawar@intel.com, varun.gupta@intel.com,
ville.syrjala@linux.intel.com, uma.shankar@intel.com
Subject: Re: [PATCH 01/12] PCI/ACPI: Add D3cold Aux Power Limit_DSM method
Date: Tue, 1 Apr 2025 13:25:45 -0500 [thread overview]
Message-ID: <20250401182545.GA1675819@bhelgaas> (raw)
In-Reply-To: <20250401153225.96379-2-anshuman.gupta@intel.com>
On Tue, Apr 01, 2025 at 09:02:14PM +0530, Anshuman Gupta wrote:
> Implement _DSM method 10 and _DSM Method 11 as per PCI firmware specs
> section 4.6.10 Rev 3.3.
Thanks for splitting this into two patches. But I think now this only
implements function 10 (0x0a), so this sentence needs to be updated.
I would write this consistently as "0x0a" or "0Ah" to match the spec
description. I don't think the spec ever uses "10".
> Note that this implementation assumes only a single device below the
> Downstream Port will request for Aux Power Limit under a given
> Root Port because it does not track and aggregate requests
> from all child devices below the Downstream Port as required
> by Section 4.6.10 Rev 3.3.
>
> One possible mitigation would be only allowing only first PCIe
> Non-Bridge Endpoint Function 0 driver to call_DSM method 10.
>
> Signed-off-by: Varun Gupta <varun.gupta@intel.com>
> Signed-off-by: Badal Nilawar <badal.nilawar@intel.com>
> Signed-off-by: Anshuman Gupta <anshuman.gupta@intel.com>
> ---
> drivers/pci/pci-acpi.c | 78 ++++++++++++++++++++++++++++++++++++++++
> include/linux/pci-acpi.h | 6 ++++
> 2 files changed, 84 insertions(+)
>
> diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
> index af370628e583..ebd49e43457e 100644
> --- a/drivers/pci/pci-acpi.c
> +++ b/drivers/pci/pci-acpi.c
> @@ -1421,6 +1421,84 @@ static void pci_acpi_optimize_delay(struct pci_dev *pdev,
> ACPI_FREE(obj);
> }
>
> +/**
> + * pci_acpi_request_d3cold_aux_power - Request D3cold aux power via ACPI DSM
> + * @dev: PCI device instance
> + * @requested_power: Requested auxiliary power in milliwatts
> + *
> + * This function sends a request to the host BIOS via ACPI _DSM Function 10
> + * to grant the required D3Cold Auxiliary power for the specified PCI device.
> + * It evaluates the _DSM (Device Specific Method) to request the Auxiliary
> + * power and handles the response accordingly.
> + *
> + * This function shall be only called by 1st non-bridge Endpoint driver
> + * on Function 0. For a Multi-Function Device, the driver for Function 0 is
> + * required to report an aggregate power requirement covering all
> + * functions contained within the device.
> + *
> + * Return: Returns 0 on success and errno on failure.
Write all this in imperative mood, e.g.,
Request auxiliary power while device is in D3cold ...
Return 0 on success ...
> + */
> +int pci_acpi_request_d3cold_aux_power(struct pci_dev *dev, u32 requested_power)
> +{
> + union acpi_object in_obj = {
> + .integer.type = ACPI_TYPE_INTEGER,
> + .integer.value = requested_power,
> + };
> +
> + union acpi_object *out_obj;
> + acpi_handle handle;
> + int result, ret = -EINVAL;
> +
> + if (!dev || !ACPI_HANDLE(&dev->dev))
> + return -EINVAL;
> +
> + handle = ACPI_HANDLE(&dev->dev);
This needs an acpi_check_dsm() call to find out whether the platform
supports DSM_PCI_D3COLD_AUX_POWER_LIMIT.
We have several _DSM calls that *should* do this, but unfortunately
they don't do it yet, so they're not good examples to copy.
> + out_obj = acpi_evaluate_dsm_typed(handle,
> + &pci_acpi_dsm_guid,
> + 4,
> + DSM_PCI_D3COLD_AUX_POWER_LIMIT,
> + &in_obj,
> + ACPI_TYPE_INTEGER);
> + if (!out_obj)
> + return -EINVAL;
> +
> + result = out_obj->integer.value;
> +
> + switch (result) {
> + case 0x0:
> + dev_dbg(&dev->dev, "D3cold Aux Power %umW request denied\n",
> + requested_power);
Use pci_dbg(dev), pci_info(dev), etc.
> + break;
> + case 0x1:
> + dev_info(&dev->dev, "D3cold Aux Power request granted: %umW\n",
> + requested_power);
> + ret = 0;
> + break;
> + case 0x2:
> + dev_info(&dev->dev, "D3cold Aux Power: Main power won't be removed\n");
> + ret = -EBUSY;
> + break;
> + default:
> + if (result >= 0x11 && result <= 0x1F) {
> + int retry_interval = result & 0xF;
> +
> + dev_warn(&dev->dev, "D3cold Aux Power request needs retry."
> + "Interval: %d seconds.\n", retry_interval);
> + msleep(retry_interval * 1000);
It doesn't seem right to me to do this sleep internally because it
means this interface might take up to 15 seconds to return, and the
caller has no idea what is happening during that time.
This seems like it should be done in the driver, which can decide
*whether* it wants to sleep, and if it does sleep, it may give a nice
indication to the user.
Of course, that would mean returning some kind of retry interval
information to the caller.
> + ret = -EAGAIN;
> + } else {
> + dev_err(&dev->dev, "D3cold Aux Power: Reserved or "
> + "unsupported response: 0x%x.\n", result);
Drop periods at end of messages.
> + }
> + break;
> + }
> +
> + ACPI_FREE(out_obj);
> + return ret;
> +}
> +EXPORT_SYMBOL(pci_acpi_request_d3cold_aux_power);
next prev parent reply other threads:[~2025-04-01 18:25 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-01 15:32 [PATCH 00/12] VRAM Self Refresh Anshuman Gupta
2025-04-01 15:32 ` [PATCH 01/12] PCI/ACPI: Add D3cold Aux Power Limit_DSM method Anshuman Gupta
2025-04-01 18:25 ` Bjorn Helgaas [this message]
2025-04-02 10:59 ` Rafael J. Wysocki
2025-04-03 5:25 ` Gupta, Anshuman
2025-04-01 15:32 ` [PATCH 02/12] PCI/ACPI: Add PERST# Assertion Delay _DSM method Anshuman Gupta
2025-04-01 18:30 ` Bjorn Helgaas
2025-04-03 5:59 ` Gupta, Anshuman
2025-04-02 11:06 ` Rafael J. Wysocki
2025-04-02 14:21 ` Bjorn Helgaas
2025-04-02 14:52 ` Rafael J. Wysocki
2025-04-02 15:50 ` Bjorn Helgaas
2025-04-02 17:51 ` Rafael J. Wysocki
2025-04-02 18:48 ` Bjorn Helgaas
2025-04-02 19:36 ` Rafael J. Wysocki
2025-04-08 20:48 ` Bjorn Helgaas
2025-04-09 12:30 ` Rafael J. Wysocki
2025-04-09 14:47 ` Bjorn Helgaas
2025-04-09 16:28 ` Rafael J. Wysocki
2025-04-01 15:32 ` [PATCH 03/12] PCI/ACPI: Add aux power grant notifier Anshuman Gupta
2025-04-01 20:13 ` Bjorn Helgaas
2025-04-02 11:23 ` Rafael J. Wysocki
2025-04-03 11:30 ` Gupta, Anshuman
2025-04-03 13:34 ` Rafael J. Wysocki
2025-04-03 16:08 ` Gupta, Anshuman
2025-04-03 18:15 ` Rafael J. Wysocki
2025-04-04 12:53 ` Gupta, Anshuman
2025-04-08 13:01 ` Rafael J. Wysocki
2025-04-03 7:56 ` Gupta, Anshuman
2025-04-03 13:48 ` Rafael J. Wysocki
2025-04-01 15:32 ` [PATCH 04/12] drm/xe/vrsr: Introduce flag has_vrsr Anshuman Gupta
2025-04-01 15:32 ` [PATCH 05/12] drm/xe/vrsr: Detect VRSR Capability Anshuman Gupta
2025-04-01 15:32 ` [PATCH 06/12] drm/xe/vrsr: Initialize VRSR feature Anshuman Gupta
2025-04-01 19:56 ` Bjorn Helgaas
2025-04-03 6:09 ` Gupta, Anshuman
2025-04-01 15:32 ` [PATCH 07/12] drm/xe/vrsr: Enable VRSR on default VGA boot device Anshuman Gupta
2025-04-01 15:32 ` [PATCH 08/12] drm/xe: Add PCIe ACPI Aux Power notifier Anshuman Gupta
2025-04-01 15:32 ` [PATCH 09/12] drm/xe/vrsr: Refactor d3cold.allowed to a enum Anshuman Gupta
2025-04-01 15:32 ` [PATCH 10/12] drm/xe/pm: D3Cold target state Anshuman Gupta
2025-04-02 10:28 ` [10/12] " Poosa, Karthik
2025-04-01 15:32 ` [PATCH 11/12] drm/xe/vrsr: Enable VRSR Anshuman Gupta
2025-04-01 15:32 ` [PATCH 12/12] drm/xe/vrsr: Introduce a debugfs node named vrsr_capable Anshuman Gupta
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=20250401182545.GA1675819@bhelgaas \
--to=helgaas@kernel.org \
--cc=anshuman.gupta@intel.com \
--cc=badal.nilawar@intel.com \
--cc=bhelgaas@google.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lucas.demarchi@intel.com \
--cc=rafael@kernel.org \
--cc=rodrigo.vivi@intel.com \
--cc=uma.shankar@intel.com \
--cc=varun.gupta@intel.com \
--cc=ville.syrjala@linux.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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox