Commit 95ec8c1d authored by Riana Tauro's avatar Riana Tauro Committed by Rodrigo Vivi

drm/xe/pm: add debug logs for D3cold

add additional debug logs for PME# capability and
presence of ACPI _PR3 resources. This is to identify
the reason why the card is not capable of D3cold.

No functional changes
Signed-off-by: default avatarRiana Tauro <riana.tauro@intel.com>
Reviewed-by: default avatarBadal Nilawar <badal.nilawar@intel.com>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240206055917.2629027-1-riana.tauro@intel.com
parent 404669db
...@@ -125,17 +125,26 @@ int xe_pm_resume(struct xe_device *xe) ...@@ -125,17 +125,26 @@ int xe_pm_resume(struct xe_device *xe)
return 0; return 0;
} }
static bool xe_pm_pci_d3cold_capable(struct pci_dev *pdev) static bool xe_pm_pci_d3cold_capable(struct xe_device *xe)
{ {
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
struct pci_dev *root_pdev; struct pci_dev *root_pdev;
root_pdev = pcie_find_root_port(pdev); root_pdev = pcie_find_root_port(pdev);
if (!root_pdev) if (!root_pdev)
return false; return false;
/* D3Cold requires PME capability and _PR3 power resource */ /* D3Cold requires PME capability */
if (!pci_pme_capable(root_pdev, PCI_D3cold) || !pci_pr3_present(root_pdev)) if (!pci_pme_capable(root_pdev, PCI_D3cold)) {
drm_dbg(&xe->drm, "d3cold: PME# not supported\n");
return false; return false;
}
/* D3Cold requires _PR3 power resource */
if (!pci_pr3_present(root_pdev)) {
drm_dbg(&xe->drm, "d3cold: ACPI _PR3 not present\n");
return false;
}
return true; return true;
} }
...@@ -171,15 +180,13 @@ void xe_pm_init_early(struct xe_device *xe) ...@@ -171,15 +180,13 @@ void xe_pm_init_early(struct xe_device *xe)
void xe_pm_init(struct xe_device *xe) void xe_pm_init(struct xe_device *xe)
{ {
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
/* For now suspend/resume is only allowed with GuC */ /* For now suspend/resume is only allowed with GuC */
if (!xe_device_uc_enabled(xe)) if (!xe_device_uc_enabled(xe))
return; return;
drmm_mutex_init(&xe->drm, &xe->d3cold.lock); drmm_mutex_init(&xe->drm, &xe->d3cold.lock);
xe->d3cold.capable = xe_pm_pci_d3cold_capable(pdev); xe->d3cold.capable = xe_pm_pci_d3cold_capable(xe);
if (xe->d3cold.capable) { if (xe->d3cold.capable) {
xe_device_sysfs_init(xe); xe_device_sysfs_init(xe);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment