1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright 2022, Athira Rajeev, IBM Corp.
4 */
5
6 #include <stdio.h>
7 #include "../event.h"
8 #include "../sampling_tests/misc.h"
9
10 /*
11 * Testcase for reserved bits in Monitor Mode Control
12 * Register A (MMCRA) Random Sampling Mode (SM) value.
13 * As per Instruction Set Architecture (ISA), the values
14 * 0x5, 0x9, 0xD, 0x19, 0x1D, 0x1A, 0x1E are reserved
15 * for sampling mode field. Test that having these reserved
16 * bit values should cause event_open to fail.
17 * Input event code uses these sampling bits along with
18 * 401e0 (PM_MRK_INST_CMPL).
19 */
20
reserved_bits_mmcra_sample_elig_mode(void)21 static int reserved_bits_mmcra_sample_elig_mode(void)
22 {
23 struct event event;
24
25 /* Check for platform support for the test */
26 SKIP_IF(platform_check_for_tests());
27
28 /* Skip for Generic compat PMU */
29 SKIP_IF(check_for_generic_compat_pmu());
30
31 /*
32 * MMCRA Random Sampling Mode (SM) values: 0x5
33 * 0x9, 0xD, 0x19, 0x1D, 0x1A, 0x1E is reserved.
34 * Expected to fail when using these reserved values.
35 */
36 event_init(&event, 0x50401e0);
37 FAIL_IF(!event_open(&event));
38
39 event_init(&event, 0x90401e0);
40 FAIL_IF(!event_open(&event));
41
42 event_init(&event, 0xD0401e0);
43 FAIL_IF(!event_open(&event));
44
45 event_init(&event, 0x190401e0);
46 FAIL_IF(!event_open(&event));
47
48 event_init(&event, 0x1D0401e0);
49 FAIL_IF(!event_open(&event));
50
51 event_init(&event, 0x1A0401e0);
52 FAIL_IF(!event_open(&event));
53
54 event_init(&event, 0x1E0401e0);
55 FAIL_IF(!event_open(&event));
56
57 /*
58 * MMCRA Random Sampling Mode (SM) value 0x10
59 * is reserved in power10 and 0xC is reserved in
60 * power9.
61 */
62 if (PVR_VER(mfspr(SPRN_PVR)) == POWER10) {
63 event_init(&event, 0x100401e0);
64 FAIL_IF(!event_open(&event));
65 } else if (PVR_VER(mfspr(SPRN_PVR)) == POWER9) {
66 event_init(&event, 0xC0401e0);
67 FAIL_IF(!event_open(&event));
68 }
69
70 return 0;
71 }
72
main(void)73 int main(void)
74 {
75 return test_harness(reserved_bits_mmcra_sample_elig_mode,
76 "reserved_bits_mmcra_sample_elig_mode");
77 }
78