Commit 6cad2285 authored by Lucas De Marchi's avatar Lucas De Marchi Committed by Rodrigo Vivi

drm/xe/kunit: Add stub to read_gmdid

Currently it's not possible to test the WAs for platforms using gmdid
since they don't have the IP information on the descriptor struct. In
order to allow that, add a stub function for read_gmdid() that is
activated when the test executes, replacing the iomap and read of the
real register.
Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20231129232807.1499826-5-lucas.demarchi@intel.com
Link: https://lore.kernel.org/r/20231205133954.2089546-3-lucas.demarchi@intel.comSigned-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 5b2a63b4
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <kunit/test-bug.h> #include <kunit/test-bug.h>
#include <kunit/test.h> #include <kunit/test.h>
#include <kunit/test-bug.h>
#include <kunit/visibility.h> #include <kunit/visibility.h>
struct kunit_test_data { struct kunit_test_data {
...@@ -107,6 +108,21 @@ void xe_call_for_each_media_ip(xe_media_fn xe_fn) ...@@ -107,6 +108,21 @@ void xe_call_for_each_media_ip(xe_media_fn xe_fn)
} }
EXPORT_SYMBOL_IF_KUNIT(xe_call_for_each_media_ip); EXPORT_SYMBOL_IF_KUNIT(xe_call_for_each_media_ip);
static void fake_read_gmdid(struct xe_device *xe, enum xe_gmdid_type type,
u32 *ver, u32 *revid)
{
struct kunit *test = kunit_get_current_test();
struct xe_pci_fake_data *data = test->priv;
if (type == GMDID_MEDIA) {
*ver = data->media_verx100;
*revid = xe_step_to_gmdid(data->media_step);
} else {
*ver = data->graphics_verx100;
*revid = xe_step_to_gmdid(data->graphics_step);
}
}
int xe_pci_fake_device_init(struct xe_device *xe) int xe_pci_fake_device_init(struct xe_device *xe)
{ {
struct kunit *test = kunit_get_current_test(); struct kunit *test = kunit_get_current_test();
...@@ -140,6 +156,8 @@ int xe_pci_fake_device_init(struct xe_device *xe) ...@@ -140,6 +156,8 @@ int xe_pci_fake_device_init(struct xe_device *xe)
return -ENODEV; return -ENODEV;
done: done:
kunit_activate_static_stub(test, read_gmdid, fake_read_gmdid);
xe_info_init_early(xe, desc, subplatform_desc); xe_info_init_early(xe, desc, subplatform_desc);
xe_info_init(xe, desc->graphics, desc->media); xe_info_init(xe, desc->graphics, desc->media);
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
#ifndef _XE_PCI_TEST_H_ #ifndef _XE_PCI_TEST_H_
#define _XE_PCI_TEST_H_ #define _XE_PCI_TEST_H_
#include <linux/types.h>
#include "xe_platform_types.h" #include "xe_platform_types.h"
struct xe_device; struct xe_device;
...@@ -23,6 +25,10 @@ void xe_call_for_each_media_ip(xe_media_fn xe_fn); ...@@ -23,6 +25,10 @@ void xe_call_for_each_media_ip(xe_media_fn xe_fn);
struct xe_pci_fake_data { struct xe_pci_fake_data {
enum xe_platform platform; enum xe_platform platform;
enum xe_subplatform subplatform; enum xe_subplatform subplatform;
u32 graphics_verx100;
u32 media_verx100;
u32 graphics_step;
u32 media_step;
}; };
int xe_pci_fake_device_init(struct xe_device *xe); int xe_pci_fake_device_init(struct xe_device *xe);
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "xe_pci.h" #include "xe_pci.h"
#include <kunit/static_stub.h>
#include <linux/device/driver.h> #include <linux/device/driver.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/pci.h> #include <linux/pci.h>
...@@ -456,6 +457,8 @@ static void read_gmdid(struct xe_device *xe, enum xe_gmdid_type type, u32 *ver, ...@@ -456,6 +457,8 @@ static void read_gmdid(struct xe_device *xe, enum xe_gmdid_type type, u32 *ver,
struct xe_reg gmdid_reg = GMD_ID; struct xe_reg gmdid_reg = GMD_ID;
u32 val; u32 val;
KUNIT_STATIC_STUB_REDIRECT(read_gmdid, xe, type, ver, revid);
if (type == GMDID_MEDIA) if (type == GMDID_MEDIA)
gmdid_reg.addr += MEDIA_GT_GSI_OFFSET; gmdid_reg.addr += MEDIA_GT_GSI_OFFSET;
......
...@@ -16,6 +16,8 @@ struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe); ...@@ -16,6 +16,8 @@ struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe);
struct xe_step_info xe_step_gmdid_get(struct xe_device *xe, struct xe_step_info xe_step_gmdid_get(struct xe_device *xe,
u32 graphics_gmdid_revid, u32 graphics_gmdid_revid,
u32 media_gmdid_revid); u32 media_gmdid_revid);
static inline u32 xe_step_to_gmdid(enum xe_step step) { return step - STEP_A0; }
const char *xe_step_name(enum xe_step step); const char *xe_step_name(enum xe_step step);
#endif #endif
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