diff options
author | Lucas De Marchi <lucas.demarchi@intel.com> | 2023-12-05 05:39:53 -0800 |
---|---|---|
committer | Rodrigo Vivi <rodrigo.vivi@intel.com> | 2023-12-21 11:45:24 -0500 |
commit | 6cad22853cb89da857ff636607dd0e9880172a43 (patch) | |
tree | ed744ba3f7384b670f82542d2b00a10f532e2471 /drivers/gpu | |
parent | 5b2a63b40d5620ce453f2a509334ae6feb7b884e (diff) | |
download | lwn-6cad22853cb89da857ff636607dd0e9880172a43.tar.gz lwn-6cad22853cb89da857ff636607dd0e9880172a43.zip |
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: Matt 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.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/xe/tests/xe_pci.c | 18 | ||||
-rw-r--r-- | drivers/gpu/drm/xe/tests/xe_pci_test.h | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/xe/xe_pci.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/xe/xe_step.h | 2 |
4 files changed, 29 insertions, 0 deletions
diff --git a/drivers/gpu/drm/xe/tests/xe_pci.c b/drivers/gpu/drm/xe/tests/xe_pci.c index b93cb1e96108..602793644f61 100644 --- a/drivers/gpu/drm/xe/tests/xe_pci.c +++ b/drivers/gpu/drm/xe/tests/xe_pci.c @@ -9,6 +9,7 @@ #include <kunit/test-bug.h> #include <kunit/test.h> +#include <kunit/test-bug.h> #include <kunit/visibility.h> struct kunit_test_data { @@ -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); +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) { struct kunit *test = kunit_get_current_test(); @@ -140,6 +156,8 @@ int xe_pci_fake_device_init(struct xe_device *xe) return -ENODEV; done: + kunit_activate_static_stub(test, read_gmdid, fake_read_gmdid); + xe_info_init_early(xe, desc, subplatform_desc); xe_info_init(xe, desc->graphics, desc->media); diff --git a/drivers/gpu/drm/xe/tests/xe_pci_test.h b/drivers/gpu/drm/xe/tests/xe_pci_test.h index b4b3fb2df09c..811ffe5bd9fd 100644 --- a/drivers/gpu/drm/xe/tests/xe_pci_test.h +++ b/drivers/gpu/drm/xe/tests/xe_pci_test.h @@ -6,6 +6,8 @@ #ifndef _XE_PCI_TEST_H_ #define _XE_PCI_TEST_H_ +#include <linux/types.h> + #include "xe_platform_types.h" struct xe_device; @@ -23,6 +25,10 @@ void xe_call_for_each_media_ip(xe_media_fn xe_fn); struct xe_pci_fake_data { enum xe_platform platform; 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); diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c index b85193d1dcc2..148890357313 100644 --- a/drivers/gpu/drm/xe/xe_pci.c +++ b/drivers/gpu/drm/xe/xe_pci.c @@ -5,6 +5,7 @@ #include "xe_pci.h" +#include <kunit/static_stub.h> #include <linux/device/driver.h> #include <linux/module.h> #include <linux/pci.h> @@ -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; u32 val; + KUNIT_STATIC_STUB_REDIRECT(read_gmdid, xe, type, ver, revid); + if (type == GMDID_MEDIA) gmdid_reg.addr += MEDIA_GT_GSI_OFFSET; diff --git a/drivers/gpu/drm/xe/xe_step.h b/drivers/gpu/drm/xe/xe_step.h index a384b640f2af..686cb59200c2 100644 --- a/drivers/gpu/drm/xe/xe_step.h +++ b/drivers/gpu/drm/xe/xe_step.h @@ -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, u32 graphics_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); #endif |