diff options
-rw-r--r-- | drivers/bus/arm-ccn.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/bus/arm-ccn.c b/drivers/bus/arm-ccn.c index 6f550d9e7a2d..f5bca3113bfc 100644 --- a/drivers/bus/arm-ccn.c +++ b/drivers/bus/arm-ccn.c | |||
@@ -57,6 +57,7 @@ | |||
57 | #define CCN_DT_PMCCNTRSR 0x0190 | 57 | #define CCN_DT_PMCCNTRSR 0x0190 |
58 | #define CCN_DT_PMOVSR 0x0198 | 58 | #define CCN_DT_PMOVSR 0x0198 |
59 | #define CCN_DT_PMOVSR_CLR 0x01a0 | 59 | #define CCN_DT_PMOVSR_CLR 0x01a0 |
60 | #define CCN_DT_PMOVSR_CLR__MASK 0x1f | ||
60 | #define CCN_DT_PMCR 0x01a8 | 61 | #define CCN_DT_PMCR 0x01a8 |
61 | #define CCN_DT_PMCR__OVFL_INTR_EN (1 << 6) | 62 | #define CCN_DT_PMCR__OVFL_INTR_EN (1 << 6) |
62 | #define CCN_DT_PMCR__PMU_EN (1 << 0) | 63 | #define CCN_DT_PMCR__PMU_EN (1 << 0) |
@@ -1052,7 +1053,8 @@ static irqreturn_t arm_ccn_pmu_overflow_handler(struct arm_ccn_dt *dt) | |||
1052 | struct perf_event *event = dt->pmu_counters[idx].event; | 1053 | struct perf_event *event = dt->pmu_counters[idx].event; |
1053 | int overflowed = pmovsr & BIT(idx); | 1054 | int overflowed = pmovsr & BIT(idx); |
1054 | 1055 | ||
1055 | WARN_ON_ONCE(overflowed && !event); | 1056 | WARN_ON_ONCE(overflowed && !event && |
1057 | idx != CCN_IDX_PMU_CYCLE_COUNTER); | ||
1056 | 1058 | ||
1057 | if (!event || !overflowed) | 1059 | if (!event || !overflowed) |
1058 | continue; | 1060 | continue; |
@@ -1088,6 +1090,7 @@ static int arm_ccn_pmu_init(struct arm_ccn *ccn) | |||
1088 | /* Initialize DT subsystem */ | 1090 | /* Initialize DT subsystem */ |
1089 | ccn->dt.base = ccn->base + CCN_REGION_SIZE; | 1091 | ccn->dt.base = ccn->base + CCN_REGION_SIZE; |
1090 | spin_lock_init(&ccn->dt.config_lock); | 1092 | spin_lock_init(&ccn->dt.config_lock); |
1093 | writel(CCN_DT_PMOVSR_CLR__MASK, ccn->dt.base + CCN_DT_PMOVSR_CLR); | ||
1091 | writel(CCN_DT_CTL__DT_EN, ccn->dt.base + CCN_DT_CTL); | 1094 | writel(CCN_DT_CTL__DT_EN, ccn->dt.base + CCN_DT_CTL); |
1092 | writel(CCN_DT_PMCR__OVFL_INTR_EN | CCN_DT_PMCR__PMU_EN, | 1095 | writel(CCN_DT_PMCR__OVFL_INTR_EN | CCN_DT_PMCR__PMU_EN, |
1093 | ccn->dt.base + CCN_DT_PMCR); | 1096 | ccn->dt.base + CCN_DT_PMCR); |