]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/xe/kunit: Introduce xe_pci_fake_data_desc()
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Fri, 29 Aug 2025 17:19:18 +0000 (19:19 +0200)
committerMichal Wajdeczko <michal.wajdeczko@intel.com>
Fri, 5 Sep 2025 10:57:25 +0000 (12:57 +0200)
We already use struct xe_pci_fake_data to provide custom config of
the fake PCI device and soon we will be using this struct also as
direct parameter for the parameterized Xe KUnit tests.

Add function to generate description based on that config data.

For platform or subplatform name lookup pciidlist which already
have definitions of all supported platforms.

Examples:

  TIGERLAKE
  TIGERLAKE A0
  TIGERLAKE SR-IOV PF
  ...
  PANTHERLAKE 30.00(Xe3_LPG) 30.00(Xe3_LPM)
  PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
  PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0 SR-IOV VF

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://lore.kernel.org/r/20250829171922.572-4-michal.wajdeczko@intel.com
drivers/gpu/drm/xe/tests/xe_pci.c
drivers/gpu/drm/xe/tests/xe_pci_test.h

index bb0ce0dc9b31b59e9336a2c2bd658700c432dcac..a8b35439131fb4673e98e18b79586ad7fd7f8d09 100644 (file)
 #include <kunit/test-bug.h>
 #include <kunit/visibility.h>
 
+static const struct xe_device_desc *lookup_desc(enum xe_platform p)
+{
+       const struct xe_device_desc *desc;
+       const struct pci_device_id *ids;
+
+       for (ids = pciidlist; ids->driver_data; ids++) {
+               desc = (const void *)ids->driver_data;
+               if (desc->platform == p)
+                       return desc;
+       }
+       return NULL;
+}
+
+static const struct xe_subplatform_desc *lookup_sub_desc(enum xe_platform p, enum xe_subplatform s)
+{
+       const struct xe_device_desc *desc = lookup_desc(p);
+       const struct xe_subplatform_desc *spd;
+
+       if (desc && desc->subplatforms)
+               for (spd = desc->subplatforms; spd->subplatform; spd++)
+                       if (spd->subplatform == s)
+                               return spd;
+       return NULL;
+}
+
+static const char *lookup_platform_name(enum xe_platform p)
+{
+       const struct xe_device_desc *desc = lookup_desc(p);
+
+       return desc ? desc->platform_name : "INVALID";
+}
+
+static const char *__lookup_subplatform_name(enum xe_platform p, enum xe_subplatform s)
+{
+       const struct xe_subplatform_desc *desc = lookup_sub_desc(p, s);
+
+       return desc ? desc->name : "INVALID";
+}
+
+static const char *lookup_subplatform_name(enum xe_platform p, enum xe_subplatform s)
+{
+       return s == XE_SUBPLATFORM_NONE ? "" : __lookup_subplatform_name(p, s);
+}
+
+static const char *subplatform_prefix(enum xe_subplatform s)
+{
+       return s == XE_SUBPLATFORM_NONE ? "" : " ";
+}
+
+static const char *step_prefix(enum xe_step step)
+{
+       return step == STEP_NONE ? "" : " ";
+}
+
+static const char *step_name(enum xe_step step)
+{
+       return step == STEP_NONE ? "" : xe_step_name(step);
+}
+
+static const char *sriov_prefix(enum xe_sriov_mode mode)
+{
+       return mode <= XE_SRIOV_MODE_NONE ? "" : " ";
+}
+
+static const char *sriov_name(enum xe_sriov_mode mode)
+{
+       return mode <= XE_SRIOV_MODE_NONE ? "" : xe_sriov_mode_to_string(mode);
+}
+
+static const char *lookup_graphics_name(unsigned int verx100)
+{
+       const struct xe_ip *ip = find_graphics_ip(verx100);
+
+       return ip ? ip->name : "";
+}
+
+static const char *lookup_media_name(unsigned int verx100)
+{
+       const struct xe_ip *ip = find_media_ip(verx100);
+
+       return ip ? ip->name : "";
+}
+
+/**
+ * xe_pci_fake_data_desc - Describe struct xe_pci_fake_data parameter
+ * @param: the &struct xe_pci_fake_data parameter to describe
+ * @desc: output buffer with minimum size of KUNIT_PARAM_DESC_SIZE
+ *
+ * This function prepares description of the struct xe_pci_fake_data parameter.
+ *
+ * It is tailored for use in parameterized KUnit tests where parameter generator
+ * is based on the struct xe_pci_fake_data arrays.
+ */
+void xe_pci_fake_data_desc(const struct xe_pci_fake_data *param, char *desc)
+{
+       if (param->graphics_verx100 || param->media_verx100)
+               snprintf(desc, KUNIT_PARAM_DESC_SIZE, "%s%s%s %u.%02u(%s)%s%s %u.%02u(%s)%s%s%s%s",
+                        lookup_platform_name(param->platform),
+                        subplatform_prefix(param->subplatform),
+                        lookup_subplatform_name(param->platform, param->subplatform),
+                        param->graphics_verx100 / 100, param->graphics_verx100 % 100,
+                        lookup_graphics_name(param->graphics_verx100),
+                        step_prefix(param->step.graphics), step_name(param->step.graphics),
+                        param->media_verx100 / 100, param->media_verx100 % 100,
+                        lookup_media_name(param->media_verx100),
+                        step_prefix(param->step.media), step_name(param->step.media),
+                        sriov_prefix(param->sriov_mode), sriov_name(param->sriov_mode));
+       else
+               snprintf(desc, KUNIT_PARAM_DESC_SIZE, "%s%s%s%s%s%s%s",
+                        lookup_platform_name(param->platform),
+                        subplatform_prefix(param->subplatform),
+                        lookup_subplatform_name(param->platform, param->subplatform),
+                        step_prefix(param->step.graphics), step_name(param->step.graphics),
+                        sriov_prefix(param->sriov_mode), sriov_name(param->sriov_mode));
+}
+EXPORT_SYMBOL_IF_KUNIT(xe_pci_fake_data_desc);
+
 static void xe_ip_kunit_desc(const struct xe_ip *param, char *desc)
 {
        snprintf(desc, KUNIT_PARAM_DESC_SIZE, "%u.%02u %s",
index 32452bd65bff9249c32df87aa6221957a7f08e14..1195839999ab074aaca69bd8583eb7543d7b7dfd 100644 (file)
@@ -24,6 +24,7 @@ struct xe_pci_fake_data {
 };
 
 int xe_pci_fake_device_init(struct xe_device *xe);
+void xe_pci_fake_data_desc(const struct xe_pci_fake_data *param, char *desc);
 
 const void *xe_pci_graphics_ip_gen_param(const void *prev, char *desc);
 const void *xe_pci_media_ip_gen_param(const void *prev, char *desc);