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 | /* PM_DATA_RADIX_PROCESS_L2_PTE_FROM_L2 */ |
11 | #define EventCode_1 0x14242 |
12 | /* PM_DATA_RADIX_PROCESS_L2_PTE_FROM_L3 */ |
13 | #define EventCode_2 0x24242 |
14 | |
15 | /* |
16 | * Testcase for group constraint check for radix_scope_qual |
17 | * field which is used to program Monitor Mode Control |
18 | * egister (MMCR1) bit 18. |
19 | * All events in the group should match radix_scope_qual, |
20 | * bits otherwise event_open for the group should fail. |
21 | */ |
22 | |
23 | static int group_constraint_radix_scope_qual(void) |
24 | { |
25 | struct event event, leader; |
26 | |
27 | /* |
28 | * Check for platform support for the test. |
29 | * This test is aplicable on power10 only. |
30 | */ |
31 | SKIP_IF(platform_check_for_tests()); |
32 | SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_3_1)); |
33 | |
34 | /* Init the events for the group contraint check for radix_scope_qual bits */ |
35 | event_init(e: &leader, EventCode_1); |
36 | FAIL_IF(event_open(e: &leader)); |
37 | |
38 | event_init(e: &event, config: 0x200fc); |
39 | |
40 | /* Expected to fail as sibling event doesn't request same radix_scope_qual bits as leader */ |
41 | FAIL_IF(!event_open_with_group(e: &event, group_fd: leader.fd)); |
42 | |
43 | event_init(e: &event, EventCode_2); |
44 | /* Expected to pass as sibling event request same radix_scope_qual bits as leader */ |
45 | FAIL_IF(event_open_with_group(e: &event, group_fd: leader.fd)); |
46 | |
47 | event_close(e: &leader); |
48 | event_close(e: &event); |
49 | return 0; |
50 | } |
51 | |
52 | int main(void) |
53 | { |
54 | return test_harness(group_constraint_radix_scope_qual, |
55 | "group_constraint_radix_scope_qual" ); |
56 | } |
57 | |