1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright 2022, Kajol Jain, IBM Corp.
4 */
5
6#include <stdio.h>
7#include <stdlib.h>
8
9#include "../event.h"
10#include "utils.h"
11#include "../sampling_tests/misc.h"
12
13/*
14 * Primary PMU events used here are PM_MRK_INST_CMPL (0x401e0) and
15 * PM_THRESH_MET (0x101ec).
16 * Threshold event selection used is issue to complete
17 * Sampling criteria is Load or Store only sampling
18 */
19#define EventCode_1 0x35340401e0
20#define EventCode_2 0x35540101ec
21#define EventCode_3 0x35340101ec
22
23/*
24 * Testcase for group constraint check of thresh_sel bits which is
25 * used to program thresh select field in Monitor Mode Control Register A
26 * (MMCRA: 45-57).
27 * All events in the group should match thresh sel bits otherwise
28 * event_open for the group will fail.
29 */
30static int group_constraint_thresh_sel(void)
31{
32	struct event event, leader;
33
34	/* Check for platform support for the test */
35	SKIP_IF(platform_check_for_tests());
36
37	/* Init the events for the group contraint thresh select test */
38	event_init(&leader, EventCode_1);
39	FAIL_IF(event_open(&leader));
40
41	event_init(&event, EventCode_2);
42
43	/* Expected to fail as sibling and leader event request different thresh_sel bits */
44	FAIL_IF(!event_open_with_group(&event, leader.fd));
45
46	event_close(&event);
47
48	/* Init the event for the group contraint thresh select test */
49	event_init(&event, EventCode_3);
50
51	 /* Expected to succeed as sibling and leader event request same thresh_sel bits */
52	FAIL_IF(event_open_with_group(&event, leader.fd));
53
54	event_close(&leader);
55	event_close(&event);
56
57	return 0;
58}
59
60int main(void)
61{
62	return test_harness(group_constraint_thresh_sel, "group_constraint_thresh_sel");
63}
64