From: Jani Nikula <jani.nikula@linux.intel.com>
To: Ruthuvikas Ravikumar <ruthuvikas.ravikumar@intel.com>,
intel-xe@lists.freedesktop.org, janga.rahul.kumar@intel.com,
ramadevi.gandi@intel.com
Cc: matthew.d.roper@intel.com
Subject: Re: [Intel-xe] [PATCH] drm/xe: add mocs kunit
Date: Thu, 12 Oct 2023 12:20:35 +0300 [thread overview]
Message-ID: <87il7c2o4c.fsf@intel.com> (raw)
In-Reply-To: <20231011163506.1747972-1-ruthuvikas.ravikumar@intel.com>
On Wed, 11 Oct 2023, Ruthuvikas Ravikumar <ruthuvikas.ravikumar@intel.com> wrote:
> This kunit verifies the hardware values of the mocs and l3cc
> registers with the KMD programmed values.
>
> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> Cc: Mathew D Roper <matthew.d.roper@intel.com>
> Signed-off-by: Ruthuvikas Ravikumar <ruthuvikas.ravikumar@intel.com>
Please pay more attention to the patches before sending to save
everyone's time. Thanks.
BR,
Jani.
> ---
> drivers/gpu/drm/xe/tests/Makefile | 1 +
> drivers/gpu/drm/xe/tests/xe_mocs.c | 143 ++++++++++++++++++++++++
> drivers/gpu/drm/xe/tests/xe_mocs_test.c | 24 ++++
> drivers/gpu/drm/xe/tests/xe_mocs_test.h | 13 +++
> drivers/gpu/drm/xe/xe_mocs.c | 4 +
> 5 files changed, 185 insertions(+)
> create mode 100644 drivers/gpu/drm/xe/tests/xe_mocs.c
> create mode 100644 drivers/gpu/drm/xe/tests/xe_mocs_test.c
> create mode 100644 drivers/gpu/drm/xe/tests/xe_mocs_test.h
>
> diff --git a/drivers/gpu/drm/xe/tests/Makefile b/drivers/gpu/drm/xe/tests/Makefile
> index 51f1a7f017d4..39d8a0892274 100644
> --- a/drivers/gpu/drm/xe/tests/Makefile
> +++ b/drivers/gpu/drm/xe/tests/Makefile
> @@ -4,6 +4,7 @@ obj-$(CONFIG_DRM_XE_KUNIT_TEST) += \
> xe_bo_test.o \
> xe_dma_buf_test.o \
> xe_migrate_test.o \
> + xe_mocs_test.o \
> xe_pci_test.o \
> xe_rtp_test.o \
> xe_wa_test.o
> diff --git a/drivers/gpu/drm/xe/tests/xe_mocs.c b/drivers/gpu/drm/xe/tests/xe_mocs.c
> new file mode 100644
> index 000000000000..0dd3f933cbf6
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/tests/xe_mocs.c
> @@ -0,0 +1,143 @@
> +// SPDX-License-Identifier: GPL-2.0 AND MIT
> +/*
> + * Copyright © 2022 Intel Corporation
> + */
> +
> +#include <kunit/test.h>
> +#include <kunit/visibility.h>
> +
> +#include "tests/xe_mocs_test.h"
> +#include "tests/xe_pci_test.h"
> +#include "tests/xe_test.h"
> +
> +#include "xe_pci.h"
> +#include "xe_pm.h"
> +#include "xe_gt.h"
> +#include "xe_mocs.h"
> +#include "xe_bo.h"
> +#include "xe_device.h"
> +
> +struct live_mocs {
> + struct xe_mocs_info table;
> + struct xe_mocs_info *mocs;
> + struct xe_mocs_info *l3cc;
> + struct xe_bo *scratch;
> + void *vaddr;
> +};
> +
> +static int live_mocs_init(struct live_mocs *arg, struct xe_gt *gt)
> +{
> + unsigned int flags;
> + struct kunit *test = xe_cur_kunit();
> +
> + memset(arg, 0, sizeof(*arg));
> +
> + flags = get_mocs_settings(gt_to_xe(gt), &arg->table);
> +
> + kunit_info(test, "table size %d", arg->table.size);
> + kunit_info(test, "table uc_index %d", arg->table.uc_index);
> + kunit_info(test, "table n_entries %d", arg->table.n_entries);
> +
> + if (flags & HAS_GLOBAL_MOCS)
> + arg->mocs = &arg->table;
> +
> + arg->l3cc = &arg->table;
> +
> + return flags;
> +}
> +
> +static void read_l3cc_table(struct xe_gt *gt, const struct xe_mocs_info *info)
> +{
> + unsigned int i;
> + u32 l3cc;
> + u32 reg;
> + ssize_t ret;
> +
> + struct kunit *test = xe_cur_kunit();
> +
> + xe_device_mem_access_get(gt_to_xe(gt));
> + ret = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> + if (ret)
> + goto out;
> +
> + mocs_dbg(>_to_xe(gt)->drm, "entries:%d\n", info->n_entries);
> + for (i = 0; i < (info->n_entries + 1) / 2 ?
> + (l3cc = l3cc_combine(get_entry_l3cc(info, 2 * i),
> + get_entry_l3cc(info, 2 * i + 1))),
> + 1 : 0;
> + i++) {
> + reg = xe_mmio_read32(gt, LNCFCMOCS(i));
> + mocs_dbg(>_to_xe(gt)->drm, "%d 0x%x 0x%x 0x%x\n", i,
> + LNCFCMOCS(i).addr, reg, l3cc);
> +
> + if (reg != l3cc) {
> + KUNIT_FAIL(test, "l3cc reg 0x%x has incorrect val: \n",
> + LNCFCMOCS(i).addr);
> + }
> + }
> +
> +out:
> + xe_device_mem_access_put(gt_to_xe(gt));
> +}
> +static void read_mocs_table(struct xe_gt *gt, const struct xe_mocs_info *info,
> + u32 addr)
> +{
> + struct xe_device *xe = gt_to_xe(gt);
> +
> + unsigned int i;
> + u32 mocs;
> + u32 reg_val;
> +
> + ssize_t ret;
> +
> + struct kunit *test = xe_cur_kunit();
> +
> + xe_device_mem_access_get(gt_to_xe(gt));
> + ret = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> + if (ret)
> + goto out;
> +
> + mocs_dbg(>_to_xe(gt)->drm, "entries:%d\n", info->n_entries);
> + drm_WARN_ONCE(&xe->drm, !info->unused_entries_index,
> + "Unused entries index should have been defined\n");
> + for (i = 0;
> + i < info->n_entries ? (mocs = get_entry_control(info, i)), 1 : 0;
> + i++) {
> + struct xe_reg reg = XE_REG(addr + i * 4);
> +
> + mocs_dbg(>_to_xe(gt)->drm, "%d 0x%x 0x%x\n", i, reg.addr,
> + mocs);
> + reg_val = xe_mmio_read32(gt, reg);
> + mocs_dbg(>_to_xe(gt)->drm, "%d 0x%x 0x%x\n", i, reg.addr,
> + reg_val);
> + if (reg_val != mocs) {
> + KUNIT_FAIL(test, "mocs reg 0x%x has incorrect val: \n",
> + reg.addr);
> + }
> + }
> +out:
> + xe_device_mem_access_put(gt_to_xe(gt));
> +}
> +static int mocs_kernel_test_run_device(struct xe_device *xe)
> +{
> + /* Basic check the system is configured with the expected mocs table */
> +
> + struct live_mocs mocs;
> + struct xe_gt *gt;
> +
> + unsigned int flags;
> + int id;
> +
> + for_each_gt(gt, xe, id) {
> + flags = live_mocs_init(&mocs, gt);
> + if (flags & HAS_GLOBAL_MOCS)
> + read_mocs_table(gt, mocs.mocs, GLOBAL_MOCS(0).addr);
> + read_l3cc_table(gt, mocs.l3cc);
> + }
> + return 0;
> +}
> +void xe_live_mocs_kernel_kunit(struct kunit *test)
> +{
> + xe_call_for_each_device(mocs_kernel_test_run_device);
> +}
> +EXPORT_SYMBOL_IF_KUNIT(xe_live_mocs_kernel_kunit);
> diff --git a/drivers/gpu/drm/xe/tests/xe_mocs_test.c b/drivers/gpu/drm/xe/tests/xe_mocs_test.c
> new file mode 100644
> index 000000000000..ef56bd517b28
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/tests/xe_mocs_test.c
> @@ -0,0 +1,24 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright © 2022 Intel Corporation
> + */
> +
> +#include "xe_mocs_test.h"
> +
> +#include <kunit/test.h>
> +
> +static struct kunit_case xe_mocs_tests[] = {
> + KUNIT_CASE(xe_live_mocs_kernel_kunit),
> + {}
> +};
> +
> +static struct kunit_suite xe_mocs_test_suite = {
> + .name = "xe_mocs",
> + .test_cases = xe_mocs_tests,
> +};
> +
> +kunit_test_suite(xe_mocs_test_suite);
> +
> +MODULE_AUTHOR("Intel Corporation");
> +MODULE_LICENSE("GPL");
> +MODULE_IMPORT_NS(EXPORTED_FOR_KUNIT_TESTING);
> diff --git a/drivers/gpu/drm/xe/tests/xe_mocs_test.h b/drivers/gpu/drm/xe/tests/xe_mocs_test.h
> new file mode 100644
> index 000000000000..7faa3575e6c3
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/tests/xe_mocs_test.h
> @@ -0,0 +1,13 @@
> +/* SPDX-License-Identifier: GPL-2.0 AND MIT */
> +/*
> + * Copyright © 2023 Intel Corporation
> + */
> +
> +#ifndef _XE_MOCS_TEST_H_
> +#define _XE_MOCS_TEST_H_
> +
> +struct kunit;
> +
> +void xe_live_mocs_kernel_kunit(struct kunit *test);
> +
> +#endif
> diff --git a/drivers/gpu/drm/xe/xe_mocs.c b/drivers/gpu/drm/xe/xe_mocs.c
> index 19a8146ded9a..0594ee7c0c15 100644
> --- a/drivers/gpu/drm/xe/xe_mocs.c
> +++ b/drivers/gpu/drm/xe/xe_mocs.c
> @@ -579,3 +579,7 @@ void xe_mocs_init(struct xe_gt *gt)
> if (table.table)
> init_l3cc_table(gt, &table);
> }
> +
> +#if IS_ENABLED(CONFIG_DRM_XE_KUNIT_TEST)
> +#include "tests/xe_mocs.c"
> +#endif
> \ No newline at end of file
--
Jani Nikula, Intel
next prev parent reply other threads:[~2023-10-12 9:20 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-11 16:35 [Intel-xe] [PATCH] drm/xe: add mocs kunit Ruthuvikas Ravikumar
2023-10-11 22:27 ` [Intel-xe] ✓ CI.Patch_applied: success for drm/xe: Add mocs kunit (rev2) Patchwork
2023-10-11 22:27 ` [Intel-xe] ✗ CI.checkpatch: warning " Patchwork
2023-10-11 22:28 ` [Intel-xe] ✓ CI.KUnit: success " Patchwork
2023-10-11 22:36 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-10-11 22:36 ` [Intel-xe] ✓ CI.Hooks: " Patchwork
2023-10-11 22:37 ` [Intel-xe] ✓ CI.checksparse: " Patchwork
2023-10-11 22:59 ` [Intel-xe] ✓ CI.BAT: " Patchwork
2023-10-12 9:20 ` Jani Nikula [this message]
-- strict thread matches above, loose matches on Subject: below --
2023-10-30 18:40 [Intel-xe] [PATCH] drm/xe: Add mocs kunit Ruthuvikas Ravikumar
2023-11-01 22:38 ` Matt Roper
2023-10-30 17:55 Ruthuvikas Ravikumar
2023-10-23 16:03 Ruthuvikas Ravikumar
2023-10-23 20:47 ` Matt Roper
2023-10-20 17:07 Ruthuvikas Ravikumar
2023-10-20 18:09 ` Matt Roper
2023-10-16 17:01 Ruthuvikas Ravikumar
2023-10-19 22:56 ` Matt Roper
2023-10-10 21:14 Ruthuvikas Ravikumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87il7c2o4c.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=janga.rahul.kumar@intel.com \
--cc=matthew.d.roper@intel.com \
--cc=ramadevi.gandi@intel.com \
--cc=ruthuvikas.ravikumar@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.