|
@@ -129,8 +129,15 @@ struct intel_uncore_box {
|
|
struct intel_uncore_extra_reg shared_regs[0];
|
|
struct intel_uncore_extra_reg shared_regs[0];
|
|
};
|
|
};
|
|
|
|
|
|
-#define UNCORE_BOX_FLAG_INITIATED 0
|
|
|
|
-#define UNCORE_BOX_FLAG_CTL_OFFS8 1 /* event config registers are 8-byte apart */
|
|
|
|
|
|
+/* CFL uncore 8th cbox MSRs */
|
|
|
|
+#define CFL_UNC_CBO_7_PERFEVTSEL0 0xf70
|
|
|
|
+#define CFL_UNC_CBO_7_PER_CTR0 0xf76
|
|
|
|
+
|
|
|
|
+#define UNCORE_BOX_FLAG_INITIATED 0
|
|
|
|
+/* event config registers are 8-byte apart */
|
|
|
|
+#define UNCORE_BOX_FLAG_CTL_OFFS8 1
|
|
|
|
+/* CFL 8th CBOX has different MSR space */
|
|
|
|
+#define UNCORE_BOX_FLAG_CFL8_CBOX_MSR_OFFS 2
|
|
|
|
|
|
struct uncore_event_desc {
|
|
struct uncore_event_desc {
|
|
struct kobj_attribute attr;
|
|
struct kobj_attribute attr;
|
|
@@ -297,17 +304,27 @@ unsigned int uncore_freerunning_counter(struct intel_uncore_box *box,
|
|
static inline
|
|
static inline
|
|
unsigned uncore_msr_event_ctl(struct intel_uncore_box *box, int idx)
|
|
unsigned uncore_msr_event_ctl(struct intel_uncore_box *box, int idx)
|
|
{
|
|
{
|
|
- return box->pmu->type->event_ctl +
|
|
|
|
- (box->pmu->type->pair_ctr_ctl ? 2 * idx : idx) +
|
|
|
|
- uncore_msr_box_offset(box);
|
|
|
|
|
|
+ if (test_bit(UNCORE_BOX_FLAG_CFL8_CBOX_MSR_OFFS, &box->flags)) {
|
|
|
|
+ return CFL_UNC_CBO_7_PERFEVTSEL0 +
|
|
|
|
+ (box->pmu->type->pair_ctr_ctl ? 2 * idx : idx);
|
|
|
|
+ } else {
|
|
|
|
+ return box->pmu->type->event_ctl +
|
|
|
|
+ (box->pmu->type->pair_ctr_ctl ? 2 * idx : idx) +
|
|
|
|
+ uncore_msr_box_offset(box);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
static inline
|
|
static inline
|
|
unsigned uncore_msr_perf_ctr(struct intel_uncore_box *box, int idx)
|
|
unsigned uncore_msr_perf_ctr(struct intel_uncore_box *box, int idx)
|
|
{
|
|
{
|
|
- return box->pmu->type->perf_ctr +
|
|
|
|
- (box->pmu->type->pair_ctr_ctl ? 2 * idx : idx) +
|
|
|
|
- uncore_msr_box_offset(box);
|
|
|
|
|
|
+ if (test_bit(UNCORE_BOX_FLAG_CFL8_CBOX_MSR_OFFS, &box->flags)) {
|
|
|
|
+ return CFL_UNC_CBO_7_PER_CTR0 +
|
|
|
|
+ (box->pmu->type->pair_ctr_ctl ? 2 * idx : idx);
|
|
|
|
+ } else {
|
|
|
|
+ return box->pmu->type->perf_ctr +
|
|
|
|
+ (box->pmu->type->pair_ctr_ctl ? 2 * idx : idx) +
|
|
|
|
+ uncore_msr_box_offset(box);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
static inline
|
|
static inline
|