powerpc/64s: Remove POWER9 DD1 support
POWER9 DD1 was never a product. It is no longer supported by upstream firmware, and it is not effectively supported in Linux due to lack of testing. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Reviewed-by: Michael Ellerman <mpe@ellerman.id.au> [mpe: Remove arch_make_huge_pte() entirely] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
ce397d215c
commit
2bf1071a8d
@@ -128,10 +128,6 @@ static inline void power_pmu_bhrb_disable(struct perf_event *event) {}
|
||||
static void power_pmu_sched_task(struct perf_event_context *ctx, bool sched_in) {}
|
||||
static inline void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw) {}
|
||||
static void pmao_restore_workaround(bool ebb) { }
|
||||
static bool use_ic(u64 event)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif /* CONFIG_PPC32 */
|
||||
|
||||
static bool regs_use_siar(struct pt_regs *regs)
|
||||
@@ -714,14 +710,6 @@ static void pmao_restore_workaround(bool ebb)
|
||||
mtspr(SPRN_PMC6, pmcs[5]);
|
||||
}
|
||||
|
||||
static bool use_ic(u64 event)
|
||||
{
|
||||
if (cpu_has_feature(CPU_FTR_POWER9_DD1) &&
|
||||
(event == 0x200f2 || event == 0x300f2))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif /* CONFIG_PPC64 */
|
||||
|
||||
static void perf_event_interrupt(struct pt_regs *regs);
|
||||
@@ -1046,7 +1034,6 @@ static u64 check_and_compute_delta(u64 prev, u64 val)
|
||||
static void power_pmu_read(struct perf_event *event)
|
||||
{
|
||||
s64 val, delta, prev;
|
||||
struct cpu_hw_events *cpuhw = this_cpu_ptr(&cpu_hw_events);
|
||||
|
||||
if (event->hw.state & PERF_HES_STOPPED)
|
||||
return;
|
||||
@@ -1056,13 +1043,6 @@ static void power_pmu_read(struct perf_event *event)
|
||||
|
||||
if (is_ebb_event(event)) {
|
||||
val = read_pmc(event->hw.idx);
|
||||
if (use_ic(event->attr.config)) {
|
||||
val = mfspr(SPRN_IC);
|
||||
if (val > cpuhw->ic_init)
|
||||
val = val - cpuhw->ic_init;
|
||||
else
|
||||
val = val + (0 - cpuhw->ic_init);
|
||||
}
|
||||
local64_set(&event->hw.prev_count, val);
|
||||
return;
|
||||
}
|
||||
@@ -1076,13 +1056,6 @@ static void power_pmu_read(struct perf_event *event)
|
||||
prev = local64_read(&event->hw.prev_count);
|
||||
barrier();
|
||||
val = read_pmc(event->hw.idx);
|
||||
if (use_ic(event->attr.config)) {
|
||||
val = mfspr(SPRN_IC);
|
||||
if (val > cpuhw->ic_init)
|
||||
val = val - cpuhw->ic_init;
|
||||
else
|
||||
val = val + (0 - cpuhw->ic_init);
|
||||
}
|
||||
delta = check_and_compute_delta(prev, val);
|
||||
if (!delta)
|
||||
return;
|
||||
@@ -1535,13 +1508,6 @@ nocheck:
|
||||
event->attr.branch_sample_type);
|
||||
}
|
||||
|
||||
/*
|
||||
* Workaround for POWER9 DD1 to use the Instruction Counter
|
||||
* register value for instruction counting
|
||||
*/
|
||||
if (use_ic(event->attr.config))
|
||||
cpuhw->ic_init = mfspr(SPRN_IC);
|
||||
|
||||
perf_pmu_enable(event->pmu);
|
||||
local_irq_restore(flags);
|
||||
return ret;
|
||||
|
@@ -59,7 +59,7 @@ static bool is_event_valid(u64 event)
|
||||
{
|
||||
u64 valid_mask = EVENT_VALID_MASK;
|
||||
|
||||
if (cpu_has_feature(CPU_FTR_ARCH_300) && !cpu_has_feature(CPU_FTR_POWER9_DD1))
|
||||
if (cpu_has_feature(CPU_FTR_ARCH_300))
|
||||
valid_mask = p9_EVENT_VALID_MASK;
|
||||
|
||||
return !(event & ~valid_mask);
|
||||
@@ -86,8 +86,6 @@ static void mmcra_sdar_mode(u64 event, unsigned long *mmcra)
|
||||
* Incase of Power9:
|
||||
* Marked event: MMCRA[SDAR_MODE] will be set to 0b00 ('No Updates'),
|
||||
* or if group already have any marked events.
|
||||
* Non-Marked events (for DD1):
|
||||
* MMCRA[SDAR_MODE] will be set to 0b01
|
||||
* For rest
|
||||
* MMCRA[SDAR_MODE] will be set from event code.
|
||||
* If sdar_mode from event is zero, default to 0b01. Hardware
|
||||
@@ -96,7 +94,7 @@ static void mmcra_sdar_mode(u64 event, unsigned long *mmcra)
|
||||
if (cpu_has_feature(CPU_FTR_ARCH_300)) {
|
||||
if (is_event_marked(event) || (*mmcra & MMCRA_SAMPLE_ENABLE))
|
||||
*mmcra &= MMCRA_SDAR_MODE_NO_UPDATES;
|
||||
else if (!cpu_has_feature(CPU_FTR_POWER9_DD1) && p9_SDAR_MODE(event))
|
||||
else if (p9_SDAR_MODE(event))
|
||||
*mmcra |= p9_SDAR_MODE(event) << MMCRA_SDAR_MODE_SHIFT;
|
||||
else
|
||||
*mmcra |= MMCRA_SDAR_MODE_DCACHE;
|
||||
@@ -106,7 +104,7 @@ static void mmcra_sdar_mode(u64 event, unsigned long *mmcra)
|
||||
|
||||
static u64 thresh_cmp_val(u64 value)
|
||||
{
|
||||
if (cpu_has_feature(CPU_FTR_ARCH_300) && !cpu_has_feature(CPU_FTR_POWER9_DD1))
|
||||
if (cpu_has_feature(CPU_FTR_ARCH_300))
|
||||
return value << p9_MMCRA_THR_CMP_SHIFT;
|
||||
|
||||
return value << MMCRA_THR_CMP_SHIFT;
|
||||
@@ -114,7 +112,7 @@ static u64 thresh_cmp_val(u64 value)
|
||||
|
||||
static unsigned long combine_from_event(u64 event)
|
||||
{
|
||||
if (cpu_has_feature(CPU_FTR_ARCH_300) && !cpu_has_feature(CPU_FTR_POWER9_DD1))
|
||||
if (cpu_has_feature(CPU_FTR_ARCH_300))
|
||||
return p9_EVENT_COMBINE(event);
|
||||
|
||||
return EVENT_COMBINE(event);
|
||||
@@ -122,7 +120,7 @@ static unsigned long combine_from_event(u64 event)
|
||||
|
||||
static unsigned long combine_shift(unsigned long pmc)
|
||||
{
|
||||
if (cpu_has_feature(CPU_FTR_ARCH_300) && !cpu_has_feature(CPU_FTR_POWER9_DD1))
|
||||
if (cpu_has_feature(CPU_FTR_ARCH_300))
|
||||
return p9_MMCR1_COMBINE_SHIFT(pmc);
|
||||
|
||||
return MMCR1_COMBINE_SHIFT(pmc);
|
||||
|
@@ -158,11 +158,6 @@
|
||||
CNST_PMC_VAL(1) | CNST_PMC_VAL(2) | CNST_PMC_VAL(3) | \
|
||||
CNST_PMC_VAL(4) | CNST_PMC_VAL(5) | CNST_PMC_VAL(6) | CNST_NC_VAL
|
||||
|
||||
/*
|
||||
* Lets restrict use of PMC5 for instruction counting.
|
||||
*/
|
||||
#define P9_DD1_TEST_ADDER (ISA207_TEST_ADDER | CNST_PMC_VAL(5))
|
||||
|
||||
/* Bits in MMCR1 for PowerISA v2.07 */
|
||||
#define MMCR1_UNIT_SHIFT(pmc) (60 - (4 * ((pmc) - 1)))
|
||||
#define MMCR1_COMBINE_SHIFT(pmc) (35 - ((pmc) - 1))
|
||||
|
@@ -219,12 +219,6 @@ static struct attribute_group power9_pmu_events_group = {
|
||||
.attrs = power9_events_attr,
|
||||
};
|
||||
|
||||
static const struct attribute_group *power9_isa207_pmu_attr_groups[] = {
|
||||
&isa207_pmu_format_group,
|
||||
&power9_pmu_events_group,
|
||||
NULL,
|
||||
};
|
||||
|
||||
PMU_FORMAT_ATTR(event, "config:0-51");
|
||||
PMU_FORMAT_ATTR(pmcxsel, "config:0-7");
|
||||
PMU_FORMAT_ATTR(mark, "config:8");
|
||||
@@ -267,17 +261,6 @@ static const struct attribute_group *power9_pmu_attr_groups[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
static int power9_generic_events_dd1[] = {
|
||||
[PERF_COUNT_HW_CPU_CYCLES] = PM_CYC,
|
||||
[PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = PM_ICT_NOSLOT_CYC,
|
||||
[PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = PM_CMPLU_STALL,
|
||||
[PERF_COUNT_HW_INSTRUCTIONS] = PM_INST_DISP,
|
||||
[PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = PM_BR_CMPL_ALT,
|
||||
[PERF_COUNT_HW_BRANCH_MISSES] = PM_BR_MPRED_CMPL,
|
||||
[PERF_COUNT_HW_CACHE_REFERENCES] = PM_LD_REF_L1,
|
||||
[PERF_COUNT_HW_CACHE_MISSES] = PM_LD_MISS_L1_FIN,
|
||||
};
|
||||
|
||||
static int power9_generic_events[] = {
|
||||
[PERF_COUNT_HW_CPU_CYCLES] = PM_CYC,
|
||||
[PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = PM_ICT_NOSLOT_CYC,
|
||||
@@ -439,25 +422,6 @@ static int power9_cache_events[C(MAX)][C(OP_MAX)][C(RESULT_MAX)] = {
|
||||
|
||||
#undef C
|
||||
|
||||
static struct power_pmu power9_isa207_pmu = {
|
||||
.name = "POWER9",
|
||||
.n_counter = MAX_PMU_COUNTERS,
|
||||
.add_fields = ISA207_ADD_FIELDS,
|
||||
.test_adder = P9_DD1_TEST_ADDER,
|
||||
.compute_mmcr = isa207_compute_mmcr,
|
||||
.config_bhrb = power9_config_bhrb,
|
||||
.bhrb_filter_map = power9_bhrb_filter_map,
|
||||
.get_constraint = isa207_get_constraint,
|
||||
.get_alternatives = power9_get_alternatives,
|
||||
.disable_pmc = isa207_disable_pmc,
|
||||
.flags = PPMU_NO_SIAR | PPMU_ARCH_207S,
|
||||
.n_generic = ARRAY_SIZE(power9_generic_events_dd1),
|
||||
.generic_events = power9_generic_events_dd1,
|
||||
.cache_events = &power9_cache_events,
|
||||
.attr_groups = power9_isa207_pmu_attr_groups,
|
||||
.bhrb_nr = 32,
|
||||
};
|
||||
|
||||
static struct power_pmu power9_pmu = {
|
||||
.name = "POWER9",
|
||||
.n_counter = MAX_PMU_COUNTERS,
|
||||
@@ -500,23 +464,7 @@ static int __init init_power9_pmu(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (cpu_has_feature(CPU_FTR_POWER9_DD1)) {
|
||||
/*
|
||||
* Since PM_INST_CMPL may not provide right counts in all
|
||||
* sampling scenarios in power9 DD1, instead use PM_INST_DISP.
|
||||
*/
|
||||
EVENT_VAR(PM_INST_CMPL, _g).id = PM_INST_DISP;
|
||||
/*
|
||||
* Power9 DD1 should use PM_BR_CMPL_ALT event code for
|
||||
* "branches" to provide correct counter value.
|
||||
*/
|
||||
EVENT_VAR(PM_BR_CMPL, _g).id = PM_BR_CMPL_ALT;
|
||||
EVENT_VAR(PM_BR_CMPL, _c).id = PM_BR_CMPL_ALT;
|
||||
rc = register_power_pmu(&power9_isa207_pmu);
|
||||
} else {
|
||||
rc = register_power_pmu(&power9_pmu);
|
||||
}
|
||||
|
||||
rc = register_power_pmu(&power9_pmu);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
|
Reference in New Issue
Block a user