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