[Intel-xe] [PATCH v2 4/5] drm/xe/kunit: Add stub to read_gmdid
Matt Roper
matthew.d.roper at intel.com
Thu Nov 30 00:01:01 UTC 2023
On Wed, Nov 29, 2023 at 03:28:06PM -0800, Lucas De Marchi wrote:
> 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.
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
Reviewed-by: Matt Roper <matthew.d.roper at intel.com>
> ---
> drivers/gpu/drm/xe/tests/xe_pci.c | 18 ++++++++++++++++++
> drivers/gpu/drm/xe/tests/xe_pci_test.h | 6 ++++++
> drivers/gpu/drm/xe/xe_pci.c | 3 +++
> drivers/gpu/drm/xe/xe_step.h | 2 ++
> 4 files changed, 29 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/tests/xe_pci.c b/drivers/gpu/drm/xe/tests/xe_pci.c
> index be2000987877..5b4e73cc31db 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, subplatform_desc);
>
> 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 c949ec7ec43e..cc2e87c0eb97 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
> --
> 2.40.1
>
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
More information about the Intel-xe
mailing list