1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright 2014, Michael Ellerman, IBM Corp. 4 */ 5 6 #include <stdio.h> 7 #include <stdlib.h> 8 9 #include "ebb.h" 10 11 12 /* 13 * Basic test that counts user cycles and takes EBBs. 14 */ 15 int cycles(void) 16 { 17 struct event event; 18 19 SKIP_IF(!ebb_is_supported()); 20 21 event_init_named(&event, 0x1001e, "cycles"); 22 event_leader_ebb_init(&event); 23 24 event.attr.exclude_kernel = 1; 25 event.attr.exclude_hv = 1; 26 event.attr.exclude_idle = 1; 27 28 FAIL_IF(event_open(&event)); 29 30 ebb_enable_pmc_counting(1); 31 setup_ebb_handler(standard_ebb_callee); 32 ebb_global_enable(); 33 FAIL_IF(ebb_event_enable(&event)); 34 35 mtspr(SPRN_PMC1, pmc_sample_period(sample_period)); 36 37 while (ebb_state.stats.ebb_count < 10) { 38 FAIL_IF(core_busy_loop()); 39 FAIL_IF(ebb_check_mmcr0()); 40 } 41 42 ebb_global_disable(); 43 ebb_freeze_pmcs(); 44 45 dump_ebb_state(); 46 47 event_close(&event); 48 49 FAIL_IF(ebb_state.stats.ebb_count == 0); 50 FAIL_IF(!ebb_check_count(1, sample_period, 100)); 51 52 return 0; 53 } 54 55 int main(void) 56 { 57 return test_harness(cycles, "cycles"); 58 } 59