[PATCH] tests/intel/xe_configfs: Add i2c adapter check in survivability mode
Sk Anirban
sk.anirban at intel.com
Mon Aug 4 19:24:23 UTC 2025
Add i2c adapter presence check in survivability mode to ensure
the Add-In Management Controller (AMC) can receive firmware updates
when the device is in survivability mode.
Signed-off-by: Sk Anirban <sk.anirban at intel.com>
---
tests/intel/xe_configfs.c | 50 ++++++++++++++++++++++++++++++++++-----
1 file changed, 44 insertions(+), 6 deletions(-)
diff --git a/tests/intel/xe_configfs.c b/tests/intel/xe_configfs.c
index 5c65cd01d..a3af84b6a 100644
--- a/tests/intel/xe_configfs.c
+++ b/tests/intel/xe_configfs.c
@@ -2,7 +2,9 @@
/*
* Copyright © 2025 Intel Corporation
*/
+#include <dirent.h>
#include <limits.h>
+#include <fcntl.h>
#include "igt.h"
#include "igt_configfs.h"
@@ -24,6 +26,34 @@
static char bus_addr[NAME_MAX];
+static int find_i2c_adapter(struct pci_device *pci_xe)
+{
+ char device_path[PATH_MAX];
+ struct dirent *dirent;
+ int i2c_adapter = -1;
+ DIR *device_dir;
+
+ igt_require(igt_kmod_load("i2c-dev", NULL) == 0);
+
+ snprintf(device_path, sizeof(device_path), "/sys/bus/pci/devices/%s/%s.%hu", bus_addr,
+ "i2c_designware", (pci_xe->bus << 8) | (pci_xe->dev));
+ device_dir = opendir(device_path);
+
+ if (!device_dir)
+ return -1;
+
+ while ((dirent = readdir(device_dir))) {
+ if (strncmp(dirent->d_name, "i2c-", 4) == 0) {
+ sscanf(dirent->d_name, "i2c-%d", &i2c_adapter);
+ closedir(device_dir);
+ return i2c_adapter;
+ }
+ }
+
+ closedir(device_dir);
+ return i2c_adapter;
+}
+
static void restore(int sig)
{
/* Restore after survivability mode */
@@ -42,10 +72,12 @@ static void set_survivability_mode(int configfs_device_fd, bool value)
* SUBTEST: survivability-mode
* Description: Validate survivability mode by setting configfs
*/
-static void test_survivability_mode(int configfs_device_fd)
+static void test_survivability_mode(int configfs_device_fd, struct pci_device *pci_xe)
{
char path[PATH_MAX];
- int fd;
+ int file_fd, i2c_adapter;
+
+ i2c_adapter = find_i2c_adapter(pci_xe);
/* Enable survivability mode */
set_survivability_mode(configfs_device_fd, true);
@@ -53,9 +85,13 @@ static void test_survivability_mode(int configfs_device_fd)
/* check presence of survivability mode sysfs */
snprintf(path, PATH_MAX, "/sys/bus/pci/devices/%s/survivability_mode", bus_addr);
- fd = open(path, O_RDONLY);
- igt_assert_f(fd >= 0, "Survivability mode not set\n");
- close(fd);
+ file_fd = open(path, O_RDONLY);
+ igt_assert_f(file_fd >= 0, "Survivability mode not set\n");
+
+ if (i2c_adapter >= 0)
+ igt_assert_f(find_i2c_adapter(pci_xe) >= 0, "Failed to find i2c adapter in survivability mode\n");
+
+ close(file_fd);
}
/**
@@ -120,9 +156,11 @@ static int create_device_configfs_group(int configfs_fd, int fd)
igt_main
{
int fd, configfs_fd, configfs_device_fd;
+ struct pci_device *pci_xe;
igt_fixture {
fd = drm_open_driver(DRIVER_XE);
+ pci_xe = igt_device_get_pci_device(fd);
configfs_fd = igt_configfs_open("xe");
igt_require(configfs_fd != -1);
configfs_device_fd = create_device_configfs_group(configfs_fd, fd);
@@ -132,7 +170,7 @@ igt_main
igt_subtest("survivability-mode") {
igt_require(IS_BATTLEMAGE(intel_get_drm_devid(fd)));
igt_install_exit_handler(restore);
- test_survivability_mode(configfs_device_fd);
+ test_survivability_mode(configfs_device_fd, pci_xe);
}
igt_describe("Validate engines_allowed with invalid options");
--
2.43.0
More information about the igt-dev
mailing list