18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci 38c2ecf20Sopenharmony_ci#include "req-gen/_begin.h" 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci/* 68c2ecf20Sopenharmony_ci * Based on the document "getPerfCountInfo v1.07" 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci/* 108c2ecf20Sopenharmony_ci * #define REQUEST_NAME counter_request_name 118c2ecf20Sopenharmony_ci * #define REQUEST_NUM r_num 128c2ecf20Sopenharmony_ci * #define REQUEST_IDX_KIND starting_index_kind 138c2ecf20Sopenharmony_ci * #include I(REQUEST_BEGIN) 148c2ecf20Sopenharmony_ci * REQUEST( 158c2ecf20Sopenharmony_ci * __field(...) 168c2ecf20Sopenharmony_ci * __field(...) 178c2ecf20Sopenharmony_ci * __array(...) 188c2ecf20Sopenharmony_ci * __count(...) 198c2ecf20Sopenharmony_ci * ) 208c2ecf20Sopenharmony_ci * #include I(REQUEST_END) 218c2ecf20Sopenharmony_ci * 228c2ecf20Sopenharmony_ci * - starting_index_kind is one of the following, depending on the event: 238c2ecf20Sopenharmony_ci * 248c2ecf20Sopenharmony_ci * hw_chip_id: hardware chip id or -1 for current hw chip 258c2ecf20Sopenharmony_ci * partition_id 268c2ecf20Sopenharmony_ci * sibling_part_id, 278c2ecf20Sopenharmony_ci * phys_processor_idx: 288c2ecf20Sopenharmony_ci * 0xffffffffffffffff: or -1, which means it is irrelavant for the event 298c2ecf20Sopenharmony_ci * 308c2ecf20Sopenharmony_ci * __count(offset, bytes, name): 318c2ecf20Sopenharmony_ci * a counter that should be exposed via perf 328c2ecf20Sopenharmony_ci * __field(offset, bytes, name) 338c2ecf20Sopenharmony_ci * a normal field 348c2ecf20Sopenharmony_ci * __array(offset, bytes, name) 358c2ecf20Sopenharmony_ci * an array of bytes 368c2ecf20Sopenharmony_ci * 378c2ecf20Sopenharmony_ci * 388c2ecf20Sopenharmony_ci * @bytes for __count, and __field _must_ be a numeral token 398c2ecf20Sopenharmony_ci * in decimal, not an expression and not in hex. 408c2ecf20Sopenharmony_ci * 418c2ecf20Sopenharmony_ci * 428c2ecf20Sopenharmony_ci * TODO: 438c2ecf20Sopenharmony_ci * - expose secondary index (if any counter ever uses it, only 0xA0 448c2ecf20Sopenharmony_ci * appears to use it right now, and it doesn't have any counters) 458c2ecf20Sopenharmony_ci * - embed versioning info 468c2ecf20Sopenharmony_ci * - include counter descriptions 478c2ecf20Sopenharmony_ci */ 488c2ecf20Sopenharmony_ci#define REQUEST_NAME dispatch_timebase_by_processor 498c2ecf20Sopenharmony_ci#define REQUEST_NUM 0x10 508c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "phys_processor_idx=?" 518c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 528c2ecf20Sopenharmony_ciREQUEST(__count(0, 8, processor_time_in_timebase_cycles) 538c2ecf20Sopenharmony_ci __field(0x8, 4, hw_processor_id) 548c2ecf20Sopenharmony_ci __field(0xC, 2, owning_part_id) 558c2ecf20Sopenharmony_ci __field(0xE, 1, processor_state) 568c2ecf20Sopenharmony_ci __field(0xF, 1, version) 578c2ecf20Sopenharmony_ci __field(0x10, 4, hw_chip_id) 588c2ecf20Sopenharmony_ci __field(0x14, 4, phys_module_id) 598c2ecf20Sopenharmony_ci __field(0x18, 4, primary_affinity_domain_idx) 608c2ecf20Sopenharmony_ci __field(0x1C, 4, secondary_affinity_domain_idx) 618c2ecf20Sopenharmony_ci __field(0x20, 4, processor_version) 628c2ecf20Sopenharmony_ci __field(0x24, 2, logical_processor_idx) 638c2ecf20Sopenharmony_ci __field(0x26, 2, reserved) 648c2ecf20Sopenharmony_ci __field(0x28, 4, processor_id_register) 658c2ecf20Sopenharmony_ci __field(0x2C, 4, phys_processor_idx) 668c2ecf20Sopenharmony_ci) 678c2ecf20Sopenharmony_ci#include I(REQUEST_END) 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci#define REQUEST_NAME entitled_capped_uncapped_donated_idle_timebase_by_partition 708c2ecf20Sopenharmony_ci#define REQUEST_NUM 0x20 718c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "sibling_part_id=?" 728c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 738c2ecf20Sopenharmony_ciREQUEST(__field(0, 8, partition_id) 748c2ecf20Sopenharmony_ci __count(0x8, 8, entitled_cycles) 758c2ecf20Sopenharmony_ci __count(0x10, 8, consumed_capped_cycles) 768c2ecf20Sopenharmony_ci __count(0x18, 8, consumed_uncapped_cycles) 778c2ecf20Sopenharmony_ci __count(0x20, 8, cycles_donated) 788c2ecf20Sopenharmony_ci __count(0x28, 8, purr_idle_cycles) 798c2ecf20Sopenharmony_ci) 808c2ecf20Sopenharmony_ci#include I(REQUEST_END) 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci#ifdef ENABLE_EVENTS_COUNTERINFO_V6 838c2ecf20Sopenharmony_ci/* 848c2ecf20Sopenharmony_ci * Not available for counter_info_version >= 0x8, use 858c2ecf20Sopenharmony_ci * run_instruction_cycles_by_partition(0x100) instead. 868c2ecf20Sopenharmony_ci */ 878c2ecf20Sopenharmony_ci#define REQUEST_NAME run_instructions_run_cycles_by_partition 888c2ecf20Sopenharmony_ci#define REQUEST_NUM 0x30 898c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "sibling_part_id=?" 908c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 918c2ecf20Sopenharmony_ciREQUEST(__field(0, 8, partition_id) 928c2ecf20Sopenharmony_ci __count(0x8, 8, instructions_completed) 938c2ecf20Sopenharmony_ci __count(0x10, 8, cycles) 948c2ecf20Sopenharmony_ci) 958c2ecf20Sopenharmony_ci#include I(REQUEST_END) 968c2ecf20Sopenharmony_ci#endif 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ci#define REQUEST_NAME system_performance_capabilities 998c2ecf20Sopenharmony_ci#define REQUEST_NUM 0x40 1008c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "starting_index=0xffffffff" 1018c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 1028c2ecf20Sopenharmony_ciREQUEST(__field(0, 1, perf_collect_privileged) 1038c2ecf20Sopenharmony_ci __field(0x1, 1, capability_mask) 1048c2ecf20Sopenharmony_ci __array(0x2, 0xE, reserved) 1058c2ecf20Sopenharmony_ci) 1068c2ecf20Sopenharmony_ci#include I(REQUEST_END) 1078c2ecf20Sopenharmony_ci 1088c2ecf20Sopenharmony_ci#ifdef ENABLE_EVENTS_COUNTERINFO_V6 1098c2ecf20Sopenharmony_ci#define REQUEST_NAME processor_bus_utilization_abc_links 1108c2ecf20Sopenharmony_ci#define REQUEST_NUM 0x50 1118c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "hw_chip_id=?" 1128c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 1138c2ecf20Sopenharmony_ciREQUEST(__field(0, 4, hw_chip_id) 1148c2ecf20Sopenharmony_ci __array(0x4, 0xC, reserved1) 1158c2ecf20Sopenharmony_ci __count(0x10, 8, total_link_cycles) 1168c2ecf20Sopenharmony_ci __count(0x18, 8, idle_cycles_for_a_link) 1178c2ecf20Sopenharmony_ci __count(0x20, 8, idle_cycles_for_b_link) 1188c2ecf20Sopenharmony_ci __count(0x28, 8, idle_cycles_for_c_link) 1198c2ecf20Sopenharmony_ci __array(0x30, 0x20, reserved2) 1208c2ecf20Sopenharmony_ci) 1218c2ecf20Sopenharmony_ci#include I(REQUEST_END) 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci#define REQUEST_NAME processor_bus_utilization_wxyz_links 1248c2ecf20Sopenharmony_ci#define REQUEST_NUM 0x60 1258c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "hw_chip_id=?" 1268c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 1278c2ecf20Sopenharmony_ciREQUEST(__field(0, 4, hw_chip_id) 1288c2ecf20Sopenharmony_ci __array(0x4, 0xC, reserved1) 1298c2ecf20Sopenharmony_ci __count(0x10, 8, total_link_cycles) 1308c2ecf20Sopenharmony_ci __count(0x18, 8, idle_cycles_for_w_link) 1318c2ecf20Sopenharmony_ci __count(0x20, 8, idle_cycles_for_x_link) 1328c2ecf20Sopenharmony_ci __count(0x28, 8, idle_cycles_for_y_link) 1338c2ecf20Sopenharmony_ci __count(0x30, 8, idle_cycles_for_z_link) 1348c2ecf20Sopenharmony_ci __array(0x38, 0x28, reserved2) 1358c2ecf20Sopenharmony_ci) 1368c2ecf20Sopenharmony_ci#include I(REQUEST_END) 1378c2ecf20Sopenharmony_ci 1388c2ecf20Sopenharmony_ci#define REQUEST_NAME processor_bus_utilization_gx_links 1398c2ecf20Sopenharmony_ci#define REQUEST_NUM 0x70 1408c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "hw_chip_id=?" 1418c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 1428c2ecf20Sopenharmony_ciREQUEST(__field(0, 4, hw_chip_id) 1438c2ecf20Sopenharmony_ci __array(0x4, 0xC, reserved1) 1448c2ecf20Sopenharmony_ci __count(0x10, 8, gx0_in_address_cycles) 1458c2ecf20Sopenharmony_ci __count(0x18, 8, gx0_in_data_cycles) 1468c2ecf20Sopenharmony_ci __count(0x20, 8, gx0_in_retries) 1478c2ecf20Sopenharmony_ci __count(0x28, 8, gx0_in_bus_cycles) 1488c2ecf20Sopenharmony_ci __count(0x30, 8, gx0_in_cycles_total) 1498c2ecf20Sopenharmony_ci __count(0x38, 8, gx0_out_address_cycles) 1508c2ecf20Sopenharmony_ci __count(0x40, 8, gx0_out_data_cycles) 1518c2ecf20Sopenharmony_ci __count(0x48, 8, gx0_out_retries) 1528c2ecf20Sopenharmony_ci __count(0x50, 8, gx0_out_bus_cycles) 1538c2ecf20Sopenharmony_ci __count(0x58, 8, gx0_out_cycles_total) 1548c2ecf20Sopenharmony_ci __count(0x60, 8, gx1_in_address_cycles) 1558c2ecf20Sopenharmony_ci __count(0x68, 8, gx1_in_data_cycles) 1568c2ecf20Sopenharmony_ci __count(0x70, 8, gx1_in_retries) 1578c2ecf20Sopenharmony_ci __count(0x78, 8, gx1_in_bus_cycles) 1588c2ecf20Sopenharmony_ci __count(0x80, 8, gx1_in_cycles_total) 1598c2ecf20Sopenharmony_ci __count(0x88, 8, gx1_out_address_cycles) 1608c2ecf20Sopenharmony_ci __count(0x90, 8, gx1_out_data_cycles) 1618c2ecf20Sopenharmony_ci __count(0x98, 8, gx1_out_retries) 1628c2ecf20Sopenharmony_ci __count(0xA0, 8, gx1_out_bus_cycles) 1638c2ecf20Sopenharmony_ci __count(0xA8, 8, gx1_out_cycles_total) 1648c2ecf20Sopenharmony_ci) 1658c2ecf20Sopenharmony_ci#include I(REQUEST_END) 1668c2ecf20Sopenharmony_ci 1678c2ecf20Sopenharmony_ci#define REQUEST_NAME processor_bus_utilization_mc_links 1688c2ecf20Sopenharmony_ci#define REQUEST_NUM 0x80 1698c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "hw_chip_id=?" 1708c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 1718c2ecf20Sopenharmony_ciREQUEST(__field(0, 4, hw_chip_id) 1728c2ecf20Sopenharmony_ci __array(0x4, 0xC, reserved1) 1738c2ecf20Sopenharmony_ci __count(0x10, 8, mc0_frames) 1748c2ecf20Sopenharmony_ci __count(0x18, 8, mc0_reads) 1758c2ecf20Sopenharmony_ci __count(0x20, 8, mc0_write) 1768c2ecf20Sopenharmony_ci __count(0x28, 8, mc0_total_cycles) 1778c2ecf20Sopenharmony_ci __count(0x30, 8, mc1_frames) 1788c2ecf20Sopenharmony_ci __count(0x38, 8, mc1_reads) 1798c2ecf20Sopenharmony_ci __count(0x40, 8, mc1_writes) 1808c2ecf20Sopenharmony_ci __count(0x48, 8, mc1_total_cycles) 1818c2ecf20Sopenharmony_ci) 1828c2ecf20Sopenharmony_ci#include I(REQUEST_END) 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_ci/* Processor_config (0x90) skipped, no counters */ 1858c2ecf20Sopenharmony_ci/* Current_processor_frequency (0x91) skipped, no counters */ 1868c2ecf20Sopenharmony_ci 1878c2ecf20Sopenharmony_ci#define REQUEST_NAME processor_core_utilization 1888c2ecf20Sopenharmony_ci#define REQUEST_NUM 0x94 1898c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "phys_processor_idx=?" 1908c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 1918c2ecf20Sopenharmony_ciREQUEST(__field(0, 4, phys_processor_idx) 1928c2ecf20Sopenharmony_ci __field(0x4, 4, hw_processor_id) 1938c2ecf20Sopenharmony_ci __count(0x8, 8, cycles_across_any_thread) 1948c2ecf20Sopenharmony_ci __count(0x10, 8, timebase_at_collection) 1958c2ecf20Sopenharmony_ci __count(0x18, 8, purr_cycles) 1968c2ecf20Sopenharmony_ci __count(0x20, 8, sum_of_cycles_across_all_threads) 1978c2ecf20Sopenharmony_ci __count(0x28, 8, instructions_completed) 1988c2ecf20Sopenharmony_ci) 1998c2ecf20Sopenharmony_ci#include I(REQUEST_END) 2008c2ecf20Sopenharmony_ci#endif 2018c2ecf20Sopenharmony_ci 2028c2ecf20Sopenharmony_ci/* Processor_core_power_mode (0x95) skipped, no counters */ 2038c2ecf20Sopenharmony_ci/* Affinity_domain_information_by_virtual_processor (0xA0) skipped, 2048c2ecf20Sopenharmony_ci * no counters */ 2058c2ecf20Sopenharmony_ci/* Affinity_domain_information_by_domain (0xB0) skipped, no counters */ 2068c2ecf20Sopenharmony_ci/* Affinity_domain_information_by_partition (0xB1) skipped, no counters */ 2078c2ecf20Sopenharmony_ci/* Physical_memory_info (0xC0) skipped, no counters */ 2088c2ecf20Sopenharmony_ci/* Processor_bus_topology (0xD0) skipped, no counters */ 2098c2ecf20Sopenharmony_ci 2108c2ecf20Sopenharmony_ci#define REQUEST_NAME partition_hypervisor_queuing_times 2118c2ecf20Sopenharmony_ci#define REQUEST_NUM 0xE0 2128c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "partition_id=?" 2138c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 2148c2ecf20Sopenharmony_ciREQUEST(__field(0, 2, partition_id) 2158c2ecf20Sopenharmony_ci __array(0x2, 6, reserved1) 2168c2ecf20Sopenharmony_ci __count(0x8, 8, time_waiting_for_entitlement) 2178c2ecf20Sopenharmony_ci __count(0x10, 8, times_waited_for_entitlement) 2188c2ecf20Sopenharmony_ci __count(0x18, 8, time_waiting_for_phys_processor) 2198c2ecf20Sopenharmony_ci __count(0x20, 8, times_waited_for_phys_processor) 2208c2ecf20Sopenharmony_ci __count(0x28, 8, dispatches_on_home_core) 2218c2ecf20Sopenharmony_ci __count(0x30, 8, dispatches_on_home_primary_affinity_domain) 2228c2ecf20Sopenharmony_ci __count(0x38, 8, dispatches_on_home_secondary_affinity_domain) 2238c2ecf20Sopenharmony_ci __count(0x40, 8, dispatches_off_home_secondary_affinity_domain) 2248c2ecf20Sopenharmony_ci __count(0x48, 8, dispatches_on_dedicated_processor_donating_cycles) 2258c2ecf20Sopenharmony_ci) 2268c2ecf20Sopenharmony_ci#include I(REQUEST_END) 2278c2ecf20Sopenharmony_ci 2288c2ecf20Sopenharmony_ci#define REQUEST_NAME system_hypervisor_times 2298c2ecf20Sopenharmony_ci#define REQUEST_NUM 0xF0 2308c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "starting_index=0xffffffff" 2318c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 2328c2ecf20Sopenharmony_ciREQUEST(__count(0, 8, time_spent_to_dispatch_virtual_processors) 2338c2ecf20Sopenharmony_ci __count(0x8, 8, time_spent_processing_virtual_processor_timers) 2348c2ecf20Sopenharmony_ci __count(0x10, 8, time_spent_managing_partitions_over_entitlement) 2358c2ecf20Sopenharmony_ci __count(0x18, 8, time_spent_on_system_management) 2368c2ecf20Sopenharmony_ci) 2378c2ecf20Sopenharmony_ci#include I(REQUEST_END) 2388c2ecf20Sopenharmony_ci 2398c2ecf20Sopenharmony_ci#define REQUEST_NAME system_tlbie_count_and_time 2408c2ecf20Sopenharmony_ci#define REQUEST_NUM 0xF4 2418c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "starting_index=0xffffffff" 2428c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 2438c2ecf20Sopenharmony_ciREQUEST(__count(0, 8, tlbie_instructions_issued) 2448c2ecf20Sopenharmony_ci /* 2458c2ecf20Sopenharmony_ci * FIXME: The spec says the offset here is 0x10, which I suspect 2468c2ecf20Sopenharmony_ci * is wrong. 2478c2ecf20Sopenharmony_ci */ 2488c2ecf20Sopenharmony_ci __count(0x8, 8, time_spent_issuing_tlbies) 2498c2ecf20Sopenharmony_ci) 2508c2ecf20Sopenharmony_ci#include I(REQUEST_END) 2518c2ecf20Sopenharmony_ci 2528c2ecf20Sopenharmony_ci#define REQUEST_NAME partition_instruction_count_and_time 2538c2ecf20Sopenharmony_ci#define REQUEST_NUM 0x100 2548c2ecf20Sopenharmony_ci#define REQUEST_IDX_KIND "partition_id=?" 2558c2ecf20Sopenharmony_ci#include I(REQUEST_BEGIN) 2568c2ecf20Sopenharmony_ciREQUEST(__field(0, 2, partition_id) 2578c2ecf20Sopenharmony_ci __array(0x2, 0x6, reserved1) 2588c2ecf20Sopenharmony_ci __count(0x8, 8, instructions_performed) 2598c2ecf20Sopenharmony_ci __count(0x10, 8, time_collected) 2608c2ecf20Sopenharmony_ci) 2618c2ecf20Sopenharmony_ci#include I(REQUEST_END) 2628c2ecf20Sopenharmony_ci 2638c2ecf20Sopenharmony_ci/* set_mmcrh (0x80001000) skipped, no counters */ 2648c2ecf20Sopenharmony_ci/* retrieve_hpmcx (0x80002000) skipped, no counters */ 2658c2ecf20Sopenharmony_ci 2668c2ecf20Sopenharmony_ci#include "req-gen/_end.h" 267