Commit 708597da authored by Madhavan Srinivasan's avatar Madhavan Srinivasan Committed by Michael Ellerman

powerpc/perf: init pmu from core-book3s

Currenty pmu driver file for each ppc64 generation processor
has a __init call in itself. Refactor the code by moving the
__init call to core-books.c. This also clean's up compat mode
pmu driver registration.
Suggested-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Signed-off-by: default avatarMadhavan Srinivasan <maddy@linux.vnet.ibm.com>
[mpe: Use SPDX tag for license]
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 1e496391
...@@ -22,6 +22,10 @@ ...@@ -22,6 +22,10 @@
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/code-patching.h> #include <asm/code-patching.h>
#ifdef CONFIG_PPC64
#include "internal.h"
#endif
#define BHRB_MAX_ENTRIES 32 #define BHRB_MAX_ENTRIES 32
#define BHRB_TARGET 0x0000000000000002 #define BHRB_TARGET 0x0000000000000002
#define BHRB_PREDICTION 0x0000000000000001 #define BHRB_PREDICTION 0x0000000000000001
...@@ -2294,3 +2298,27 @@ int register_power_pmu(struct power_pmu *pmu) ...@@ -2294,3 +2298,27 @@ int register_power_pmu(struct power_pmu *pmu)
power_pmu_prepare_cpu, NULL); power_pmu_prepare_cpu, NULL);
return 0; return 0;
} }
#ifdef CONFIG_PPC64
static int __init init_ppc64_pmu(void)
{
/* run through all the pmu drivers one at a time */
if (!init_power5_pmu())
return 0;
else if (!init_power5p_pmu())
return 0;
else if (!init_power6_pmu())
return 0;
else if (!init_power7_pmu())
return 0;
else if (!init_power8_pmu())
return 0;
else if (!init_power9_pmu())
return 0;
else if (!init_ppc970_pmu())
return 0;
else
return -ENODEV;
}
early_initcall(init_ppc64_pmu);
#endif
// SPDX-License-Identifier: GPL-2.0+
//
// Copyright 2019 Madhavan Srinivasan, IBM Corporation.
extern int init_ppc970_pmu(void);
extern int init_power5_pmu(void);
extern int init_power5p_pmu(void);
extern int init_power6_pmu(void);
extern int init_power7_pmu(void);
extern int init_power8_pmu(void);
extern int init_power9_pmu(void);
...@@ -677,7 +677,7 @@ static struct power_pmu power5p_pmu = { ...@@ -677,7 +677,7 @@ static struct power_pmu power5p_pmu = {
.cache_events = &power5p_cache_events, .cache_events = &power5p_cache_events,
}; };
static int __init init_power5p_pmu(void) int init_power5p_pmu(void)
{ {
if (!cur_cpu_spec->oprofile_cpu_type || if (!cur_cpu_spec->oprofile_cpu_type ||
(strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5+") (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5+")
...@@ -686,5 +686,3 @@ static int __init init_power5p_pmu(void) ...@@ -686,5 +686,3 @@ static int __init init_power5p_pmu(void)
return register_power_pmu(&power5p_pmu); return register_power_pmu(&power5p_pmu);
} }
early_initcall(init_power5p_pmu);
...@@ -618,7 +618,7 @@ static struct power_pmu power5_pmu = { ...@@ -618,7 +618,7 @@ static struct power_pmu power5_pmu = {
.flags = PPMU_HAS_SSLOT, .flags = PPMU_HAS_SSLOT,
}; };
static int __init init_power5_pmu(void) int init_power5_pmu(void)
{ {
if (!cur_cpu_spec->oprofile_cpu_type || if (!cur_cpu_spec->oprofile_cpu_type ||
strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5")) strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5"))
...@@ -626,5 +626,3 @@ static int __init init_power5_pmu(void) ...@@ -626,5 +626,3 @@ static int __init init_power5_pmu(void)
return register_power_pmu(&power5_pmu); return register_power_pmu(&power5_pmu);
} }
early_initcall(init_power5_pmu);
...@@ -540,7 +540,7 @@ static struct power_pmu power6_pmu = { ...@@ -540,7 +540,7 @@ static struct power_pmu power6_pmu = {
.cache_events = &power6_cache_events, .cache_events = &power6_cache_events,
}; };
static int __init init_power6_pmu(void) int init_power6_pmu(void)
{ {
if (!cur_cpu_spec->oprofile_cpu_type || if (!cur_cpu_spec->oprofile_cpu_type ||
strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power6")) strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power6"))
...@@ -548,5 +548,3 @@ static int __init init_power6_pmu(void) ...@@ -548,5 +548,3 @@ static int __init init_power6_pmu(void)
return register_power_pmu(&power6_pmu); return register_power_pmu(&power6_pmu);
} }
early_initcall(init_power6_pmu);
...@@ -445,7 +445,7 @@ static struct power_pmu power7_pmu = { ...@@ -445,7 +445,7 @@ static struct power_pmu power7_pmu = {
.cache_events = &power7_cache_events, .cache_events = &power7_cache_events,
}; };
static int __init init_power7_pmu(void) int init_power7_pmu(void)
{ {
if (!cur_cpu_spec->oprofile_cpu_type || if (!cur_cpu_spec->oprofile_cpu_type ||
strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power7")) strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power7"))
...@@ -456,5 +456,3 @@ static int __init init_power7_pmu(void) ...@@ -456,5 +456,3 @@ static int __init init_power7_pmu(void)
return register_power_pmu(&power7_pmu); return register_power_pmu(&power7_pmu);
} }
early_initcall(init_power7_pmu);
...@@ -379,7 +379,7 @@ static struct power_pmu power8_pmu = { ...@@ -379,7 +379,7 @@ static struct power_pmu power8_pmu = {
.bhrb_nr = 32, .bhrb_nr = 32,
}; };
static int __init init_power8_pmu(void) int init_power8_pmu(void)
{ {
int rc; int rc;
...@@ -399,4 +399,3 @@ static int __init init_power8_pmu(void) ...@@ -399,4 +399,3 @@ static int __init init_power8_pmu(void)
return 0; return 0;
} }
early_initcall(init_power8_pmu);
...@@ -437,7 +437,7 @@ static struct power_pmu power9_pmu = { ...@@ -437,7 +437,7 @@ static struct power_pmu power9_pmu = {
.bhrb_nr = 32, .bhrb_nr = 32,
}; };
static int __init init_power9_pmu(void) int init_power9_pmu(void)
{ {
int rc = 0; int rc = 0;
unsigned int pvr = mfspr(SPRN_PVR); unsigned int pvr = mfspr(SPRN_PVR);
...@@ -467,4 +467,3 @@ static int __init init_power9_pmu(void) ...@@ -467,4 +467,3 @@ static int __init init_power9_pmu(void)
return 0; return 0;
} }
early_initcall(init_power9_pmu);
...@@ -490,7 +490,7 @@ static struct power_pmu ppc970_pmu = { ...@@ -490,7 +490,7 @@ static struct power_pmu ppc970_pmu = {
.flags = PPMU_NO_SIPR | PPMU_NO_CONT_SAMPLING, .flags = PPMU_NO_SIPR | PPMU_NO_CONT_SAMPLING,
}; };
static int __init init_ppc970_pmu(void) int init_ppc970_pmu(void)
{ {
if (!cur_cpu_spec->oprofile_cpu_type || if (!cur_cpu_spec->oprofile_cpu_type ||
(strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/970") (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/970")
...@@ -499,5 +499,3 @@ static int __init init_ppc970_pmu(void) ...@@ -499,5 +499,3 @@ static int __init init_ppc970_pmu(void)
return register_power_pmu(&ppc970_pmu); return register_power_pmu(&ppc970_pmu);
} }
early_initcall(init_ppc970_pmu);
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