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 L1 D cache load references counted at finish, gated by reject */ 14 #define EventCode_1 0x1100fc 15 /* Load Missed L1 */ 16 #define EventCode_2 0x23e054 17 /* Load Missed L1 */ 18 #define EventCode_3 0x13e054 19 20 /* 21 * Testcase for group constraint check of data and instructions 22 * cache qualifier bits which is used to program cache select field in 23 * Monitor Mode Control Register 1 (MMCR1: 16-17) for l1 cache. 24 * All events in the group should match cache select bits otherwise 25 * event_open for the group will fail. 26 */ 27 static int group_constraint_cache(void) 28 { 29 struct event event, leader; 30 31 /* Check for platform support for the test */ 32 SKIP_IF(platform_check_for_tests()); 33 34 /* Init the events for the group contraint check for l1 cache select bits */ 35 event_init(&leader, EventCode_1); 36 FAIL_IF(event_open(&leader)); 37 38 event_init(&event, EventCode_2); 39 40 /* Expected to fail as sibling event doesn't request same l1 cache select bits as leader */ 41 FAIL_IF(!event_open_with_group(&event, leader.fd)); 42 43 event_close(&event); 44 45 /* Init the event for the group contraint l1 cache select test */ 46 event_init(&event, EventCode_3); 47 48 /* Expected to succeed as sibling event request same l1 cache select bits as leader */ 49 FAIL_IF(event_open_with_group(&event, leader.fd)); 50 51 event_close(&leader); 52 event_close(&event); 53 54 return 0; 55 } 56 57 int main(void) 58 { 59 return test_harness(group_constraint_cache, "group_constraint_cache"); 60 } 61