xref: /linux/drivers/resctrl/test_mpam_devices.c (revision e3565d1fd4dcf2c7ee6912094066e47c7500eaf2)
1*e3565d1fSJames Morse // SPDX-License-Identifier: GPL-2.0
2*e3565d1fSJames Morse // Copyright (C) 2025 Arm Ltd.
3*e3565d1fSJames Morse /* This file is intended to be included into mpam_devices.c */
4*e3565d1fSJames Morse 
5*e3565d1fSJames Morse #include <kunit/test.h>
6*e3565d1fSJames Morse 
7*e3565d1fSJames Morse static void test_mpam_reset_msc_bitmap(struct kunit *test)
8*e3565d1fSJames Morse {
9*e3565d1fSJames Morse 	char __iomem *buf = kunit_kzalloc(test, SZ_16K, GFP_KERNEL);
10*e3565d1fSJames Morse 	struct mpam_msc fake_msc = {};
11*e3565d1fSJames Morse 	u32 *test_result;
12*e3565d1fSJames Morse 
13*e3565d1fSJames Morse 	if (!buf)
14*e3565d1fSJames Morse 		return;
15*e3565d1fSJames Morse 
16*e3565d1fSJames Morse 	fake_msc.mapped_hwpage = buf;
17*e3565d1fSJames Morse 	fake_msc.mapped_hwpage_sz = SZ_16K;
18*e3565d1fSJames Morse 	cpumask_copy(&fake_msc.accessibility, cpu_possible_mask);
19*e3565d1fSJames Morse 
20*e3565d1fSJames Morse 	/* Satisfy lockdep checks */
21*e3565d1fSJames Morse 	mutex_init(&fake_msc.part_sel_lock);
22*e3565d1fSJames Morse 	mutex_lock(&fake_msc.part_sel_lock);
23*e3565d1fSJames Morse 
24*e3565d1fSJames Morse 	test_result = (u32 *)(buf + MPAMCFG_CPBM);
25*e3565d1fSJames Morse 
26*e3565d1fSJames Morse 	mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 0);
27*e3565d1fSJames Morse 	KUNIT_EXPECT_EQ(test, test_result[0], 0);
28*e3565d1fSJames Morse 	KUNIT_EXPECT_EQ(test, test_result[1], 0);
29*e3565d1fSJames Morse 	test_result[0] = 0;
30*e3565d1fSJames Morse 	test_result[1] = 0;
31*e3565d1fSJames Morse 
32*e3565d1fSJames Morse 	mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 1);
33*e3565d1fSJames Morse 	KUNIT_EXPECT_EQ(test, test_result[0], 1);
34*e3565d1fSJames Morse 	KUNIT_EXPECT_EQ(test, test_result[1], 0);
35*e3565d1fSJames Morse 	test_result[0] = 0;
36*e3565d1fSJames Morse 	test_result[1] = 0;
37*e3565d1fSJames Morse 
38*e3565d1fSJames Morse 	mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 16);
39*e3565d1fSJames Morse 	KUNIT_EXPECT_EQ(test, test_result[0], 0xffff);
40*e3565d1fSJames Morse 	KUNIT_EXPECT_EQ(test, test_result[1], 0);
41*e3565d1fSJames Morse 	test_result[0] = 0;
42*e3565d1fSJames Morse 	test_result[1] = 0;
43*e3565d1fSJames Morse 
44*e3565d1fSJames Morse 	mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 32);
45*e3565d1fSJames Morse 	KUNIT_EXPECT_EQ(test, test_result[0], 0xffffffff);
46*e3565d1fSJames Morse 	KUNIT_EXPECT_EQ(test, test_result[1], 0);
47*e3565d1fSJames Morse 	test_result[0] = 0;
48*e3565d1fSJames Morse 	test_result[1] = 0;
49*e3565d1fSJames Morse 
50*e3565d1fSJames Morse 	mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 33);
51*e3565d1fSJames Morse 	KUNIT_EXPECT_EQ(test, test_result[0], 0xffffffff);
52*e3565d1fSJames Morse 	KUNIT_EXPECT_EQ(test, test_result[1], 1);
53*e3565d1fSJames Morse 	test_result[0] = 0;
54*e3565d1fSJames Morse 	test_result[1] = 0;
55*e3565d1fSJames Morse 
56*e3565d1fSJames Morse 	mutex_unlock(&fake_msc.part_sel_lock);
57*e3565d1fSJames Morse }
58*e3565d1fSJames Morse 
59*e3565d1fSJames Morse static struct kunit_case mpam_devices_test_cases[] = {
60*e3565d1fSJames Morse 	KUNIT_CASE(test_mpam_reset_msc_bitmap),
61*e3565d1fSJames Morse 	{}
62*e3565d1fSJames Morse };
63*e3565d1fSJames Morse 
64*e3565d1fSJames Morse static struct kunit_suite mpam_devices_test_suite = {
65*e3565d1fSJames Morse 	.name = "mpam_devices_test_suite",
66*e3565d1fSJames Morse 	.test_cases = mpam_devices_test_cases,
67*e3565d1fSJames Morse };
68*e3565d1fSJames Morse 
69*e3565d1fSJames Morse kunit_test_suites(&mpam_devices_test_suite);
70