brintos

brintos / linux-shallow public Read only

0
0
Text · 4.0 KiB · c96d1fe Raw
158 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright © 2023 Intel Corporation4 */5 6#include <drm/drm_drv.h>7#include <drm/drm_kunit_helpers.h>8 9#include <kunit/test.h>10 11#include "xe_device.h"12#include "xe_kunit_helpers.h"13#include "xe_pci_test.h"14#include "xe_reg_sr.h"15#include "xe_tuning.h"16#include "xe_wa.h"17 18struct platform_test_case {19	const char *name;20	enum xe_platform platform;21	enum xe_subplatform subplatform;22	u32 graphics_verx100;23	u32 media_verx100;24	struct xe_step_info step;25};26 27#define PLATFORM_CASE(platform__, graphics_step__)				\28	{									\29		.name = #platform__ " (" #graphics_step__ ")",			\30		.platform = XE_ ## platform__,					\31		.subplatform = XE_SUBPLATFORM_NONE,				\32		.step = { .graphics = STEP_ ## graphics_step__ }		\33	}34 35 36#define SUBPLATFORM_CASE(platform__, subplatform__, graphics_step__)			\37	{										\38		.name = #platform__ "_" #subplatform__ " (" #graphics_step__ ")",	\39		.platform = XE_ ## platform__,						\40		.subplatform = XE_SUBPLATFORM_ ## platform__ ## _ ## subplatform__,	\41		.step = { .graphics = STEP_ ## graphics_step__ }			\42	}43 44#define GMDID_CASE(platform__, graphics_verx100__, graphics_step__,		\45		   media_verx100__, media_step__)				\46	{									\47		.name = #platform__ " (g:" #graphics_step__ ", m:" #media_step__ ")",\48		.platform = XE_ ## platform__,					\49		.subplatform = XE_SUBPLATFORM_NONE,				\50		.graphics_verx100 = graphics_verx100__,				\51		.media_verx100 = media_verx100__,				\52		.step = { .graphics = STEP_ ## graphics_step__,			\53			   .media = STEP_ ## media_step__ }			\54	}55 56static const struct platform_test_case cases[] = {57	PLATFORM_CASE(TIGERLAKE, B0),58	PLATFORM_CASE(DG1, A0),59	PLATFORM_CASE(DG1, B0),60	PLATFORM_CASE(ALDERLAKE_S, A0),61	PLATFORM_CASE(ALDERLAKE_S, B0),62	PLATFORM_CASE(ALDERLAKE_S, C0),63	PLATFORM_CASE(ALDERLAKE_S, D0),64	PLATFORM_CASE(ALDERLAKE_P, A0),65	PLATFORM_CASE(ALDERLAKE_P, B0),66	PLATFORM_CASE(ALDERLAKE_P, C0),67	SUBPLATFORM_CASE(ALDERLAKE_S, RPLS, D0),68	SUBPLATFORM_CASE(ALDERLAKE_P, RPLU, E0),69	SUBPLATFORM_CASE(DG2, G10, C0),70	SUBPLATFORM_CASE(DG2, G11, B1),71	SUBPLATFORM_CASE(DG2, G12, A1),72	GMDID_CASE(METEORLAKE, 1270, A0, 1300, A0),73	GMDID_CASE(METEORLAKE, 1271, A0, 1300, A0),74	GMDID_CASE(METEORLAKE, 1274, A0, 1300, A0),75	GMDID_CASE(LUNARLAKE, 2004, A0, 2000, A0),76	GMDID_CASE(LUNARLAKE, 2004, B0, 2000, A0),77	GMDID_CASE(BATTLEMAGE, 2001, A0, 1301, A1),78};79 80static void platform_desc(const struct platform_test_case *t, char *desc)81{82	strscpy(desc, t->name, KUNIT_PARAM_DESC_SIZE);83}84 85KUNIT_ARRAY_PARAM(platform, cases, platform_desc);86 87static int xe_wa_test_init(struct kunit *test)88{89	const struct platform_test_case *param = test->param_value;90	struct xe_pci_fake_data data = {91		.platform = param->platform,92		.subplatform = param->subplatform,93		.graphics_verx100 = param->graphics_verx100,94		.media_verx100 = param->media_verx100,95		.graphics_step = param->step.graphics,96		.media_step = param->step.media,97	};98	struct xe_device *xe;99	struct device *dev;100	int ret;101 102	dev = drm_kunit_helper_alloc_device(test);103	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);104 105	xe = xe_kunit_helper_alloc_xe_device(test, dev);106	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xe);107 108	test->priv = &data;109	ret = xe_pci_fake_device_init(xe);110	KUNIT_ASSERT_EQ(test, ret, 0);111 112	if (!param->graphics_verx100)113		xe->info.step = param->step;114 115	/* TODO: init hw engines for engine/LRC WAs */116	xe->drm.dev = dev;117	test->priv = xe;118 119	return 0;120}121 122static void xe_wa_test_exit(struct kunit *test)123{124	struct xe_device *xe = test->priv;125 126	drm_kunit_helper_free_device(test, xe->drm.dev);127}128 129static void xe_wa_gt(struct kunit *test)130{131	struct xe_device *xe = test->priv;132	struct xe_gt *gt;133	int id;134 135	for_each_gt(gt, xe, id) {136		xe_reg_sr_init(&gt->reg_sr, "GT", xe);137 138		xe_wa_process_gt(gt);139		xe_tuning_process_gt(gt);140 141		KUNIT_ASSERT_EQ(test, gt->reg_sr.errors, 0);142	}143}144 145static struct kunit_case xe_wa_tests[] = {146	KUNIT_CASE_PARAM(xe_wa_gt, platform_gen_params),147	{}148};149 150static struct kunit_suite xe_rtp_test_suite = {151	.name = "xe_wa",152	.init = xe_wa_test_init,153	.exit = xe_wa_test_exit,154	.test_cases = xe_wa_tests,155};156 157kunit_test_suite(xe_rtp_test_suite);158