From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
Thatchanamurthy Satish <Satish.Thatchanamurt@Dell.com>
Subject: [PATCH v1] PCI/EDR: Align EDR implementation with PCI firmware r3.3 spec
Date: Wed, 1 May 2024 02:25:43 +0000 [thread overview]
Message-ID: <20240501022543.1626025-1-sathyanarayanan.kuppuswamy@linux.intel.com> (raw)
During the Error Disconnect Recover (EDR) spec transition from r3.2 ECN
to PCI firmware spec r3.3, improvements were made to definitions of
EDR_PORT_DPC_ENABLE_DSM (0x0C) and EDR_PORT_LOCATE_DSM(0x0D) _DSMs.
Specifically,
* EDR_PORT_DPC_ENABLE_DSM _DSM version changed from 5 to 6, and
arg4 is now a package type instead of an integer in version 5.
* EDR_PORT_LOCATE_DSM _DSM uses BIT(31) to return the status of the
operation.
Ensure _DSM implementation aligns with PCI firmware r3.3 spec
recommendation. More details about the EDR_PORT_DPC_ENABLE_DSM and
EDR_PORT_LOCATE_DSM _DSMs can be found in PCI firmware specification,
r3.3, sec 4.6.12 and sec 4.6.13.
While at it, fix a typo in EDR_PORT_LOCATE_DSM comments.
Fixes: ac1c8e35a326 ("PCI/DPC: Add Error Disconnect Recover (EDR) support")
Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
---
drivers/pci/pcie/edr.c | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/drivers/pci/pcie/edr.c b/drivers/pci/pcie/edr.c
index 5f4914d313a1..fea098e22e3e 100644
--- a/drivers/pci/pcie/edr.c
+++ b/drivers/pci/pcie/edr.c
@@ -35,7 +35,7 @@ static int acpi_enable_dpc(struct pci_dev *pdev)
* Behavior when calling unsupported _DSM functions is undefined,
* so check whether EDR_PORT_DPC_ENABLE_DSM is supported.
*/
- if (!acpi_check_dsm(adev->handle, &pci_acpi_dsm_guid, 5,
+ if (!acpi_check_dsm(adev->handle, &pci_acpi_dsm_guid, 6,
1ULL << EDR_PORT_DPC_ENABLE_DSM))
return 0;
@@ -47,11 +47,11 @@ static int acpi_enable_dpc(struct pci_dev *pdev)
argv4.package.elements = &req;
/*
- * Per Downstream Port Containment Related Enhancements ECN to PCI
- * Firmware Specification r3.2, sec 4.6.12, EDR_PORT_DPC_ENABLE_DSM is
- * optional. Return success if it's not implemented.
+ * Per PCI Firmware Specification r3.3, sec 4.6.12,
+ * EDR_PORT_DPC_ENABLE_DSM is optional. Return success if it's not
+ * implemented.
*/
- obj = acpi_evaluate_dsm(adev->handle, &pci_acpi_dsm_guid, 5,
+ obj = acpi_evaluate_dsm(adev->handle, &pci_acpi_dsm_guid, 6,
EDR_PORT_DPC_ENABLE_DSM, &argv4);
if (!obj)
return 0;
@@ -86,7 +86,7 @@ static struct pci_dev *acpi_dpc_port_get(struct pci_dev *pdev)
/*
* Behavior when calling unsupported _DSM functions is undefined,
- * so check whether EDR_PORT_DPC_ENABLE_DSM is supported.
+ * so check whether EDR_PORT_LOCATE_DSM is supported.
*/
if (!acpi_check_dsm(adev->handle, &pci_acpi_dsm_guid, 5,
1ULL << EDR_PORT_LOCATE_DSM))
@@ -103,6 +103,17 @@ static struct pci_dev *acpi_dpc_port_get(struct pci_dev *pdev)
return NULL;
}
+ /*
+ * Per PCI Firmware Specification r3.3, sec 4.6.13, bit 31 represents
+ * the success/failure of the operation. If bit 31 is set, the operation
+ * is failed.
+ */
+ if (obj->integer.value & BIT(31)) {
+ ACPI_FREE(obj);
+ pci_err(pdev, "Locate Port _DSM failed\n");
+ return NULL;
+ }
+
/*
* Firmware returns DPC port BDF details in following format:
* 15:8 = bus
--
2.25.1
next reply other threads:[~2024-05-01 2:27 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-01 2:25 Kuppuswamy Sathyanarayanan [this message]
2024-05-01 21:50 ` [PATCH v1] PCI/EDR: Align EDR implementation with PCI firmware r3.3 spec Bjorn Helgaas
2024-05-01 22:07 ` Kuppuswamy Sathyanarayanan
2024-05-02 22:01 ` Thatchanamurthy, Satish
2024-05-08 20:14 ` Bjorn Helgaas
2024-05-08 20:41 ` Kuppuswamy Sathyanarayanan
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=20240501022543.1626025-1-sathyanarayanan.kuppuswamy@linux.intel.com \
--to=sathyanarayanan.kuppuswamy@linux.intel.com \
--cc=Satish.Thatchanamurt@Dell.com \
--cc=bhelgaas@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
/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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).