162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * From PPR Vol 1 for AMD Family 19h Model 01h B1 462306a36Sopenharmony_ci * 55898 Rev 0.35 - Feb 5, 2021 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include "msr-index.h" 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci/* IBS_OP_DATA2 DataSrc */ 1062306a36Sopenharmony_ci#define IBS_DATA_SRC_LOC_CACHE 2 1162306a36Sopenharmony_ci#define IBS_DATA_SRC_DRAM 3 1262306a36Sopenharmony_ci#define IBS_DATA_SRC_REM_CACHE 4 1362306a36Sopenharmony_ci#define IBS_DATA_SRC_IO 7 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/* IBS_OP_DATA2 DataSrc Extension */ 1662306a36Sopenharmony_ci#define IBS_DATA_SRC_EXT_LOC_CACHE 1 1762306a36Sopenharmony_ci#define IBS_DATA_SRC_EXT_NEAR_CCX_CACHE 2 1862306a36Sopenharmony_ci#define IBS_DATA_SRC_EXT_DRAM 3 1962306a36Sopenharmony_ci#define IBS_DATA_SRC_EXT_FAR_CCX_CACHE 5 2062306a36Sopenharmony_ci#define IBS_DATA_SRC_EXT_PMEM 6 2162306a36Sopenharmony_ci#define IBS_DATA_SRC_EXT_IO 7 2262306a36Sopenharmony_ci#define IBS_DATA_SRC_EXT_EXT_MEM 8 2362306a36Sopenharmony_ci#define IBS_DATA_SRC_EXT_PEER_AGENT_MEM 12 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci/* 2662306a36Sopenharmony_ci * IBS Hardware MSRs 2762306a36Sopenharmony_ci */ 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci/* MSR 0xc0011030: IBS Fetch Control */ 3062306a36Sopenharmony_ciunion ibs_fetch_ctl { 3162306a36Sopenharmony_ci __u64 val; 3262306a36Sopenharmony_ci struct { 3362306a36Sopenharmony_ci __u64 fetch_maxcnt:16,/* 0-15: instruction fetch max. count */ 3462306a36Sopenharmony_ci fetch_cnt:16, /* 16-31: instruction fetch count */ 3562306a36Sopenharmony_ci fetch_lat:16, /* 32-47: instruction fetch latency */ 3662306a36Sopenharmony_ci fetch_en:1, /* 48: instruction fetch enable */ 3762306a36Sopenharmony_ci fetch_val:1, /* 49: instruction fetch valid */ 3862306a36Sopenharmony_ci fetch_comp:1, /* 50: instruction fetch complete */ 3962306a36Sopenharmony_ci ic_miss:1, /* 51: i-cache miss */ 4062306a36Sopenharmony_ci phy_addr_valid:1,/* 52: physical address valid */ 4162306a36Sopenharmony_ci l1tlb_pgsz:2, /* 53-54: i-cache L1TLB page size 4262306a36Sopenharmony_ci * (needs IbsPhyAddrValid) */ 4362306a36Sopenharmony_ci l1tlb_miss:1, /* 55: i-cache fetch missed in L1TLB */ 4462306a36Sopenharmony_ci l2tlb_miss:1, /* 56: i-cache fetch missed in L2TLB */ 4562306a36Sopenharmony_ci rand_en:1, /* 57: random tagging enable */ 4662306a36Sopenharmony_ci fetch_l2_miss:1,/* 58: L2 miss for sampled fetch 4762306a36Sopenharmony_ci * (needs IbsFetchComp) */ 4862306a36Sopenharmony_ci l3_miss_only:1, /* 59: Collect L3 miss samples only */ 4962306a36Sopenharmony_ci fetch_oc_miss:1,/* 60: Op cache miss for the sampled fetch */ 5062306a36Sopenharmony_ci fetch_l3_miss:1,/* 61: L3 cache miss for the sampled fetch */ 5162306a36Sopenharmony_ci reserved:2; /* 62-63: reserved */ 5262306a36Sopenharmony_ci }; 5362306a36Sopenharmony_ci}; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci/* MSR 0xc0011033: IBS Execution Control */ 5662306a36Sopenharmony_ciunion ibs_op_ctl { 5762306a36Sopenharmony_ci __u64 val; 5862306a36Sopenharmony_ci struct { 5962306a36Sopenharmony_ci __u64 opmaxcnt:16, /* 0-15: periodic op max. count */ 6062306a36Sopenharmony_ci l3_miss_only:1, /* 16: Collect L3 miss samples only */ 6162306a36Sopenharmony_ci op_en:1, /* 17: op sampling enable */ 6262306a36Sopenharmony_ci op_val:1, /* 18: op sample valid */ 6362306a36Sopenharmony_ci cnt_ctl:1, /* 19: periodic op counter control */ 6462306a36Sopenharmony_ci opmaxcnt_ext:7, /* 20-26: upper 7 bits of periodic op maximum count */ 6562306a36Sopenharmony_ci reserved0:5, /* 27-31: reserved */ 6662306a36Sopenharmony_ci opcurcnt:27, /* 32-58: periodic op counter current count */ 6762306a36Sopenharmony_ci reserved1:5; /* 59-63: reserved */ 6862306a36Sopenharmony_ci }; 6962306a36Sopenharmony_ci}; 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci/* MSR 0xc0011035: IBS Op Data 1 */ 7262306a36Sopenharmony_ciunion ibs_op_data { 7362306a36Sopenharmony_ci __u64 val; 7462306a36Sopenharmony_ci struct { 7562306a36Sopenharmony_ci __u64 comp_to_ret_ctr:16, /* 0-15: op completion to retire count */ 7662306a36Sopenharmony_ci tag_to_ret_ctr:16, /* 15-31: op tag to retire count */ 7762306a36Sopenharmony_ci reserved1:2, /* 32-33: reserved */ 7862306a36Sopenharmony_ci op_return:1, /* 34: return op */ 7962306a36Sopenharmony_ci op_brn_taken:1, /* 35: taken branch op */ 8062306a36Sopenharmony_ci op_brn_misp:1, /* 36: mispredicted branch op */ 8162306a36Sopenharmony_ci op_brn_ret:1, /* 37: branch op retired */ 8262306a36Sopenharmony_ci op_rip_invalid:1, /* 38: RIP is invalid */ 8362306a36Sopenharmony_ci op_brn_fuse:1, /* 39: fused branch op */ 8462306a36Sopenharmony_ci op_microcode:1, /* 40: microcode op */ 8562306a36Sopenharmony_ci reserved2:23; /* 41-63: reserved */ 8662306a36Sopenharmony_ci }; 8762306a36Sopenharmony_ci}; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci/* MSR 0xc0011036: IBS Op Data 2 */ 9062306a36Sopenharmony_ciunion ibs_op_data2 { 9162306a36Sopenharmony_ci __u64 val; 9262306a36Sopenharmony_ci struct { 9362306a36Sopenharmony_ci __u64 data_src_lo:3, /* 0-2: data source low */ 9462306a36Sopenharmony_ci reserved0:1, /* 3: reserved */ 9562306a36Sopenharmony_ci rmt_node:1, /* 4: destination node */ 9662306a36Sopenharmony_ci cache_hit_st:1, /* 5: cache hit state */ 9762306a36Sopenharmony_ci data_src_hi:2, /* 6-7: data source high */ 9862306a36Sopenharmony_ci reserved1:56; /* 8-63: reserved */ 9962306a36Sopenharmony_ci }; 10062306a36Sopenharmony_ci}; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci/* MSR 0xc0011037: IBS Op Data 3 */ 10362306a36Sopenharmony_ciunion ibs_op_data3 { 10462306a36Sopenharmony_ci __u64 val; 10562306a36Sopenharmony_ci struct { 10662306a36Sopenharmony_ci __u64 ld_op:1, /* 0: load op */ 10762306a36Sopenharmony_ci st_op:1, /* 1: store op */ 10862306a36Sopenharmony_ci dc_l1tlb_miss:1, /* 2: data cache L1TLB miss */ 10962306a36Sopenharmony_ci dc_l2tlb_miss:1, /* 3: data cache L2TLB hit in 2M page */ 11062306a36Sopenharmony_ci dc_l1tlb_hit_2m:1, /* 4: data cache L1TLB hit in 2M page */ 11162306a36Sopenharmony_ci dc_l1tlb_hit_1g:1, /* 5: data cache L1TLB hit in 1G page */ 11262306a36Sopenharmony_ci dc_l2tlb_hit_2m:1, /* 6: data cache L2TLB hit in 2M page */ 11362306a36Sopenharmony_ci dc_miss:1, /* 7: data cache miss */ 11462306a36Sopenharmony_ci dc_mis_acc:1, /* 8: misaligned access */ 11562306a36Sopenharmony_ci reserved:4, /* 9-12: reserved */ 11662306a36Sopenharmony_ci dc_wc_mem_acc:1, /* 13: write combining memory access */ 11762306a36Sopenharmony_ci dc_uc_mem_acc:1, /* 14: uncacheable memory access */ 11862306a36Sopenharmony_ci dc_locked_op:1, /* 15: locked operation */ 11962306a36Sopenharmony_ci dc_miss_no_mab_alloc:1, /* 16: DC miss with no MAB allocated */ 12062306a36Sopenharmony_ci dc_lin_addr_valid:1, /* 17: data cache linear address valid */ 12162306a36Sopenharmony_ci dc_phy_addr_valid:1, /* 18: data cache physical address valid */ 12262306a36Sopenharmony_ci dc_l2_tlb_hit_1g:1, /* 19: data cache L2 hit in 1GB page */ 12362306a36Sopenharmony_ci l2_miss:1, /* 20: L2 cache miss */ 12462306a36Sopenharmony_ci sw_pf:1, /* 21: software prefetch */ 12562306a36Sopenharmony_ci op_mem_width:4, /* 22-25: load/store size in bytes */ 12662306a36Sopenharmony_ci op_dc_miss_open_mem_reqs:6, /* 26-31: outstanding mem reqs on DC fill */ 12762306a36Sopenharmony_ci dc_miss_lat:16, /* 32-47: data cache miss latency */ 12862306a36Sopenharmony_ci tlb_refill_lat:16; /* 48-63: L1 TLB refill latency */ 12962306a36Sopenharmony_ci }; 13062306a36Sopenharmony_ci}; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci/* MSR 0xc001103c: IBS Fetch Control Extended */ 13362306a36Sopenharmony_ciunion ic_ibs_extd_ctl { 13462306a36Sopenharmony_ci __u64 val; 13562306a36Sopenharmony_ci struct { 13662306a36Sopenharmony_ci __u64 itlb_refill_lat:16, /* 0-15: ITLB Refill latency for sampled fetch */ 13762306a36Sopenharmony_ci reserved:48; /* 16-63: reserved */ 13862306a36Sopenharmony_ci }; 13962306a36Sopenharmony_ci}; 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci/* 14262306a36Sopenharmony_ci * IBS driver related 14362306a36Sopenharmony_ci */ 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_cistruct perf_ibs_data { 14662306a36Sopenharmony_ci u32 size; 14762306a36Sopenharmony_ci union { 14862306a36Sopenharmony_ci u32 data[0]; /* data buffer starts here */ 14962306a36Sopenharmony_ci u32 caps; 15062306a36Sopenharmony_ci }; 15162306a36Sopenharmony_ci u64 regs[MSR_AMD64_IBS_REG_COUNT_MAX]; 15262306a36Sopenharmony_ci}; 153