Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 1 | /** |
| 2 | * @file daemon/opd_ibs_macro.h |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 3 | * AMD Instruction Based Sampling (IBS) related macro. |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 4 | * |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 5 | * @remark Copyright 2008-2010 OProfile authors |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 6 | * @remark Read the file COPYING |
| 7 | * |
| 8 | * @author Jason Yeh <jason.yeh@amd.com> |
| 9 | * @author Paul Drongowski <paul.drongowski@amd.com> |
| 10 | * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> |
| 11 | * Copyright (c) 2008 Advanced Micro Devices, Inc. |
| 12 | */ |
| 13 | |
| 14 | #ifndef OPD_IBS_MACRO_H |
| 15 | #define OPD_IBS_MACRO_H |
| 16 | |
| 17 | /** |
| 18 | * The following defines are bit masks that are used to select |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 19 | * IBS fetch event flags and values at the |
| 20 | * MSRC001_1030 IBS Fetch Control Register (IbsFetchCtl) |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 21 | */ |
| 22 | #define FETCH_MASK_LATENCY 0x0000ffff |
| 23 | #define FETCH_MASK_COMPLETE 0x00040000 |
| 24 | #define FETCH_MASK_IC_MISS 0x00080000 |
| 25 | #define FETCH_MASK_PHY_ADDR 0x00100000 |
| 26 | #define FETCH_MASK_PG_SIZE 0x00600000 |
| 27 | #define FETCH_MASK_L1_MISS 0x00800000 |
| 28 | #define FETCH_MASK_L2_MISS 0x01000000 |
| 29 | #define FETCH_MASK_KILLED \ |
| 30 | (FETCH_MASK_L1_MISS|FETCH_MASK_L2_MISS|FETCH_MASK_PHY_ADDR|\ |
| 31 | FETCH_MASK_COMPLETE|FETCH_MASK_IC_MISS) |
| 32 | |
| 33 | |
| 34 | /** |
| 35 | * The following defines are bit masks that are used to select |
| 36 | * IBS op event flags and values at the MSR level. |
| 37 | */ |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 38 | |
| 39 | /* MSRC001_1035 IBS Op Data Register (IbsOpData) */ |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 40 | #define BR_MASK_RETIRE 0x0000ffff |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 41 | #define MASK_RIP_INVALID 0x00000040 |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 42 | #define BR_MASK_BRN_RET 0x00000020 |
| 43 | #define BR_MASK_BRN_MISP 0x00000010 |
| 44 | #define BR_MASK_BRN_TAKEN 0x00000008 |
| 45 | #define BR_MASK_RETURN 0x00000004 |
| 46 | #define BR_MASK_MISP_RETURN 0x00000002 |
| 47 | #define BR_MASK_BRN_RESYNC 0x00000001 |
| 48 | |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 49 | /* MSRC001_1036 IBS Op Data Register (IbsOpData2) */ |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 50 | #define NB_MASK_L3_STATE 0x00000020 |
| 51 | #define NB_MASK_REQ_DST_PROC 0x00000010 |
| 52 | #define NB_MASK_REQ_DATA_SRC 0x00000007 |
| 53 | |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 54 | /* MSRC001_1037 IBS Op Data Register (IbsOpData3) */ |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 55 | #define DC_MASK_L2_HIT_1G 0x00080000 |
| 56 | #define DC_MASK_PHY_ADDR_VALID 0x00040000 |
| 57 | #define DC_MASK_LIN_ADDR_VALID 0x00020000 |
| 58 | #define DC_MASK_MAB_HIT 0x00010000 |
| 59 | #define DC_MASK_LOCKED_OP 0x00008000 |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 60 | #define DC_MASK_UC_MEM_ACCESS 0x00004000 |
| 61 | #define DC_MASK_WC_MEM_ACCESS 0x00002000 |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 62 | #define DC_MASK_ST_TO_LD_CANCEL 0x00001000 |
| 63 | #define DC_MASK_ST_TO_LD_FOR 0x00000800 |
| 64 | #define DC_MASK_ST_BANK_CONFLICT 0x00000400 |
| 65 | #define DC_MASK_LD_BANK_CONFLICT 0x00000200 |
| 66 | #define DC_MASK_MISALIGN_ACCESS 0x00000100 |
| 67 | #define DC_MASK_DC_MISS 0x00000080 |
| 68 | #define DC_MASK_L2_HIT_2M 0x00000040 |
| 69 | #define DC_MASK_L1_HIT_1G 0x00000020 |
| 70 | #define DC_MASK_L1_HIT_2M 0x00000010 |
| 71 | #define DC_MASK_L2_TLB_MISS 0x00000008 |
| 72 | #define DC_MASK_L1_TLB_MISS 0x00000004 |
| 73 | #define DC_MASK_STORE_OP 0x00000002 |
| 74 | #define DC_MASK_LOAD_OP 0x00000001 |
| 75 | |
| 76 | |
| 77 | /** |
| 78 | * IBS derived events: |
| 79 | * |
| 80 | * IBS derived events are identified by event select values which are |
| 81 | * similar to the event select values that identify performance monitoring |
| 82 | * counter (PMC) events. Event select values for IBS derived events begin |
| 83 | * at 0xf000. |
| 84 | * |
| 85 | * The definitions in this file *must* match definitions |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 86 | * of IBS derived events. More information |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 87 | * about IBS derived events is given in the Software Oprimization |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 88 | * Guide. |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 89 | */ |
| 90 | |
| 91 | /** |
| 92 | * The following defines associate a 16-bit select value with an IBS |
| 93 | * derived fetch event. |
| 94 | */ |
| 95 | #define DE_IBS_FETCH_ALL 0xf000 |
| 96 | #define DE_IBS_FETCH_KILLED 0xf001 |
| 97 | #define DE_IBS_FETCH_ATTEMPTED 0xf002 |
| 98 | #define DE_IBS_FETCH_COMPLETED 0xf003 |
| 99 | #define DE_IBS_FETCH_ABORTED 0xf004 |
| 100 | #define DE_IBS_L1_ITLB_HIT 0xf005 |
| 101 | #define DE_IBS_ITLB_L1M_L2H 0xf006 |
| 102 | #define DE_IBS_ITLB_L1M_L2M 0xf007 |
| 103 | #define DE_IBS_IC_MISS 0xf008 |
| 104 | #define DE_IBS_IC_HIT 0xf009 |
| 105 | #define DE_IBS_FETCH_4K_PAGE 0xf00a |
| 106 | #define DE_IBS_FETCH_2M_PAGE 0xf00b |
| 107 | #define DE_IBS_FETCH_1G_PAGE 0xf00c |
| 108 | #define DE_IBS_FETCH_XX_PAGE 0xf00d |
| 109 | #define DE_IBS_FETCH_LATENCY 0xf00e |
| 110 | |
| 111 | #define IBS_FETCH_BASE 0xf000 |
| 112 | #define IBS_FETCH_END 0xf00e |
| 113 | #define IBS_FETCH_MAX (IBS_FETCH_END - IBS_FETCH_BASE + 1) |
| 114 | #define IS_IBS_FETCH(x) (IBS_FETCH_BASE <= x && x <= IBS_FETCH_END) |
| 115 | #define IBS_FETCH_OFFSET(x) (x - IBS_FETCH_BASE) |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 116 | #define CHECK_FETCH_SELECTED_FLAG(x) if ( selected_flag & (1 << IBS_FETCH_OFFSET(x))) |
| 117 | |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 118 | |
| 119 | /** |
| 120 | * The following defines associate a 16-bit select value with an IBS |
| 121 | * derived branch/return macro-op event. |
| 122 | */ |
| 123 | #define DE_IBS_OP_ALL 0xf100 |
| 124 | #define DE_IBS_OP_TAG_TO_RETIRE 0xf101 |
| 125 | #define DE_IBS_OP_COMP_TO_RETIRE 0xf102 |
| 126 | #define DE_IBS_BRANCH_RETIRED 0xf103 |
| 127 | #define DE_IBS_BRANCH_MISP 0xf104 |
| 128 | #define DE_IBS_BRANCH_TAKEN 0xf105 |
| 129 | #define DE_IBS_BRANCH_MISP_TAKEN 0xf106 |
| 130 | #define DE_IBS_RETURN 0xf107 |
| 131 | #define DE_IBS_RETURN_MISP 0xf108 |
| 132 | #define DE_IBS_RESYNC 0xf109 |
| 133 | |
| 134 | #define IBS_OP_BASE 0xf100 |
| 135 | #define IBS_OP_END 0xf109 |
| 136 | #define IBS_OP_MAX (IBS_OP_END - IBS_OP_BASE + 1) |
| 137 | #define IS_IBS_OP(x) (IBS_OP_BASE <= x && x <= IBS_OP_END) |
| 138 | #define IBS_OP_OFFSET(x) (x - IBS_OP_BASE) |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 139 | #define CHECK_OP_SELECTED_FLAG(x) if ( selected_flag & (1 << IBS_OP_OFFSET(x))) |
| 140 | |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 141 | |
| 142 | /** |
| 143 | * The following defines associate a 16-bit select value with an IBS |
| 144 | * derived load/store event. |
| 145 | */ |
| 146 | #define DE_IBS_LS_ALL_OP 0xf200 |
| 147 | #define DE_IBS_LS_LOAD_OP 0xf201 |
| 148 | #define DE_IBS_LS_STORE_OP 0xf202 |
| 149 | #define DE_IBS_LS_DTLB_L1H 0xf203 |
| 150 | #define DE_IBS_LS_DTLB_L1M_L2H 0xf204 |
| 151 | #define DE_IBS_LS_DTLB_L1M_L2M 0xf205 |
| 152 | #define DE_IBS_LS_DC_MISS 0xf206 |
| 153 | #define DE_IBS_LS_DC_HIT 0xf207 |
| 154 | #define DE_IBS_LS_MISALIGNED 0xf208 |
| 155 | #define DE_IBS_LS_BNK_CONF_LOAD 0xf209 |
| 156 | #define DE_IBS_LS_BNK_CONF_STORE 0xf20a |
| 157 | #define DE_IBS_LS_STL_FORWARDED 0xf20b |
| 158 | #define DE_IBS_LS_STL_CANCELLED 0xf20c |
| 159 | #define DE_IBS_LS_UC_MEM_ACCESS 0xf20d |
| 160 | #define DE_IBS_LS_WC_MEM_ACCESS 0xf20e |
| 161 | #define DE_IBS_LS_LOCKED_OP 0xf20f |
| 162 | #define DE_IBS_LS_MAB_HIT 0xf210 |
| 163 | #define DE_IBS_LS_L1_DTLB_4K 0xf211 |
| 164 | #define DE_IBS_LS_L1_DTLB_2M 0xf212 |
| 165 | #define DE_IBS_LS_L1_DTLB_1G 0xf213 |
| 166 | #define DE_IBS_LS_L1_DTLB_RES 0xf214 |
| 167 | #define DE_IBS_LS_L2_DTLB_4K 0xf215 |
| 168 | #define DE_IBS_LS_L2_DTLB_2M 0xf216 |
| 169 | #define DE_IBS_LS_L2_DTLB_1G 0xf217 |
| 170 | #define DE_IBS_LS_L2_DTLB_RES2 0xf218 |
| 171 | #define DE_IBS_LS_DC_LOAD_LAT 0xf219 |
| 172 | |
| 173 | #define IBS_OP_LS_BASE 0xf200 |
| 174 | #define IBS_OP_LS_END 0xf219 |
| 175 | #define IBS_OP_LS_MAX (IBS_OP_LS_END - IBS_OP_LS_BASE + 1) |
| 176 | #define IS_IBS_OP_LS(x) (IBS_OP_LS_BASE <= x && x <= IBS_OP_LS_END) |
| 177 | #define IBS_OP_LS_OFFSET(x) (x - IBS_OP_LS_BASE) |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 178 | #define CHECK_OP_LS_SELECTED_FLAG(x) if ( selected_flag & (1 << IBS_OP_LS_OFFSET(x))) |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 179 | |
| 180 | |
| 181 | /** |
| 182 | * The following defines associate a 16-bit select value with an IBS |
| 183 | * derived Northbridge (NB) event. |
| 184 | */ |
| 185 | #define DE_IBS_NB_LOCAL 0xf240 |
| 186 | #define DE_IBS_NB_REMOTE 0xf241 |
| 187 | #define DE_IBS_NB_LOCAL_L3 0xf242 |
| 188 | #define DE_IBS_NB_LOCAL_CACHE 0xf243 |
| 189 | #define DE_IBS_NB_REMOTE_CACHE 0xf244 |
| 190 | #define DE_IBS_NB_LOCAL_DRAM 0xf245 |
| 191 | #define DE_IBS_NB_REMOTE_DRAM 0xf246 |
| 192 | #define DE_IBS_NB_LOCAL_OTHER 0xf247 |
| 193 | #define DE_IBS_NB_REMOTE_OTHER 0xf248 |
| 194 | #define DE_IBS_NB_CACHE_STATE_M 0xf249 |
| 195 | #define DE_IBS_NB_CACHE_STATE_O 0xf24a |
| 196 | #define DE_IBS_NB_LOCAL_LATENCY 0xf24b |
| 197 | #define DE_IBS_NB_REMOTE_LATENCY 0xf24c |
| 198 | |
| 199 | #define IBS_OP_NB_BASE 0xf240 |
| 200 | #define IBS_OP_NB_END 0xf24c |
| 201 | #define IBS_OP_NB_MAX (IBS_OP_NB_END - IBS_OP_NB_BASE + 1) |
| 202 | #define IS_IBS_OP_NB(x) (IBS_OP_NB_BASE <= x && x <= IBS_OP_NB_END) |
| 203 | #define IBS_OP_NB_OFFSET(x) (x - IBS_OP_NB_BASE) |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 204 | #define CHECK_OP_NB_SELECTED_FLAG(x) if ( selected_flag & (1 << IBS_OP_NB_OFFSET(x))) |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 205 | |
| 206 | |
| 207 | #define OP_MAX_IBS_COUNTERS (IBS_FETCH_MAX + IBS_OP_MAX + IBS_OP_LS_MAX + IBS_OP_NB_MAX) |
| 208 | |
| 209 | |
| 210 | /** |
| 211 | * These macro decodes IBS hardware-level event flags and fields. |
| 212 | * Translation results are either zero (false) or non-zero (true), except |
| 213 | * the fetch latency, which is a 16-bit cycle count, and the fetch page size |
| 214 | * field, which is a 2-bit unsigned integer. |
| 215 | */ |
| 216 | |
| 217 | /** Bits 47:32 IbsFetchLat: instruction fetch latency */ |
| 218 | #define IBS_FETCH_FETCH_LATENCY(x) ((unsigned short)(x->ibs_fetch_ctl_high & FETCH_MASK_LATENCY)) |
| 219 | |
| 220 | /** Bit 50 IbsFetchComp: instruction fetch complete. */ |
| 221 | #define IBS_FETCH_FETCH_COMPLETION(x) ((x->ibs_fetch_ctl_high & FETCH_MASK_COMPLETE) != 0) |
| 222 | |
| 223 | /** Bit 51 IbsIcMiss: instruction cache miss. */ |
| 224 | #define IBS_FETCH_INST_CACHE_MISS(x) ((x->ibs_fetch_ctl_high & FETCH_MASK_IC_MISS) != 0) |
| 225 | |
| 226 | /** Bit 52 IbsPhyAddrValid: instruction fetch physical address valid. */ |
| 227 | #define IBS_FETCH_PHYS_ADDR_VALID(x) ((x->ibs_fetch_ctl_high & FETCH_MASK_PHY_ADDR) != 0) |
| 228 | |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 229 | enum IBSL1PAGESIZE { |
| 230 | L1TLB4K = 0, |
| 231 | L1TLB2M, |
| 232 | L1TLB1G, |
| 233 | L1TLB_INVALID |
| 234 | }; |
| 235 | |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 236 | /** Bits 54:53 IbsL1TlbPgSz: instruction cache L1TLB page size. */ |
| 237 | #define IBS_FETCH_TLB_PAGE_SIZE(x) ((unsigned short)((x->ibs_fetch_ctl_high >> 21) & 0x3)) |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 238 | #define IBS_FETCH_TLB_PAGE_SIZE_4K(x) (IBS_FETCH_TLB_PAGE_SIZE(x) == L1TLB4K) |
| 239 | #define IBS_FETCH_TLB_PAGE_SIZE_2M(x) (IBS_FETCH_TLB_PAGE_SIZE(x) == L1TLB2M) |
| 240 | #define IBS_FETCH_TLB_PAGE_SIZE_1G(x) (IBS_FETCH_TLB_PAGE_SIZE(x) == L1TLB1G) |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 241 | |
| 242 | /** Bit 55 IbsL1TlbMiss: instruction cache L1TLB miss. */ |
| 243 | #define IBS_FETCH_M_L1_TLB_MISS(x) ((x->ibs_fetch_ctl_high & FETCH_MASK_L1_MISS) != 0) |
| 244 | |
| 245 | /** Bit 56 IbsL2TlbMiss: instruction cache L2TLB miss. */ |
| 246 | #define IBS_FETCH_L2_TLB_MISS(x) ((x->ibs_fetch_ctl_high & FETCH_MASK_L2_MISS) != 0) |
| 247 | |
| 248 | /** A fetch is a killed fetch if all the masked bits are clear */ |
| 249 | #define IBS_FETCH_KILLED(x) ((x->ibs_fetch_ctl_high & FETCH_MASK_KILLED) == 0) |
| 250 | |
| 251 | #define IBS_FETCH_INST_CACHE_HIT(x) (IBS_FETCH_FETCH_COMPLETION(x) && !IBS_FETCH_INST_CACHE_MISS(x)) |
| 252 | |
| 253 | #define IBS_FETCH_L1_TLB_HIT(x) (!IBS_FETCH_M_L1_TLB_MISS(x) && IBS_FETCH_PHYS_ADDR_VALID(x)) |
| 254 | |
| 255 | #define IBS_FETCH_ITLB_L1M_L2H(x) (IBS_FETCH_M_L1_TLB_MISS(x) && !IBS_FETCH_L2_TLB_MISS(x)) |
| 256 | |
| 257 | #define IBS_FETCH_ITLB_L1M_L2M(x) (IBS_FETCH_M_L1_TLB_MISS(x) && IBS_FETCH_L2_TLB_MISS(x)) |
| 258 | |
| 259 | |
| 260 | /** |
| 261 | * These macros translates IBS op event data from its hardware-level |
| 262 | * representation .It hides the MSR layout of IBS op data. |
| 263 | */ |
| 264 | |
| 265 | /** |
| 266 | * MSRC001_1035 IBS OP Data Register (IbsOpData) |
| 267 | * |
| 268 | * 15:0 IbsCompToRetCtr: macro-op completion to retire count |
| 269 | */ |
| 270 | #define IBS_OP_COM_TO_RETIRE_CYCLES(x) ((unsigned short)(x->ibs_op_data1_low & BR_MASK_RETIRE)) |
| 271 | |
| 272 | /** 31:16 tag_to_retire_cycles : macro-op tag to retire count. */ |
| 273 | #define IBS_OP_TAG_TO_RETIRE_CYCLES(x) ((unsigned short)((x->ibs_op_data1_low >> 16) & BR_MASK_RETIRE)) |
| 274 | |
| 275 | /** 32 op_branch_resync : resync macro-op. */ |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 276 | #define IBS_OP_BRANCH_RESYNC(x) ((x->ibs_op_data1_high & BR_MASK_BRN_RESYNC) != 0) |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 277 | |
| 278 | /** 33 op_mispredict_return : mispredicted return macro-op. */ |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 279 | #define IBS_OP_MISPREDICT_RETURN(x) ((x->ibs_op_data1_high & BR_MASK_MISP_RETURN) != 0) |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 280 | |
| 281 | /** 34 IbsOpReturn: return macro-op. */ |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 282 | #define IBS_OP_RETURN(x) ((x->ibs_op_data1_high & BR_MASK_RETURN) != 0) |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 283 | |
| 284 | /** 35 IbsOpBrnTaken: taken branch macro-op. */ |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 285 | #define IBS_OP_BRANCH_TAKEN(x) ((x->ibs_op_data1_high & BR_MASK_BRN_TAKEN) != 0) |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 286 | |
| 287 | /** 36 IbsOpBrnMisp: mispredicted branch macro-op. */ |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 288 | #define IBS_OP_BRANCH_MISPREDICT(x) ((x->ibs_op_data1_high & BR_MASK_BRN_MISP) != 0) |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 289 | |
| 290 | /** 37 IbsOpBrnRet: branch macro-op retired. */ |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 291 | #define IBS_OP_BRANCH_RETIRED(x) ((x->ibs_op_data1_high & BR_MASK_BRN_RET) != 0) |
| 292 | |
| 293 | /** 38 IbsRipInvalid: RIP invalid. */ |
| 294 | #define IBS_OP_RIP_INVALID(x) ((x->ibs_op_data1_high & MASK_RIP_INVALID) != 0) |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 295 | |
| 296 | /** |
| 297 | * MSRC001_1036 IBS Op Data 2 Register (IbsOpData2) |
| 298 | * |
| 299 | * 5 NbIbsReqCacheHitSt: IBS L3 cache state |
| 300 | */ |
| 301 | #define IBS_OP_NB_IBS_CACHE_HIT_ST(x) ((x->ibs_op_data2_low & NB_MASK_L3_STATE) != 0) |
| 302 | |
| 303 | /** 4 NbIbsReqDstProc: IBS request destination processor */ |
| 304 | #define IBS_OP_NB_IBS_REQ_DST_PROC(x) ((x->ibs_op_data2_low & NB_MASK_REQ_DST_PROC) != 0) |
| 305 | |
| 306 | /** 2:0 NbIbsReqSrc: Northbridge IBS request data source */ |
| 307 | #define IBS_OP_NB_IBS_REQ_SRC(x) ((unsigned char)(x->ibs_op_data2_low & NB_MASK_REQ_DATA_SRC)) |
| 308 | |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 309 | #define IBS_OP_NB_IBS_REQ_SRC_01(x) (IBS_OP_NB_IBS_REQ_SRC(x) == 0x01) |
| 310 | |
| 311 | #define IBS_OP_NB_IBS_REQ_SRC_02(x) (IBS_OP_NB_IBS_REQ_SRC(x) == 0x02) |
| 312 | |
| 313 | #define IBS_OP_NB_IBS_REQ_SRC_03(x) (IBS_OP_NB_IBS_REQ_SRC(x) == 0x03) |
| 314 | |
| 315 | #define IBS_OP_NB_IBS_REQ_SRC_07(x) (IBS_OP_NB_IBS_REQ_SRC(x) == 0x07) |
| 316 | |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 317 | /** |
| 318 | * MSRC001_1037 IBS Op Data3 Register |
| 319 | * |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 320 | * Bits 47:32 IbsDcMissLat |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 321 | */ |
| 322 | #define IBS_OP_DC_MISS_LATENCY(x) ((unsigned short)(x->ibs_op_data3_high & 0xffff)) |
| 323 | |
| 324 | /** 0 IbsLdOp: Load op */ |
| 325 | #define IBS_OP_IBS_LD_OP(x) ((x->ibs_op_data3_low & DC_MASK_LOAD_OP) != 0) |
| 326 | |
| 327 | /** 1 IbsStOp: Store op */ |
| 328 | #define IBS_OP_IBS_ST_OP(x) ((x->ibs_op_data3_low & DC_MASK_STORE_OP) != 0) |
| 329 | |
| 330 | /** 2 ibs_dc_l1_tlb_miss: Data cache L1TLB miss */ |
| 331 | #define IBS_OP_IBS_DC_L1_TLB_MISS(x) ((x->ibs_op_data3_low & DC_MASK_L1_TLB_MISS) != 0) |
| 332 | |
| 333 | /** 3 ibs_dc_l2_tlb_miss: Data cache L2TLB miss */ |
| 334 | #define IBS_OP_IBS_DC_L2_TLB_MISS(x) ((x->ibs_op_data3_low & DC_MASK_L2_TLB_MISS) != 0) |
| 335 | |
| 336 | /** 4 IbsDcL1tlbHit2M: Data cache L1TLB hit in 2M page */ |
| 337 | #define IBS_OP_IBS_DC_L1_TLB_HIT_2MB(x) ((x->ibs_op_data3_low & DC_MASK_L1_HIT_2M) != 0) |
| 338 | |
| 339 | /** 5 ibs_dc_l1_tlb_hit_1gb: Data cache L1TLB hit in 1G page */ |
| 340 | #define IBS_OP_IBS_DC_L1_TLB_HIT_1GB(x) ((x->ibs_op_data3_low & DC_MASK_L1_HIT_1G) != 0) |
| 341 | |
| 342 | /** 6 ibs_dc_l2_tlb_hit_2mb: Data cache L2TLB hit in 2M page */ |
| 343 | #define IBS_OP_IBS_DC_L2_TLB_HIT_2MB(x) ((x->ibs_op_data3_low & DC_MASK_L2_HIT_2M) != 0) |
| 344 | |
| 345 | /** 7 ibs_dc_miss: Data cache miss */ |
| 346 | #define IBS_OP_IBS_DC_MISS(x) ((x->ibs_op_data3_low & DC_MASK_DC_MISS) != 0) |
| 347 | |
| 348 | /** 8 ibs_dc_miss_acc: Misaligned access */ |
| 349 | #define IBS_OP_IBS_DC_MISS_ACC(x) ((x->ibs_op_data3_low & DC_MASK_MISALIGN_ACCESS) != 0) |
| 350 | |
| 351 | /** 9 ibs_dc_ld_bnk_con: Bank conflict on load operation */ |
| 352 | #define IBS_OP_IBS_DC_LD_BNK_CON(x) ((x->ibs_op_data3_low & DC_MASK_LD_BANK_CONFLICT) != 0) |
| 353 | |
| 354 | /** 10 ibs_dc_st_bnk_con: Bank conflict on store operation */ |
| 355 | #define IBS_OP_IBS_DC_ST_BNK_CON(x) ((x->ibs_op_data3_low & DC_MASK_ST_BANK_CONFLICT) != 0) |
| 356 | |
| 357 | /** 11 ibs_dc_st_to_ld_fwd : Data forwarded from store to load operation */ |
| 358 | #define IBS_OP_IBS_DC_ST_TO_LD_FWD(x) ((x->ibs_op_data3_low & DC_MASK_ST_TO_LD_FOR) != 0) |
| 359 | |
| 360 | /** 12 ibs_dc_st_to_ld_can: Data forwarding from store to load operation cancelled */ |
| 361 | #define IBS_OP_IBS_DC_ST_TO_LD_CAN(x) ((x->ibs_op_data3_low & DC_MASK_ST_TO_LD_CANCEL) != 0) |
| 362 | |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 363 | /** 13 ibs_dc_wc_mem_acc : WC memory access */ |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 364 | #define IBS_OP_IBS_DC_WC_MEM_ACC(x) ((x->ibs_op_data3_low & DC_MASK_WC_MEM_ACCESS) != 0) |
| 365 | |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 366 | /** 14 ibs_dc_uc_mem_acc : UC memory access */ |
| 367 | #define IBS_OP_IBS_DC_UC_MEM_ACC(x) ((x->ibs_op_data3_low & DC_MASK_UC_MEM_ACCESS) != 0) |
| 368 | |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 369 | /** 15 ibs_locked_op: Locked operation */ |
| 370 | #define IBS_OP_IBS_LOCKED_OP(x) ((x->ibs_op_data3_low & DC_MASK_LOCKED_OP) != 0) |
| 371 | |
| 372 | /** 16 ibs_dc_mab_hit : MAB hit */ |
| 373 | #define IBS_OP_IBS_DC_MAB_HIT(x) ((x->ibs_op_data3_low & DC_MASK_MAB_HIT) != 0) |
| 374 | |
| 375 | /** 17 IbsDcLinAddrValid: Data cache linear address valid */ |
| 376 | #define IBS_OP_IBS_DC_LIN_ADDR_VALID(x) ((x->ibs_op_data3_low & DC_MASK_LIN_ADDR_VALID) != 0) |
| 377 | |
| 378 | /** 18 ibs_dc_phy_addr_valid: Data cache physical address valid */ |
| 379 | #define IBS_OP_IBS_DC_PHY_ADDR_VALID(x) ((x->ibs_op_data3_low & DC_MASK_PHY_ADDR_VALID) != 0) |
| 380 | |
| 381 | /** 19 ibs_dc_l2_tlb_hit_1gb: Data cache L2TLB hit in 1G page */ |
| 382 | #define IBS_OP_IBS_DC_L2_TLB_HIT_1GB(x) ((x->ibs_op_data3_low & DC_MASK_L2_HIT_1G) != 0) |
| 383 | |
| 384 | |
| 385 | /** |
| 386 | * Aggregate the IBS derived event. Increase the |
| 387 | * derived event count by one. |
| 388 | */ |
| 389 | #define AGG_IBS_EVENT(EV) opd_log_ibs_event(EV, trans) |
| 390 | |
| 391 | /** |
| 392 | * Aggregate the IBS latency/cycle counts. Increase the |
| 393 | * derived event count by the specified count value. |
| 394 | */ |
| 395 | #define AGG_IBS_COUNT(EV, COUNT) opd_log_ibs_count(EV, trans, COUNT) |
| 396 | |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 397 | #endif /*OPD_IBS_MACRO_H*/ |