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