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