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 and issue to 17 * finished for cycles 18 * Sampling criteria is Load or Store only sampling 19 */ 20 #define EventCode_1 0x35340401e0 21 #define EventCode_2 0x34340101ec 22 #define EventCode_3 0x35340101ec 23 24 /* 25 * Testcase for group constraint check of thresh_ctl bits which is 26 * used to program thresh compare field in Monitor Mode Control Register A 27 * (MMCR0: 48-55). 28 * All events in the group should match thresh ctl bits otherwise 29 * event_open for the group will fail. 30 */ 31 static int group_constraint_thresh_ctl(void) 32 { 33 struct event event, leader; 34 35 /* Check for platform support for the test */ 36 SKIP_IF(platform_check_for_tests()); 37 38 /* Init the events for the group contraint thresh control test */ 39 event_init(&leader, EventCode_1); 40 FAIL_IF(event_open(&leader)); 41 42 event_init(&event, EventCode_2); 43 44 /* Expected to fail as sibling and leader event request different thresh_ctl bits */ 45 FAIL_IF(!event_open_with_group(&event, leader.fd)); 46 47 event_close(&event); 48 49 /* Init the event for the group contraint thresh control test */ 50 event_init(&event, EventCode_3); 51 52 /* Expected to succeed as sibling and leader event request same thresh_ctl bits */ 53 FAIL_IF(event_open_with_group(&event, leader.fd)); 54 55 event_close(&leader); 56 event_close(&event); 57 58 return 0; 59 } 60 61 int main(void) 62 { 63 return test_harness(group_constraint_thresh_ctl, "group_constraint_thresh_ctl"); 64 } 65