Skip to content

Commit

Permalink
drm/xe/kunit: Add stub to read_gmdid
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Lucas De Marchi authored and Rodrigo Vivi committed Dec 21, 2023
1 parent 5b2a63b commit 6cad228
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 0 deletions.
18 changes: 18 additions & 0 deletions drivers/gpu/drm/xe/tests/xe_pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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);

Expand Down
6 changes: 6 additions & 0 deletions drivers/gpu/drm/xe/tests/xe_pci_test.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
3 changes: 3 additions & 0 deletions drivers/gpu/drm/xe/xe_pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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;

Expand Down
2 changes: 2 additions & 0 deletions drivers/gpu/drm/xe/xe_step.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 6cad228

Please sign in to comment.