Commit 0c55d19c authored by Suzuki K Poulose's avatar Suzuki K Poulose Committed by Will Deacon

arm64: perf: Clean up armv8pmu_select_counter

armv8pmu_select_counter always returns the passed idx. So
let us make that void and get rid of the pointless checks.
Suggested-by: default avatarMark Rutland <mark.rutland@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent 7dfc8db1
...@@ -503,13 +503,17 @@ static inline int armv8pmu_counter_has_overflowed(u32 pmnc, int idx) ...@@ -503,13 +503,17 @@ static inline int armv8pmu_counter_has_overflowed(u32 pmnc, int idx)
return pmnc & BIT(ARMV8_IDX_TO_COUNTER(idx)); return pmnc & BIT(ARMV8_IDX_TO_COUNTER(idx));
} }
static inline int armv8pmu_select_counter(int idx) static inline void armv8pmu_select_counter(int idx)
{ {
u32 counter = ARMV8_IDX_TO_COUNTER(idx); u32 counter = ARMV8_IDX_TO_COUNTER(idx);
write_sysreg(counter, pmselr_el0); write_sysreg(counter, pmselr_el0);
isb(); isb();
}
return idx; static inline u32 armv8pmu_read_evcntr(int idx)
{
armv8pmu_select_counter(idx);
return read_sysreg(pmxevcntr_el0);
} }
static inline u64 armv8pmu_read_counter(struct perf_event *event) static inline u64 armv8pmu_read_counter(struct perf_event *event)
...@@ -524,12 +528,18 @@ static inline u64 armv8pmu_read_counter(struct perf_event *event) ...@@ -524,12 +528,18 @@ static inline u64 armv8pmu_read_counter(struct perf_event *event)
smp_processor_id(), idx); smp_processor_id(), idx);
else if (idx == ARMV8_IDX_CYCLE_COUNTER) else if (idx == ARMV8_IDX_CYCLE_COUNTER)
value = read_sysreg(pmccntr_el0); value = read_sysreg(pmccntr_el0);
else if (armv8pmu_select_counter(idx) == idx) else
value = read_sysreg(pmxevcntr_el0); value = armv8pmu_read_evcntr(idx);
return value; return value;
} }
static inline void armv8pmu_write_evcntr(int idx, u32 value)
{
armv8pmu_select_counter(idx);
write_sysreg(value, pmxevcntr_el0);
}
static inline void armv8pmu_write_counter(struct perf_event *event, u64 value) static inline void armv8pmu_write_counter(struct perf_event *event, u64 value)
{ {
struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu);
...@@ -547,16 +557,15 @@ static inline void armv8pmu_write_counter(struct perf_event *event, u64 value) ...@@ -547,16 +557,15 @@ static inline void armv8pmu_write_counter(struct perf_event *event, u64 value)
*/ */
value |= 0xffffffff00000000ULL; value |= 0xffffffff00000000ULL;
write_sysreg(value, pmccntr_el0); write_sysreg(value, pmccntr_el0);
} else if (armv8pmu_select_counter(idx) == idx) } else
write_sysreg(value, pmxevcntr_el0); armv8pmu_write_evcntr(idx, value);
} }
static inline void armv8pmu_write_evtype(int idx, u32 val) static inline void armv8pmu_write_evtype(int idx, u32 val)
{ {
if (armv8pmu_select_counter(idx) == idx) { armv8pmu_select_counter(idx);
val &= ARMV8_PMU_EVTYPE_MASK; val &= ARMV8_PMU_EVTYPE_MASK;
write_sysreg(val, pmxevtyper_el0); write_sysreg(val, pmxevtyper_el0);
}
} }
static inline int armv8pmu_enable_counter(int idx) static inline int armv8pmu_enable_counter(int idx)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment