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 count_pmc(1, sample_period); 46 47 dump_ebb_state(); 48 49 event_close(&event); 50 51 FAIL_IF(ebb_state.stats.ebb_count == 0); 52 FAIL_IF(!ebb_check_count(1, sample_period, 100)); 53 54 return 0; 55 } 56 57 int main(void) 58 { 59 return test_harness(cycles, "cycles"); 60 } 61