From: "Piórkowski, Piotr" <piotr.piorkowski@intel.com>
To: <igt-dev@lists.freedesktop.org>
Cc: "Piotr Piórkowski" <piotr.piorkowski@intel.com>
Subject: [PATCH v1 4/4] tests/sriov_pci_config: Add optional capability checks
Date: Wed, 16 Sep 2026 13:52:01 +0200 [thread overview]
Message-ID: <20260916115201.1973752-5-piotr.piorkowski@intel.com> (raw)
In-Reply-To: <20260916115201.1973752-1-piotr.piorkowski@intel.com>
From: Piotr Piórkowski <piotr.piorkowski@intel.com>
Add subtests for the optional Power Management, Advanced Error
Reporting, and Address Translation Service capabilities.
Skip an optional-capability subtest when the capability is not exposed
by the VF.
Validate the VF ROZ fields required by the SR-IOV specification,
including Power Management Data Select/Data, AER status/mask/severity
fields, and ATS Queue Depth/STU.
Signed-off-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
Assisted-by: GPT-5.6 Luna
---
tests/sriov_pci_config.c | 118 +++++++++++++++++++++++++++++++++++++++
1 file changed, 118 insertions(+)
diff --git a/tests/sriov_pci_config.c b/tests/sriov_pci_config.c
index 9f8fd9fb50..590a9cd7e5 100644
--- a/tests/sriov_pci_config.c
+++ b/tests/sriov_pci_config.c
@@ -38,6 +38,21 @@
* Description: Validate that the Current De-emphasis Level field in Link
* Status 2 is RsvdZ and therefore reads as zero for PCIe Capability Version 2
* and later.
+ *
+ * SUBTEST: vf-power-management-capability
+ * Description: Validate that Data Select in Power Management Control and
+ * Power Management Data are ROZ and therefore read as zero when the optional
+ * Power Management capability is present.
+ *
+ * SUBTEST: vf-advanced-error-reporting
+ * Description: Validate that the specified ROZ bits in AER Uncorrectable
+ * Error Status, Mask, and Severity, and Correctable Error Status read as zero
+ * when the optional AER capability is present.
+ *
+ * SUBTEST: vf-ats-capability
+ * Description: Validate that ATS Queue Depth and the Smallest Translation Unit
+ * (STU) are ROZ and therefore read as zero when the optional ATS capability
+ * is present.
*/
IGT_TEST_DESCRIPTION("Validate PCI configuration fields required for SR-IOV, "
@@ -183,6 +198,88 @@ static void check_vf_pcie_capabilities_2(const uint8_t *config)
lnksta2);
}
+static int get_optional_cap(const uint8_t *config, uint8_t cap_id, const char *name)
+{
+ int cap = igt_pci_config_raw_find_cap_offset(config, cap_id);
+
+ igt_assert_f(cap >= 0, "Invalid VF PCI capability list (%d)\n", cap);
+ if (!cap)
+ skip_vf_test(name);
+
+ return cap;
+}
+
+static int get_optional_ext_cap(const uint8_t *config, uint16_t cap_id, const char *name)
+{
+ int cap = igt_pci_config_raw_find_ext_cap_offset(config, cap_id);
+
+ igt_assert_f(cap >= 0, "Invalid VF extended capability list (%d)\n", cap);
+ if (!cap)
+ skip_vf_test(name);
+
+ return cap;
+}
+
+static void check_vf_power_management_capability(const uint8_t *config)
+{
+ int pm_cap = get_optional_cap(config, PCI_CAP_ID_PM,
+ "Power Management capability is not present");
+ uint16_t pm_ctrl = igt_pci_config_raw_read_u16(config, pm_cap + PCI_PM_CTRL);
+ uint8_t pm_data = config[pm_cap + PCI_PM_DATA];
+
+ igt_info("Checking optional Power Management capability\n");
+ igt_assert_f(!(pm_ctrl & PCI_PM_CTRL_DATA_SEL),
+ "Power Management Control: Data Select must be zero (0x%04x)\n", pm_ctrl);
+ igt_assert_f(!pm_data, "Power Management Data: expected 0x00, got 0x%02x\n", pm_data);
+}
+
+static void check_vf_advanced_error_reporting(const uint8_t *config)
+{
+ const uint32_t uncor_roz = PCI_ERR_UNCOR_DLP | PCI_ERR_UNCOR_SURPDN |
+ PCI_ERR_UNCOR_FCP | PCI_ERR_UNCOR_RO |
+ PCI_ERR_UNCOR_MALF_TLP | PCI_ERR_UNCOR_ECRC;
+ const uint32_t cor_roz = PCI_ERR_COR_RCVR | PCI_ERR_COR_BAD_TLP |
+ PCI_ERR_COR_REP_ROLL | PCI_ERR_COR_REP_TIMER;
+ int aer_cap = get_optional_ext_cap(config, PCI_EXT_CAP_ID_ERR,
+ "Advanced Error Reporting capability is not present");
+ uint32_t uncor_status = igt_pci_config_raw_read_u32(config,
+ aer_cap + PCI_ERR_UNCOR_STATUS);
+ uint32_t uncor_mask = igt_pci_config_raw_read_u32(config,
+ aer_cap + PCI_ERR_UNCOR_MASK);
+ uint32_t uncor_severity = igt_pci_config_raw_read_u32(config,
+ aer_cap + PCI_ERR_UNCOR_SEVER);
+ uint32_t cor_status = igt_pci_config_raw_read_u32(config,
+ aer_cap + PCI_ERR_COR_STATUS);
+
+ igt_info("Checking optional Advanced Error Reporting capability\n");
+ igt_assert_f(!(uncor_status & uncor_roz),
+ "AER Uncorrectable Error Status: VF ROZ bits are set (0x%08x)\n",
+ uncor_status);
+ igt_assert_f(!(uncor_mask & uncor_roz),
+ "AER Uncorrectable Error Mask: VF ROZ bits are set (0x%08x)\n",
+ uncor_mask);
+ igt_assert_f(!(uncor_severity & uncor_roz),
+ "AER Uncorrectable Error Severity: VF ROZ bits are set (0x%08x)\n",
+ uncor_severity);
+ igt_assert_f(!(cor_status & cor_roz),
+ "AER Correctable Error Status: VF ROZ bits are set (0x%08x)\n",
+ cor_status);
+}
+
+static void check_vf_ats_capability(const uint8_t *config)
+{
+ int ats_cap = get_optional_ext_cap(config, PCI_EXT_CAP_ID_ATS,
+ "ATS capability is not present");
+ uint16_t ats_capability = igt_pci_config_raw_read_u16(config, ats_cap + PCI_ATS_CAP);
+ uint16_t ats_control = igt_pci_config_raw_read_u16(config, ats_cap + PCI_ATS_CTRL);
+
+ igt_info("Checking optional ATS capability\n");
+ igt_assert_f(!(ats_capability & PCI_ATS_CAP_QDEP),
+ "ATS Capability: Queue Depth must be zero (0x%04x)\n", ats_capability);
+ igt_assert_f(!(ats_control & PCI_ATS_CTRL_STU),
+ "ATS Control: STU must be zero (0x%04x)\n", ats_control);
+}
+
int igt_main()
{
igt_fixture() {
@@ -218,6 +315,27 @@ int igt_main()
with_vf_config(check_vf_pcie_capabilities_2);
}
+ igt_describe("Validate that Data Select in Power Management Control and "
+ "Power Management Data are ROZ and therefore read as zero when the "
+ "optional Power Management capability is present");
+ igt_subtest("vf-power-management-capability") {
+ with_vf_config(check_vf_power_management_capability);
+ }
+
+ igt_describe("Validate that the specified ROZ bits in AER Uncorrectable "
+ "Error Status, Mask, and Severity, and Correctable Error Status "
+ "read as zero when the optional AER capability is present");
+ igt_subtest("vf-advanced-error-reporting") {
+ with_vf_config(check_vf_advanced_error_reporting);
+ }
+
+ igt_describe("Validate that ATS Queue Depth and the Smallest Translation Unit "
+ "(STU) are ROZ and therefore read as zero when the optional ATS "
+ "capability is present");
+ igt_subtest("vf-ats-capability") {
+ with_vf_config(check_vf_ats_capability);
+ }
+
igt_fixture() {
igt_abort_on_f(pf_fd < 0, "Device is not accessible\n");
igt_sriov_disable_vfs(pf_fd);
--
2.34.1
next prev parent reply other threads:[~2026-09-16 11:55 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-16 11:51 [PATCH v1 0/4] Add PCI configuration tests for SR-IOV VFs Piórkowski, Piotr
2026-09-16 11:51 ` [PATCH v1 1/4] lib/igt_pci: Add raw configuration space helpers Piórkowski, Piotr
2026-09-17 15:33 ` [v1,1/4] " Laguna, Lukasz
2026-09-16 11:51 ` [PATCH v1 2/4] lib/igt_pci: Add PCI extended capability lookup Piórkowski, Piotr
2026-09-17 15:36 ` [v1,2/4] " Laguna, Lukasz
2026-09-16 11:52 ` [PATCH v1 3/4] tests/sriov_pci_config: Add VF core config checks Piórkowski, Piotr
2026-09-17 15:38 ` [v1,3/4] " Laguna, Lukasz
2026-09-16 11:52 ` Piórkowski, Piotr [this message]
2026-09-17 15:47 ` [v1,4/4] tests/sriov_pci_config: Add optional capability checks Laguna, Lukasz
2026-09-16 19:24 ` ✓ Xe.CI.BAT: success for Add PCI configuration tests for SR-IOV VFs Patchwork
2026-09-16 20:10 ` ✓ i915.CI.BAT: " Patchwork
2026-09-16 22:49 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-09-17 4:13 ` ✓ i915.CI.Full: success " 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=20260916115201.1973752-5-piotr.piorkowski@intel.com \
--to=piotr.piorkowski@intel.com \
--cc=igt-dev@lists.freedesktop.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