| /* |
| * Copyright (c) 2011 Google, Inc |
| * Contributed by Stephane Eranian <eranian@gmail.com> |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and associated documentation files (the "Software"), to deal |
| * in the Software without restriction, including without limitation the rights |
| * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies |
| * of the Software, and to permit persons to whom the Software is furnished to do so, |
| * subject to the following conditions: |
| * |
| * The above copyright notice and this permission notice shall be included in all |
| * copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
| * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A |
| * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
| * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF |
| * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE |
| * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| * |
| * This file is part of libpfm, a performance monitoring support library for |
| * applications on Linux. |
| * |
| * This file has been automatically generated. |
| * |
| * PMU: nhm_unc (Intel Nehalem uncore) |
| */ |
| |
| static const intel_x86_umask_t nhm_unc_unc_dram_open[]={ |
| { .uname = "CH0", |
| .udesc = "DRAM Channel 0 open commands issued for read or write", |
| .ucode = 0x100, |
| }, |
| { .uname = "CH1", |
| .udesc = "DRAM Channel 1 open commands issued for read or write", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH2", |
| .udesc = "DRAM Channel 2 open commands issued for read or write", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_dram_page_close[]={ |
| { .uname = "CH0", |
| .udesc = "DRAM Channel 0 page close", |
| .ucode = 0x100, |
| }, |
| { .uname = "CH1", |
| .udesc = "DRAM Channel 1 page close", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH2", |
| .udesc = "DRAM Channel 2 page close", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_dram_page_miss[]={ |
| { .uname = "CH0", |
| .udesc = "DRAM Channel 0 page miss", |
| .ucode = 0x100, |
| }, |
| { .uname = "CH1", |
| .udesc = "DRAM Channel 1 page miss", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH2", |
| .udesc = "DRAM Channel 2 page miss", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_dram_pre_all[]={ |
| { .uname = "CH0", |
| .udesc = "DRAM Channel 0 precharge all commands", |
| .ucode = 0x100, |
| }, |
| { .uname = "CH1", |
| .udesc = "DRAM Channel 1 precharge all commands", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH2", |
| .udesc = "DRAM Channel 2 precharge all commands", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_dram_read_cas[]={ |
| { .uname = "CH0", |
| .udesc = "DRAM Channel 0 read CAS commands", |
| .ucode = 0x100, |
| }, |
| { .uname = "AUTOPRE_CH0", |
| .udesc = "DRAM Channel 0 read CAS auto page close commands", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH1", |
| .udesc = "DRAM Channel 1 read CAS commands", |
| .ucode = 0x400, |
| }, |
| { .uname = "AUTOPRE_CH1", |
| .udesc = "DRAM Channel 1 read CAS auto page close commands", |
| .ucode = 0x800, |
| }, |
| { .uname = "CH2", |
| .udesc = "DRAM Channel 2 read CAS commands", |
| .ucode = 0x1000, |
| }, |
| { .uname = "AUTOPRE_CH2", |
| .udesc = "DRAM Channel 2 read CAS auto page close commands", |
| .ucode = 0x2000, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_dram_refresh[]={ |
| { .uname = "CH0", |
| .udesc = "DRAM Channel 0 refresh commands", |
| .ucode = 0x100, |
| }, |
| { .uname = "CH1", |
| .udesc = "DRAM Channel 1 refresh commands", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH2", |
| .udesc = "DRAM Channel 2 refresh commands", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_dram_write_cas[]={ |
| { .uname = "CH0", |
| .udesc = "DRAM Channel 0 write CAS commands", |
| .ucode = 0x100, |
| }, |
| { .uname = "AUTOPRE_CH0", |
| .udesc = "DRAM Channel 0 write CAS auto page close commands", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH1", |
| .udesc = "DRAM Channel 1 write CAS commands", |
| .ucode = 0x400, |
| }, |
| { .uname = "AUTOPRE_CH1", |
| .udesc = "DRAM Channel 1 write CAS auto page close commands", |
| .ucode = 0x800, |
| }, |
| { .uname = "CH2", |
| .udesc = "DRAM Channel 2 write CAS commands", |
| .ucode = 0x1000, |
| }, |
| { .uname = "AUTOPRE_CH2", |
| .udesc = "DRAM Channel 2 write CAS auto page close commands", |
| .ucode = 0x2000, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_gq_alloc[]={ |
| { .uname = "READ_TRACKER", |
| .udesc = "GQ read tracker requests", |
| .ucode = 0x100, |
| }, |
| { .uname = "RT_LLC_MISS", |
| .udesc = "GQ read tracker LLC misses", |
| .ucode = 0x200, |
| }, |
| { .uname = "RT_TO_LLC_RESP", |
| .udesc = "GQ read tracker LLC requests", |
| .ucode = 0x400, |
| }, |
| { .uname = "RT_TO_RTID_ACQUIRED", |
| .udesc = "GQ read tracker LLC miss to RTID acquired", |
| .ucode = 0x800, |
| }, |
| { .uname = "WT_TO_RTID_ACQUIRED", |
| .udesc = "GQ write tracker LLC miss to RTID acquired", |
| .ucode = 0x1000, |
| }, |
| { .uname = "WRITE_TRACKER", |
| .udesc = "GQ write tracker LLC misses", |
| .ucode = 0x2000, |
| }, |
| { .uname = "PEER_PROBE_TRACKER", |
| .udesc = "GQ peer probe tracker requests", |
| .ucode = 0x4000, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_gq_cycles_full[]={ |
| { .uname = "READ_TRACKER", |
| .udesc = "Cycles GQ read tracker is full.", |
| .ucode = 0x100, |
| }, |
| { .uname = "WRITE_TRACKER", |
| .udesc = "Cycles GQ write tracker is full.", |
| .ucode = 0x200, |
| }, |
| { .uname = "PEER_PROBE_TRACKER", |
| .udesc = "Cycles GQ peer probe tracker is full.", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_gq_cycles_not_empty[]={ |
| { .uname = "READ_TRACKER", |
| .udesc = "Cycles GQ read tracker is busy", |
| .ucode = 0x100, |
| }, |
| { .uname = "WRITE_TRACKER", |
| .udesc = "Cycles GQ write tracker is busy", |
| .ucode = 0x200, |
| }, |
| { .uname = "PEER_PROBE_TRACKER", |
| .udesc = "Cycles GQ peer probe tracker is busy", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_gq_data_from[]={ |
| { .uname = "QPI", |
| .udesc = "Cycles GQ data is imported from Quickpath interface", |
| .ucode = 0x100, |
| }, |
| { .uname = "QMC", |
| .udesc = "Cycles GQ data is imported from Quickpath memory interface", |
| .ucode = 0x200, |
| }, |
| { .uname = "LLC", |
| .udesc = "Cycles GQ data is imported from LLC", |
| .ucode = 0x400, |
| }, |
| { .uname = "CORES_02", |
| .udesc = "Cycles GQ data is imported from Cores 0 and 2", |
| .ucode = 0x800, |
| }, |
| { .uname = "CORES_13", |
| .udesc = "Cycles GQ data is imported from Cores 1 and 3", |
| .ucode = 0x1000, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_gq_data_to[]={ |
| { .uname = "QPI_QMC", |
| .udesc = "Cycles GQ data sent to the QPI or QMC", |
| .ucode = 0x100, |
| }, |
| { .uname = "LLC", |
| .udesc = "Cycles GQ data sent to LLC", |
| .ucode = 0x200, |
| }, |
| { .uname = "CORES", |
| .udesc = "Cycles GQ data sent to cores", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_llc_hits[]={ |
| { .uname = "READ", |
| .udesc = "Number of LLC read hits", |
| .ucode = 0x100, |
| }, |
| { .uname = "WRITE", |
| .udesc = "Number of LLC write hits", |
| .ucode = 0x200, |
| }, |
| { .uname = "PROBE", |
| .udesc = "Number of LLC peer probe hits", |
| .ucode = 0x400, |
| }, |
| { .uname = "ANY", |
| .udesc = "Number of LLC hits", |
| .ucode = 0x300, |
| .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_llc_lines_in[]={ |
| { .uname = "M_STATE", |
| .udesc = "LLC lines allocated in M state", |
| .ucode = 0x100, |
| }, |
| { .uname = "E_STATE", |
| .udesc = "LLC lines allocated in E state", |
| .ucode = 0x200, |
| }, |
| { .uname = "S_STATE", |
| .udesc = "LLC lines allocated in S state", |
| .ucode = 0x400, |
| }, |
| { .uname = "F_STATE", |
| .udesc = "LLC lines allocated in F state", |
| .ucode = 0x800, |
| }, |
| { .uname = "ANY", |
| .udesc = "LLC lines allocated", |
| .ucode = 0xf00, |
| .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_llc_lines_out[]={ |
| { .uname = "M_STATE", |
| .udesc = "LLC lines victimized in M state", |
| .ucode = 0x100, |
| }, |
| { .uname = "E_STATE", |
| .udesc = "LLC lines victimized in E state", |
| .ucode = 0x200, |
| }, |
| { .uname = "S_STATE", |
| .udesc = "LLC lines victimized in S state", |
| .ucode = 0x400, |
| }, |
| { .uname = "I_STATE", |
| .udesc = "LLC lines victimized in I state", |
| .ucode = 0x800, |
| }, |
| { .uname = "F_STATE", |
| .udesc = "LLC lines victimized in F state", |
| .ucode = 0x1000, |
| }, |
| { .uname = "ANY", |
| .udesc = "LLC lines victimized", |
| .ucode = 0x1f00, |
| .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_llc_miss[]={ |
| { .uname = "READ", |
| .udesc = "Number of LLC read misses", |
| .ucode = 0x100, |
| }, |
| { .uname = "WRITE", |
| .udesc = "Number of LLC write misses", |
| .ucode = 0x200, |
| }, |
| { .uname = "PROBE", |
| .udesc = "Number of LLC peer probe misses", |
| .ucode = 0x400, |
| }, |
| { .uname = "ANY", |
| .udesc = "Number of LLC misses", |
| .ucode = 0x300, |
| .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qhl_address_conflicts[]={ |
| { .uname = "2WAY", |
| .udesc = "QHL 2 way address conflicts", |
| .ucode = 0x200, |
| }, |
| { .uname = "3WAY", |
| .udesc = "QHL 3 way address conflicts", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qhl_conflict_cycles[]={ |
| { .uname = "IOH", |
| .udesc = "QHL IOH Tracker conflict cycles", |
| .ucode = 0x100, |
| }, |
| { .uname = "REMOTE", |
| .udesc = "QHL Remote Tracker conflict cycles", |
| .ucode = 0x200, |
| }, |
| { .uname = "LOCAL", |
| .udesc = "QHL Local Tracker conflict cycles", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qhl_cycles_full[]={ |
| { .uname = "REMOTE", |
| .udesc = "Cycles QHL Remote Tracker is full", |
| .ucode = 0x200, |
| }, |
| { .uname = "LOCAL", |
| .udesc = "Cycles QHL Local Tracker is full", |
| .ucode = 0x400, |
| }, |
| { .uname = "IOH", |
| .udesc = "Cycles QHL IOH Tracker is full", |
| .ucode = 0x100, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qhl_cycles_not_empty[]={ |
| { .uname = "IOH", |
| .udesc = "Cycles QHL IOH is busy", |
| .ucode = 0x100, |
| }, |
| { .uname = "REMOTE", |
| .udesc = "Cycles QHL Remote Tracker is busy", |
| .ucode = 0x200, |
| }, |
| { .uname = "LOCAL", |
| .udesc = "Cycles QHL Local Tracker is busy", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qhl_frc_ack_cnflts[]={ |
| { .uname = "LOCAL", |
| .udesc = "QHL FrcAckCnflts sent to local home", |
| .ucode = 0x400, |
| .uflags= INTEL_X86_DFL, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qhl_occupancy[]={ |
| { .uname = "IOH", |
| .udesc = "Cycles QHL IOH Tracker Allocate to Deallocate Read Occupancy", |
| .ucode = 0x100, |
| }, |
| { .uname = "REMOTE", |
| .udesc = "Cycles QHL Remote Tracker Allocate to Deallocate Read Occupancy", |
| .ucode = 0x200, |
| }, |
| { .uname = "LOCAL", |
| .udesc = "Cycles QHL Local Tracker Allocate to Deallocate Read Occupancy", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qhl_requests[]={ |
| { .uname = "LOCAL_READS", |
| .udesc = "Quickpath Home Logic local read requests", |
| .ucode = 0x1000, |
| }, |
| { .uname = "LOCAL_WRITES", |
| .udesc = "Quickpath Home Logic local write requests", |
| .ucode = 0x2000, |
| }, |
| { .uname = "REMOTE_READS", |
| .udesc = "Quickpath Home Logic remote read requests", |
| .ucode = 0x400, |
| }, |
| { .uname = "IOH_READS", |
| .udesc = "Quickpath Home Logic IOH read requests", |
| .ucode = 0x100, |
| }, |
| { .uname = "IOH_WRITES", |
| .udesc = "Quickpath Home Logic IOH write requests", |
| .ucode = 0x200, |
| }, |
| { .uname = "REMOTE_WRITES", |
| .udesc = "Quickpath Home Logic remote write requests", |
| .ucode = 0x800, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qmc_busy[]={ |
| { .uname = "READ_CH0", |
| .udesc = "Cycles QMC channel 0 busy with a read request", |
| .ucode = 0x100, |
| }, |
| { .uname = "READ_CH1", |
| .udesc = "Cycles QMC channel 1 busy with a read request", |
| .ucode = 0x200, |
| }, |
| { .uname = "READ_CH2", |
| .udesc = "Cycles QMC channel 2 busy with a read request", |
| .ucode = 0x400, |
| }, |
| { .uname = "WRITE_CH0", |
| .udesc = "Cycles QMC channel 0 busy with a write request", |
| .ucode = 0x800, |
| }, |
| { .uname = "WRITE_CH1", |
| .udesc = "Cycles QMC channel 1 busy with a write request", |
| .ucode = 0x1000, |
| }, |
| { .uname = "WRITE_CH2", |
| .udesc = "Cycles QMC channel 2 busy with a write request", |
| .ucode = 0x2000, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qmc_cancel[]={ |
| { .uname = "CH0", |
| .udesc = "QMC channel 0 cancels", |
| .ucode = 0x100, |
| }, |
| { .uname = "CH1", |
| .udesc = "QMC channel 1 cancels", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH2", |
| .udesc = "QMC channel 2 cancels", |
| .ucode = 0x400, |
| }, |
| { .uname = "ANY", |
| .udesc = "QMC cancels", |
| .ucode = 0x700, |
| .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qmc_critical_priority_reads[]={ |
| { .uname = "CH0", |
| .udesc = "QMC channel 0 critical priority read requests", |
| .ucode = 0x100, |
| }, |
| { .uname = "CH1", |
| .udesc = "QMC channel 1 critical priority read requests", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH2", |
| .udesc = "QMC channel 2 critical priority read requests", |
| .ucode = 0x400, |
| }, |
| { .uname = "ANY", |
| .udesc = "QMC critical priority read requests", |
| .ucode = 0x700, |
| .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qmc_high_priority_reads[]={ |
| { .uname = "CH0", |
| .udesc = "QMC channel 0 high priority read requests", |
| .ucode = 0x100, |
| }, |
| { .uname = "CH1", |
| .udesc = "QMC channel 1 high priority read requests", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH2", |
| .udesc = "QMC channel 2 high priority read requests", |
| .ucode = 0x400, |
| }, |
| { .uname = "ANY", |
| .udesc = "QMC high priority read requests", |
| .ucode = 0x700, |
| .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qmc_isoc_full[]={ |
| { .uname = "READ_CH0", |
| .udesc = "Cycles DRAM channel 0 full with isochronous read requests", |
| .ucode = 0x100, |
| }, |
| { .uname = "READ_CH1", |
| .udesc = "Cycles DRAM channel 1 full with isochronous read requests", |
| .ucode = 0x200, |
| }, |
| { .uname = "READ_CH2", |
| .udesc = "Cycles DRAM channel 2 full with isochronous read requests", |
| .ucode = 0x400, |
| }, |
| { .uname = "WRITE_CH0", |
| .udesc = "Cycles DRAM channel 0 full with isochronous write requests", |
| .ucode = 0x800, |
| }, |
| { .uname = "WRITE_CH1", |
| .udesc = "Cycles DRAM channel 1 full with isochronous write requests", |
| .ucode = 0x1000, |
| }, |
| { .uname = "WRITE_CH2", |
| .udesc = "Cycles DRAM channel 2 full with isochronous write requests", |
| .ucode = 0x2000, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_imc_isoc_occupancy[]={ |
| { .uname = "CH0", |
| .udesc = "IMC channel 0 isochronous read request occupancy", |
| .ucode = 0x100, |
| }, |
| { .uname = "CH1", |
| .udesc = "IMC channel 1 isochronous read request occupancy", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH2", |
| .udesc = "IMC channel 2 isochronous read request occupancy", |
| .ucode = 0x400, |
| }, |
| { .uname = "ANY", |
| .udesc = "IMC isochronous read request occupancy", |
| .ucode = 0x700, |
| .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qmc_normal_full[]={ |
| { .uname = "READ_CH0", |
| .udesc = "Cycles DRAM channel 0 full with normal read requests", |
| .ucode = 0x100, |
| }, |
| { .uname = "READ_CH1", |
| .udesc = "Cycles DRAM channel 1 full with normal read requests", |
| .ucode = 0x200, |
| }, |
| { .uname = "READ_CH2", |
| .udesc = "Cycles DRAM channel 2 full with normal read requests", |
| .ucode = 0x400, |
| }, |
| { .uname = "WRITE_CH0", |
| .udesc = "Cycles DRAM channel 0 full with normal write requests", |
| .ucode = 0x800, |
| }, |
| { .uname = "WRITE_CH1", |
| .udesc = "Cycles DRAM channel 1 full with normal write requests", |
| .ucode = 0x1000, |
| }, |
| { .uname = "WRITE_CH2", |
| .udesc = "Cycles DRAM channel 2 full with normal write requests", |
| .ucode = 0x2000, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qmc_normal_reads[]={ |
| { .uname = "CH0", |
| .udesc = "QMC channel 0 normal read requests", |
| .ucode = 0x100, |
| }, |
| { .uname = "CH1", |
| .udesc = "QMC channel 1 normal read requests", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH2", |
| .udesc = "QMC channel 2 normal read requests", |
| .ucode = 0x400, |
| }, |
| { .uname = "ANY", |
| .udesc = "QMC normal read requests", |
| .ucode = 0x700, |
| .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qmc_occupancy[]={ |
| { .uname = "CH0", |
| .udesc = "IMC channel 0 normal read request occupancy", |
| .ucode = 0x100, |
| }, |
| { .uname = "CH1", |
| .udesc = "IMC channel 1 normal read request occupancy", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH2", |
| .udesc = "IMC channel 2 normal read request occupancy", |
| .ucode = 0x400, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qmc_priority_updates[]={ |
| { .uname = "CH0", |
| .udesc = "QMC channel 0 priority updates", |
| .ucode = 0x100, |
| }, |
| { .uname = "CH1", |
| .udesc = "QMC channel 1 priority updates", |
| .ucode = 0x200, |
| }, |
| { .uname = "CH2", |
| .udesc = "QMC channel 2 priority updates", |
| .ucode = 0x400, |
| }, |
| { .uname = "ANY", |
| .udesc = "QMC priority updates", |
| .ucode = 0x700, |
| .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qmc_writes[]={ |
| { .uname = "FULL_CH0", |
| .udesc = "QMC channel 0 full cache line writes", |
| .ucode = 0x100, |
| .grpid = 0, |
| }, |
| { .uname = "FULL_CH1", |
| .udesc = "QMC channel 1 full cache line writes", |
| .ucode = 0x200, |
| .grpid = 0, |
| }, |
| { .uname = "FULL_CH2", |
| .udesc = "QMC channel 2 full cache line writes", |
| .ucode = 0x400, |
| .grpid = 0, |
| }, |
| { .uname = "FULL_ANY", |
| .udesc = "QMC full cache line writes", |
| .ucode = 0x700, |
| .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL, |
| .grpid = 0, |
| }, |
| { .uname = "PARTIAL_CH0", |
| .udesc = "QMC channel 0 partial cache line writes", |
| .ucode = 0x800, |
| .grpid = 1, |
| }, |
| { .uname = "PARTIAL_CH1", |
| .udesc = "QMC channel 1 partial cache line writes", |
| .ucode = 0x1000, |
| .grpid = 1, |
| }, |
| { .uname = "PARTIAL_CH2", |
| .udesc = "QMC channel 2 partial cache line writes", |
| .ucode = 0x2000, |
| .grpid = 1, |
| }, |
| { .uname = "PARTIAL_ANY", |
| .udesc = "QMC partial cache line writes", |
| .ucode = 0x3800, |
| .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL, |
| .grpid = 1, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qpi_rx_no_ppt_credit[]={ |
| { .uname = "STALLS_LINK_0", |
| .udesc = "Link 0 snoop stalls due to no PPT entry", |
| .ucode = 0x100, |
| }, |
| { .uname = "STALLS_LINK_1", |
| .udesc = "Link 1 snoop stalls due to no PPT entry", |
| .ucode = 0x200, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qpi_tx_header[]={ |
| { .uname = "BUSY_LINK_0", |
| .udesc = "Cycles link 0 outbound header busy", |
| .ucode = 0x200, |
| }, |
| { .uname = "BUSY_LINK_1", |
| .udesc = "Cycles link 1 outbound header busy", |
| .ucode = 0x800, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qpi_tx_stalled_multi_flit[]={ |
| { .uname = "DRS_LINK_0", |
| .udesc = "Cycles QPI outbound link 0 DRS stalled", |
| .ucode = 0x100, |
| }, |
| { .uname = "NCB_LINK_0", |
| .udesc = "Cycles QPI outbound link 0 NCB stalled", |
| .ucode = 0x200, |
| }, |
| { .uname = "NCS_LINK_0", |
| .udesc = "Cycles QPI outbound link 0 NCS stalled", |
| .ucode = 0x400, |
| }, |
| { .uname = "DRS_LINK_1", |
| .udesc = "Cycles QPI outbound link 1 DRS stalled", |
| .ucode = 0x800, |
| }, |
| { .uname = "NCB_LINK_1", |
| .udesc = "Cycles QPI outbound link 1 NCB stalled", |
| .ucode = 0x1000, |
| }, |
| { .uname = "NCS_LINK_1", |
| .udesc = "Cycles QPI outbound link 1 NCS stalled", |
| .ucode = 0x2000, |
| }, |
| { .uname = "LINK_0", |
| .udesc = "Cycles QPI outbound link 0 multi flit stalled", |
| .ucode = 0x700, |
| .uflags= INTEL_X86_NCOMBO, |
| }, |
| { .uname = "LINK_1", |
| .udesc = "Cycles QPI outbound link 1 multi flit stalled", |
| .ucode = 0x3800, |
| .uflags= INTEL_X86_NCOMBO, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_qpi_tx_stalled_single_flit[]={ |
| { .uname = "HOME_LINK_0", |
| .udesc = "Cycles QPI outbound link 0 HOME stalled", |
| .ucode = 0x100, |
| }, |
| { .uname = "SNOOP_LINK_0", |
| .udesc = "Cycles QPI outbound link 0 SNOOP stalled", |
| .ucode = 0x200, |
| }, |
| { .uname = "NDR_LINK_0", |
| .udesc = "Cycles QPI outbound link 0 NDR stalled", |
| .ucode = 0x400, |
| }, |
| { .uname = "HOME_LINK_1", |
| .udesc = "Cycles QPI outbound link 1 HOME stalled", |
| .ucode = 0x800, |
| }, |
| { .uname = "SNOOP_LINK_1", |
| .udesc = "Cycles QPI outbound link 1 SNOOP stalled", |
| .ucode = 0x1000, |
| }, |
| { .uname = "NDR_LINK_1", |
| .udesc = "Cycles QPI outbound link 1 NDR stalled", |
| .ucode = 0x2000, |
| }, |
| { .uname = "LINK_0", |
| .udesc = "Cycles QPI outbound link 0 single flit stalled", |
| .ucode = 0x700, |
| .uflags= INTEL_X86_NCOMBO, |
| }, |
| { .uname = "LINK_1", |
| .udesc = "Cycles QPI outbound link 1 single flit stalled", |
| .ucode = 0x3800, |
| .uflags= INTEL_X86_NCOMBO, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_snp_resp_to_local_home[]={ |
| { .uname = "I_STATE", |
| .udesc = "Local home snoop response - LLC does not have cache line", |
| .ucode = 0x100, |
| }, |
| { .uname = "S_STATE", |
| .udesc = "Local home snoop response - LLC has cache line in S state", |
| .ucode = 0x200, |
| }, |
| { .uname = "FWD_S_STATE", |
| .udesc = "Local home snoop response - LLC forwarding cache line in S state.", |
| .ucode = 0x400, |
| }, |
| { .uname = "FWD_I_STATE", |
| .udesc = "Local home snoop response - LLC has forwarded a modified cache line", |
| .ucode = 0x800, |
| }, |
| { .uname = "CONFLICT", |
| .udesc = "Local home conflict snoop response", |
| .ucode = 0x1000, |
| }, |
| { .uname = "WB", |
| .udesc = "Local home snoop response - LLC has cache line in the M state", |
| .ucode = 0x2000, |
| }, |
| }; |
| |
| static const intel_x86_umask_t nhm_unc_unc_snp_resp_to_remote_home[]={ |
| { .uname = "I_STATE", |
| .udesc = "Remote home snoop response - LLC does not have cache line", |
| .ucode = 0x100, |
| }, |
| { .uname = "S_STATE", |
| .udesc = "Remote home snoop response - LLC has cache line in S state", |
| .ucode = 0x200, |
| }, |
| { .uname = "FWD_S_STATE", |
| .udesc = "Remote home snoop response - LLC forwarding cache line in S state.", |
| .ucode = 0x400, |
| }, |
| { .uname = "FWD_I_STATE", |
| .udesc = "Remote home snoop response - LLC has forwarded a modified cache line", |
| .ucode = 0x800, |
| }, |
| { .uname = "CONFLICT", |
| .udesc = "Remote home conflict snoop response", |
| .ucode = 0x1000, |
| }, |
| { .uname = "WB", |
| .udesc = "Remote home snoop response - LLC has cache line in the M state", |
| .ucode = 0x2000, |
| }, |
| { .uname = "HITM", |
| .udesc = "Remote home snoop response - LLC HITM", |
| .ucode = 0x2400, |
| .uflags= INTEL_X86_NCOMBO, |
| }, |
| }; |
| |
| static const intel_x86_entry_t intel_nhm_unc_pe[]={ |
| { .name = "UNC_CLK_UNHALTED", |
| .desc = "Uncore clockticks.", |
| .modmsk =0x0, |
| .cntmsk = 0x100000, |
| .code = 0xff, |
| .flags = INTEL_X86_FIXED, |
| }, |
| { .name = "UNC_DRAM_OPEN", |
| .desc = "DRAM open commands issued for read or write", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x60, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_open), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_dram_open, |
| }, |
| { .name = "UNC_DRAM_PAGE_CLOSE", |
| .desc = "DRAM page close due to idle timer expiration", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x61, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_page_close), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_dram_page_close, |
| }, |
| { .name = "UNC_DRAM_PAGE_MISS", |
| .desc = "DRAM Channel 0 page miss", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x62, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_page_miss), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_dram_page_miss, |
| }, |
| { .name = "UNC_DRAM_PRE_ALL", |
| .desc = "DRAM Channel 0 precharge all commands", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x66, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_pre_all), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_dram_pre_all, |
| }, |
| { .name = "UNC_DRAM_READ_CAS", |
| .desc = "DRAM Channel 0 read CAS commands", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x63, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_read_cas), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_dram_read_cas, |
| }, |
| { .name = "UNC_DRAM_REFRESH", |
| .desc = "DRAM Channel 0 refresh commands", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x65, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_refresh), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_dram_refresh, |
| }, |
| { .name = "UNC_DRAM_WRITE_CAS", |
| .desc = "DRAM Channel 0 write CAS commands", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x64, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_dram_write_cas), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_dram_write_cas, |
| }, |
| { .name = "UNC_GQ_ALLOC", |
| .desc = "GQ read tracker requests", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x3, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_gq_alloc), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_gq_alloc, |
| }, |
| { .name = "UNC_GQ_CYCLES_FULL", |
| .desc = "Cycles GQ read tracker is full.", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x0, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_gq_cycles_full), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_gq_cycles_full, |
| }, |
| { .name = "UNC_GQ_CYCLES_NOT_EMPTY", |
| .desc = "Cycles GQ read tracker is busy", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x1, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_gq_cycles_not_empty), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_gq_cycles_not_empty, |
| }, |
| { .name = "UNC_GQ_DATA_FROM", |
| .desc = "Cycles GQ data is imported", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x4, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_gq_data_from), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_gq_data_from, |
| }, |
| { .name = "UNC_GQ_DATA_TO", |
| .desc = "Cycles GQ data is exported", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x5, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_gq_data_to), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_gq_data_to, |
| }, |
| { .name = "UNC_LLC_HITS", |
| .desc = "Number of LLC read hits", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x8, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_llc_hits), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_llc_hits, |
| }, |
| { .name = "UNC_LLC_LINES_IN", |
| .desc = "LLC lines allocated in M state", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0xa, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_llc_lines_in), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_llc_lines_in, |
| }, |
| { .name = "UNC_LLC_LINES_OUT", |
| .desc = "LLC lines victimized in M state", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0xb, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_llc_lines_out), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_llc_lines_out, |
| }, |
| { .name = "UNC_LLC_MISS", |
| .desc = "Number of LLC read misses", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x9, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_llc_miss), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_llc_miss, |
| }, |
| { .name = "UNC_QHL_ADDRESS_CONFLICTS", |
| .desc = "QHL 2 way address conflicts", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x24, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_address_conflicts), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qhl_address_conflicts, |
| }, |
| { .name = "UNC_QHL_CONFLICT_CYCLES", |
| .desc = "QHL IOH Tracker conflict cycles", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x25, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_conflict_cycles), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qhl_conflict_cycles, |
| }, |
| { .name = "UNC_QHL_CYCLES_FULL", |
| .desc = "Cycles QHL Remote Tracker is full", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x21, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_cycles_full), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qhl_cycles_full, |
| }, |
| { .name = "UNC_QHL_CYCLES_NOT_EMPTY", |
| .desc = "Cycles QHL Tracker is not empty", |
| .modmsk =0x0, |
| .cntmsk = 0x1fe00000, |
| .code = 0x22, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_cycles_not_empty), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qhl_cycles_not_empty, |
| }, |
| { .name = "UNC_QHL_FRC_ACK_CNFLTS", |
| .desc = "QHL FrcAckCnflts sent to local home", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x33, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_frc_ack_cnflts), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qhl_frc_ack_cnflts, |
| }, |
| { .name = "UNC_QHL_OCCUPANCY", |
| .desc = "Cycles QHL Tracker Allocate to Deallocate Read Occupancy", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x23, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_occupancy), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qhl_occupancy, |
| }, |
| { .name = "UNC_QHL_REQUESTS", |
| .desc = "Quickpath Home Logic local read requests", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x20, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qhl_requests), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qhl_requests, |
| }, |
| { .name = "UNC_QHL_TO_QMC_BYPASS", |
| .desc = "Number of requests to QMC that bypass QHL", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x26, |
| }, |
| { .name = "UNC_QMC_BUSY", |
| .desc = "Cycles QMC busy with a read request", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x29, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_busy), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qmc_busy, |
| }, |
| { .name = "UNC_QMC_CANCEL", |
| .desc = "QMC cancels", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x30, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_cancel), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qmc_cancel, |
| }, |
| { .name = "UNC_QMC_CRITICAL_PRIORITY_READS", |
| .desc = "QMC critical priority read requests", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x2e, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_critical_priority_reads), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qmc_critical_priority_reads, |
| }, |
| { .name = "UNC_QMC_HIGH_PRIORITY_READS", |
| .desc = "QMC high priority read requests", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x2d, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_high_priority_reads), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qmc_high_priority_reads, |
| }, |
| { .name = "UNC_QMC_ISOC_FULL", |
| .desc = "Cycles DRAM full with isochronous (ISOC) read requests", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x28, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_isoc_full), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qmc_isoc_full, |
| }, |
| { .name = "UNC_IMC_ISOC_OCCUPANCY", |
| .desc = "IMC isochronous (ISOC) Read Occupancy", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x2b, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_imc_isoc_occupancy), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_imc_isoc_occupancy, |
| }, |
| { .name = "UNC_QMC_NORMAL_FULL", |
| .desc = "Cycles DRAM full with normal read requests", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x27, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_normal_full), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qmc_normal_full, |
| }, |
| { .name = "UNC_QMC_NORMAL_READS", |
| .desc = "QMC normal read requests", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x2c, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_normal_reads), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qmc_normal_reads, |
| }, |
| { .name = "UNC_QMC_OCCUPANCY", |
| .desc = "QMC Occupancy", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x2a, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_occupancy), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qmc_occupancy, |
| }, |
| { .name = "UNC_QMC_PRIORITY_UPDATES", |
| .desc = "QMC priority updates", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x31, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_priority_updates), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qmc_priority_updates, |
| }, |
| { .name = "UNC_QMC_WRITES", |
| .desc = "QMC cache line writes", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x2f, |
| .flags= INTEL_X86_GRP_EXCL, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qmc_writes), |
| .ngrp = 2, |
| .umasks = nhm_unc_unc_qmc_writes, |
| }, |
| { .name = "UNC_QPI_RX_NO_PPT_CREDIT", |
| .desc = "Link 0 snoop stalls due to no PPT entry", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x43, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qpi_rx_no_ppt_credit), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qpi_rx_no_ppt_credit, |
| }, |
| { .name = "UNC_QPI_TX_HEADER", |
| .desc = "Cycles link 0 outbound header busy", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x42, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qpi_tx_header), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qpi_tx_header, |
| }, |
| { .name = "UNC_QPI_TX_STALLED_MULTI_FLIT", |
| .desc = "Cycles QPI outbound stalls", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x41, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qpi_tx_stalled_multi_flit), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qpi_tx_stalled_multi_flit, |
| }, |
| { .name = "UNC_QPI_TX_STALLED_SINGLE_FLIT", |
| .desc = "Cycles QPI outbound link stalls", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x40, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_qpi_tx_stalled_single_flit), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_qpi_tx_stalled_single_flit, |
| }, |
| { .name = "UNC_SNP_RESP_TO_LOCAL_HOME", |
| .desc = "Local home snoop response", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x6, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_snp_resp_to_local_home), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_snp_resp_to_local_home, |
| }, |
| { .name = "UNC_SNP_RESP_TO_REMOTE_HOME", |
| .desc = "Remote home snoop response", |
| .modmsk = NHM_UNC_ATTRS, |
| .cntmsk = 0x1fe00000, |
| .code = 0x7, |
| .numasks = LIBPFM_ARRAY_SIZE(nhm_unc_unc_snp_resp_to_remote_home), |
| .ngrp = 1, |
| .umasks = nhm_unc_unc_snp_resp_to_remote_home, |
| }, |
| }; |