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/* All successful D-side store dispatches for this thread */
14#define EventCode_1 0x010000046080
15/* All successful D-side store dispatches for this thread that were L2 Miss */
16#define EventCode_2 0x26880
17/* All successful D-side store dispatches for this thread that were L2 Miss */
18#define EventCode_3 0x010000026880
19
20/*
21 * Testcase for group constraint check of l2l3_sel bits which is
22 * used to program l2l3 select field in Monitor Mode Control Register 0
23 * (MMCR0: 56-60).
24 * All events in the group should match l2l3_sel bits otherwise
25 * event_open for the group should fail.
26 */
27static int group_constraint_l2l3_sel(void)
28{
29 struct event event, leader;
30
31 /*
32 * Check for platform support for the test.
33 * This test is only aplicable on power10
34 */
35 SKIP_IF(platform_check_for_tests());
36 SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_3_1));
37
38 /* Init the events for the group contraint check for l2l3_sel bits */
39 event_init(e: &leader, EventCode_1);
40 FAIL_IF(event_open(e: &leader));
41
42 event_init(e: &event, EventCode_2);
43
44 /* Expected to fail as sibling event doesn't request same l2l3_sel bits as leader */
45 FAIL_IF(!event_open_with_group(e: &event, group_fd: leader.fd));
46
47 event_close(e: &event);
48
49 /* Init the event for the group contraint l2l3_sel test */
50 event_init(e: &event, EventCode_3);
51
52 /* Expected to succeed as sibling event request same l2l3_sel bits as leader */
53 FAIL_IF(event_open_with_group(e: &event, group_fd: leader.fd));
54
55 event_close(e: &leader);
56 event_close(e: &event);
57
58 return 0;
59}
60
61int main(void)
62{
63 return test_harness(group_constraint_l2l3_sel, "group_constraint_l2l3_sel");
64}
65

source code of linux/tools/testing/selftests/powerpc/pmu/event_code_tests/group_constraint_l2l3_sel_test.c