From: Sathyanarayanan Kuppuswamy <sathyanarayanan.kuppuswamy@linux.intel.com>
To: Badal Nilawar <badal.nilawar@intel.com>,
intel-xe@lists.freedesktop.org, linux-acpi@vger.kernel.org,
linux-pci@vger.kernel.org
Cc: anshuman.gupta@intel.com, rafael@kernel.org, lenb@kernel.org,
bhelgaas@google.com, ilpo.jarvinen@linux.intel.com,
lucas.demarchi@intel.com, rodrigo.vivi@intel.com,
varun.gupta@intel.com, ville.syrjala@linux.intel.com,
uma.shankar@intel.com
Subject: Re: [PATCH v4 02/11] PCI/ACPI: Per root port allow one Aux power limit request
Date: Thu, 29 May 2025 14:41:01 -0700 [thread overview]
Message-ID: <98fc8402-0bda-4333-8407-75c7a6472375@linux.intel.com> (raw)
In-Reply-To: <20250529111654.3140766-3-badal.nilawar@intel.com>
On 5/29/25 4:16 AM, Badal Nilawar wrote:
> For given root port allow one Aux power limit request.
>
> Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> Cc: Anshuman Gupta <anshuman.gupta@intel.com>
> Signed-off-by: Badal Nilawar <badal.nilawar@intel.com>
> ---
> drivers/acpi/scan.c | 1 +
> drivers/pci/pci-acpi.c | 25 ++++++++++++++++++++++++-
> include/acpi/acpi_bus.h | 2 ++
> 3 files changed, 27 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
> index fb1fe9f3b1a3..9ae7be9db01a 100644
> --- a/drivers/acpi/scan.c
> +++ b/drivers/acpi/scan.c
> @@ -745,6 +745,7 @@ int acpi_device_add(struct acpi_device *device)
> INIT_LIST_HEAD(&device->physical_node_list);
> INIT_LIST_HEAD(&device->del_list);
> mutex_init(&device->physical_node_lock);
> + mutex_init(&device->power.aux_pwr_lock);
>
> mutex_lock(&acpi_device_lock);
>
> diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
> index 87f30910a5f1..d33efba4ca94 100644
> --- a/drivers/pci/pci-acpi.c
> +++ b/drivers/pci/pci-acpi.c
> @@ -1451,6 +1451,7 @@ int pci_acpi_request_d3cold_aux_power(struct pci_dev *dev, u32 requested_power,
> union acpi_object *out_obj;
> acpi_handle handle;
> int result, ret = -EINVAL;
> + struct acpi_device *adev;
>
> if (!dev || !retry_interval)
> return -EINVAL;
> @@ -1464,11 +1465,27 @@ int pci_acpi_request_d3cold_aux_power(struct pci_dev *dev, u32 requested_power,
> return -ENODEV;
> }
>
> + adev = ACPI_COMPANION(&dev->dev);
> + if (!adev)
> + return -EINVAL;
> +
> + mutex_lock(&adev->power.aux_pwr_lock);
> +
> + /* Check if aux power already granted */
> + if (adev->power.aux_power_limit) {
> + pci_info(dev, "D3cold Aux Power request already granted: %u mW\n",
> + adev->power.aux_power_limit);
> + mutex_unlock(&adev->power.aux_pwr_lock);
> + return -EPERM;
> + }
> +
> 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)
> + if (!out_obj) {
> + mutex_unlock(&adev->power.aux_pwr_lock);
> return -EINVAL;
> + }
>
> result = out_obj->integer.value;
> if (retry_interval)
> @@ -1478,14 +1495,17 @@ int pci_acpi_request_d3cold_aux_power(struct pci_dev *dev, u32 requested_power,
> case 0x0:
> pci_dbg(dev, "D3cold Aux Power %u mW request denied\n",
> requested_power);
> + adev->power.aux_power_limit = 0;
> break;
> case 0x1:
> pci_info(dev, "D3cold Aux Power request granted: %u mW\n",
> requested_power);
> + adev->power.aux_power_limit = requested_power;
> ret = 0;
> break;
> case 0x2:
> pci_info(dev, "D3cold Aux Power: Main power won't be removed\n");
> + adev->power.aux_power_limit = 0;
> ret = -EBUSY;
> break;
> default:
> @@ -1500,9 +1520,12 @@ int pci_acpi_request_d3cold_aux_power(struct pci_dev *dev, u32 requested_power,
> pci_err(dev, "D3cold Aux Power: Reserved or unsupported response: 0x%x\n",
> result);
> }
> + adev->power.aux_power_limit = 0;
> break;
> }
>
> + mutex_unlock(&adev->power.aux_pwr_lock);
> +
> ACPI_FREE(out_obj);
> return ret;
> }
> diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
> index aad1a95e6863..c4ce3d84be00 100644
> --- a/include/acpi/acpi_bus.h
> +++ b/include/acpi/acpi_bus.h
> @@ -294,6 +294,8 @@ struct acpi_device_power {
> struct acpi_device_power_flags flags;
> struct acpi_device_power_state states[ACPI_D_STATE_COUNT]; /* Power states (D0-D3Cold) */
> u8 state_for_enumeration; /* Deepest power state for enumeration */
> + u32 aux_power_limit; /* aux power limit granted by bios */
> + struct mutex aux_pwr_lock; /* prevent concurrent aux power limit requests */
Do you need a new lock ? Is it possible to reuse existing mutex like device_lock()?
> };
>
> struct acpi_dep_data {
--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer
next prev parent reply other threads:[~2025-05-29 21:41 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-29 11:16 [PATCH v4 00/11] VRAM Self Refresh Badal Nilawar
2025-05-29 11:16 ` [PATCH v4 01/11] PCI/ACPI: Add D3cold Aux Power Limit_DSM method Badal Nilawar
2025-05-29 21:36 ` Sathyanarayanan Kuppuswamy
2025-09-02 6:04 ` Nilawar, Badal
2025-07-02 11:08 ` Rafael J. Wysocki
2025-09-02 6:17 ` Nilawar, Badal
2025-09-02 8:10 ` Nilawar, Badal
2025-09-04 18:30 ` Bjorn Helgaas
2025-09-30 6:11 ` Nilawar, Badal
2025-05-29 11:16 ` [PATCH v4 02/11] PCI/ACPI: Per root port allow one Aux power limit request Badal Nilawar
2025-05-29 21:41 ` Sathyanarayanan Kuppuswamy [this message]
2025-07-02 11:11 ` Rafael J. Wysocki
2025-07-02 14:03 ` Sathyanarayanan Kuppuswamy
2025-07-02 11:21 ` Rafael J. Wysocki
2025-09-02 8:43 ` Nilawar, Badal
2025-07-02 11:28 ` Ilpo Järvinen
2025-09-02 8:53 ` Nilawar, Badal
2025-09-04 18:36 ` Bjorn Helgaas
2025-09-30 9:36 ` Nilawar, Badal
2025-05-29 11:16 ` [PATCH v4 03/11] PCI/ACPI: Add PERST# Assertion Delay _DSM method Badal Nilawar
2025-05-29 21:57 ` Sathyanarayanan Kuppuswamy
2025-07-02 11:25 ` Rafael J. Wysocki
2025-09-02 8:22 ` Nilawar, Badal
2025-09-04 18:44 ` Bjorn Helgaas
2025-09-30 9:39 ` Nilawar, Badal
2025-05-29 11:16 ` [PATCH v4 04/11] drm/xe/vrsr: Introduce flag has_vrsr Badal Nilawar
2025-06-06 9:38 ` [v4,04/11] " Poosa, Karthik
2025-05-29 11:16 ` [PATCH v4 05/11] drm/xe/vrsr: Detect VRSR Capability Badal Nilawar
2025-05-29 11:16 ` [PATCH v4 06/11] drm/xe/vrsr: Initialize VRSR feature Badal Nilawar
2025-06-24 10:28 ` [v4,06/11] " Poosa, Karthik
2025-09-03 13:39 ` Nilawar, Badal
2025-09-04 13:42 ` Poosa, Karthik
2025-05-29 11:16 ` [PATCH v4 07/11] drm/xe/vrsr: Enable VRSR on default VGA boot device Badal Nilawar
2025-06-06 13:07 ` Jani Nikula
2025-09-03 14:18 ` Nilawar, Badal
2025-05-29 11:16 ` [PATCH v4 08/11] drm/xe/vrsr: Refactor d3cold.allowed to a enum Badal Nilawar
2025-06-24 10:41 ` [v4,08/11] " Poosa, Karthik
2025-05-29 11:16 ` [PATCH v4 09/11] drm/xe/pm: D3Cold target state Badal Nilawar
2025-06-24 11:10 ` [v4,09/11] " Poosa, Karthik
2025-05-29 11:16 ` [PATCH v4 10/11] drm/xe/vrsr: Enable VRSR Badal Nilawar
2025-06-24 11:45 ` [v4,10/11] " Poosa, Karthik
2025-09-03 14:16 ` Nilawar, Badal
2025-09-04 6:01 ` Poosa, Karthik
2025-05-29 11:16 ` [PATCH v4 11/11] drm/xe/vrsr: Introduce a debugfs node named vrsr_capable Badal Nilawar
2025-06-24 11:14 ` [v4,11/11] " Poosa, Karthik
2025-05-29 11:36 ` ✗ CI.Patch_applied: failure for VRAM Self Refresh (rev4) Patchwork
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=98fc8402-0bda-4333-8407-75c7a6472375@linux.intel.com \
--to=sathyanarayanan.kuppuswamy@linux.intel.com \
--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 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.