[PATCH] ppc64: add number of PMCs to cputable
Add a field in the cputable struct to store the number of PMCs. Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
71839267f2
commit
fd5b4377ea
|
@ -59,6 +59,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
.cpu_user_features = COMMON_USER_PPC64,
|
.cpu_user_features = COMMON_USER_PPC64,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 8,
|
||||||
.cpu_setup = __setup_cpu_power3,
|
.cpu_setup = __setup_cpu_power3,
|
||||||
},
|
},
|
||||||
{ /* Power3+ */
|
{ /* Power3+ */
|
||||||
|
@ -71,6 +72,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
.cpu_user_features = COMMON_USER_PPC64,
|
.cpu_user_features = COMMON_USER_PPC64,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 8,
|
||||||
.cpu_setup = __setup_cpu_power3,
|
.cpu_setup = __setup_cpu_power3,
|
||||||
},
|
},
|
||||||
{ /* Northstar */
|
{ /* Northstar */
|
||||||
|
@ -83,6 +85,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
.cpu_user_features = COMMON_USER_PPC64,
|
.cpu_user_features = COMMON_USER_PPC64,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 8,
|
||||||
.cpu_setup = __setup_cpu_power3,
|
.cpu_setup = __setup_cpu_power3,
|
||||||
},
|
},
|
||||||
{ /* Pulsar */
|
{ /* Pulsar */
|
||||||
|
@ -95,6 +98,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
.cpu_user_features = COMMON_USER_PPC64,
|
.cpu_user_features = COMMON_USER_PPC64,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 8,
|
||||||
.cpu_setup = __setup_cpu_power3,
|
.cpu_setup = __setup_cpu_power3,
|
||||||
},
|
},
|
||||||
{ /* I-star */
|
{ /* I-star */
|
||||||
|
@ -107,6 +111,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
.cpu_user_features = COMMON_USER_PPC64,
|
.cpu_user_features = COMMON_USER_PPC64,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 8,
|
||||||
.cpu_setup = __setup_cpu_power3,
|
.cpu_setup = __setup_cpu_power3,
|
||||||
},
|
},
|
||||||
{ /* S-star */
|
{ /* S-star */
|
||||||
|
@ -119,6 +124,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
.cpu_user_features = COMMON_USER_PPC64,
|
.cpu_user_features = COMMON_USER_PPC64,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 8,
|
||||||
.cpu_setup = __setup_cpu_power3,
|
.cpu_setup = __setup_cpu_power3,
|
||||||
},
|
},
|
||||||
{ /* Power4 */
|
{ /* Power4 */
|
||||||
|
@ -131,6 +137,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
.cpu_user_features = COMMON_USER_PPC64,
|
.cpu_user_features = COMMON_USER_PPC64,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 8,
|
||||||
.cpu_setup = __setup_cpu_power4,
|
.cpu_setup = __setup_cpu_power4,
|
||||||
},
|
},
|
||||||
{ /* Power4+ */
|
{ /* Power4+ */
|
||||||
|
@ -143,6 +150,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
.cpu_user_features = COMMON_USER_PPC64,
|
.cpu_user_features = COMMON_USER_PPC64,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 8,
|
||||||
.cpu_setup = __setup_cpu_power4,
|
.cpu_setup = __setup_cpu_power4,
|
||||||
},
|
},
|
||||||
{ /* PPC970 */
|
{ /* PPC970 */
|
||||||
|
@ -157,6 +165,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
PPC_FEATURE_HAS_ALTIVEC_COMP,
|
PPC_FEATURE_HAS_ALTIVEC_COMP,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 8,
|
||||||
.cpu_setup = __setup_cpu_ppc970,
|
.cpu_setup = __setup_cpu_ppc970,
|
||||||
},
|
},
|
||||||
{ /* PPC970FX */
|
{ /* PPC970FX */
|
||||||
|
@ -171,6 +180,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
PPC_FEATURE_HAS_ALTIVEC_COMP,
|
PPC_FEATURE_HAS_ALTIVEC_COMP,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 8,
|
||||||
.cpu_setup = __setup_cpu_ppc970,
|
.cpu_setup = __setup_cpu_ppc970,
|
||||||
},
|
},
|
||||||
{ /* PPC970MP */
|
{ /* PPC970MP */
|
||||||
|
@ -199,6 +209,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
.cpu_user_features = COMMON_USER_PPC64,
|
.cpu_user_features = COMMON_USER_PPC64,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 6,
|
||||||
.cpu_setup = __setup_cpu_power4,
|
.cpu_setup = __setup_cpu_power4,
|
||||||
},
|
},
|
||||||
{ /* Power5 */
|
{ /* Power5 */
|
||||||
|
@ -213,6 +224,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
.cpu_user_features = COMMON_USER_PPC64,
|
.cpu_user_features = COMMON_USER_PPC64,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 6,
|
||||||
.cpu_setup = __setup_cpu_power4,
|
.cpu_setup = __setup_cpu_power4,
|
||||||
},
|
},
|
||||||
{ /* BE DD1.x */
|
{ /* BE DD1.x */
|
||||||
|
@ -239,6 +251,7 @@ struct cpu_spec cpu_specs[] = {
|
||||||
.cpu_user_features = COMMON_USER_PPC64,
|
.cpu_user_features = COMMON_USER_PPC64,
|
||||||
.icache_bsize = 128,
|
.icache_bsize = 128,
|
||||||
.dcache_bsize = 128,
|
.dcache_bsize = 128,
|
||||||
|
.num_pmcs = 6,
|
||||||
.cpu_setup = __setup_cpu_power4,
|
.cpu_setup = __setup_cpu_power4,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -215,17 +215,22 @@ static void register_cpu_online(unsigned int cpu)
|
||||||
if (cpu_has_feature(CPU_FTR_MMCRA))
|
if (cpu_has_feature(CPU_FTR_MMCRA))
|
||||||
sysdev_create_file(s, &attr_mmcra);
|
sysdev_create_file(s, &attr_mmcra);
|
||||||
|
|
||||||
sysdev_create_file(s, &attr_pmc1);
|
if (cur_cpu_spec->num_pmcs >= 1)
|
||||||
sysdev_create_file(s, &attr_pmc2);
|
sysdev_create_file(s, &attr_pmc1);
|
||||||
sysdev_create_file(s, &attr_pmc3);
|
if (cur_cpu_spec->num_pmcs >= 2)
|
||||||
sysdev_create_file(s, &attr_pmc4);
|
sysdev_create_file(s, &attr_pmc2);
|
||||||
sysdev_create_file(s, &attr_pmc5);
|
if (cur_cpu_spec->num_pmcs >= 3)
|
||||||
sysdev_create_file(s, &attr_pmc6);
|
sysdev_create_file(s, &attr_pmc3);
|
||||||
|
if (cur_cpu_spec->num_pmcs >= 4)
|
||||||
if (cpu_has_feature(CPU_FTR_PMC8)) {
|
sysdev_create_file(s, &attr_pmc4);
|
||||||
|
if (cur_cpu_spec->num_pmcs >= 5)
|
||||||
|
sysdev_create_file(s, &attr_pmc5);
|
||||||
|
if (cur_cpu_spec->num_pmcs >= 6)
|
||||||
|
sysdev_create_file(s, &attr_pmc6);
|
||||||
|
if (cur_cpu_spec->num_pmcs >= 7)
|
||||||
sysdev_create_file(s, &attr_pmc7);
|
sysdev_create_file(s, &attr_pmc7);
|
||||||
|
if (cur_cpu_spec->num_pmcs >= 8)
|
||||||
sysdev_create_file(s, &attr_pmc8);
|
sysdev_create_file(s, &attr_pmc8);
|
||||||
}
|
|
||||||
|
|
||||||
if (cpu_has_feature(CPU_FTR_SMT))
|
if (cpu_has_feature(CPU_FTR_SMT))
|
||||||
sysdev_create_file(s, &attr_purr);
|
sysdev_create_file(s, &attr_purr);
|
||||||
|
@ -252,17 +257,22 @@ static void unregister_cpu_online(unsigned int cpu)
|
||||||
if (cpu_has_feature(CPU_FTR_MMCRA))
|
if (cpu_has_feature(CPU_FTR_MMCRA))
|
||||||
sysdev_remove_file(s, &attr_mmcra);
|
sysdev_remove_file(s, &attr_mmcra);
|
||||||
|
|
||||||
sysdev_remove_file(s, &attr_pmc1);
|
if (cur_cpu_spec->num_pmcs >= 1)
|
||||||
sysdev_remove_file(s, &attr_pmc2);
|
sysdev_remove_file(s, &attr_pmc1);
|
||||||
sysdev_remove_file(s, &attr_pmc3);
|
if (cur_cpu_spec->num_pmcs >= 2)
|
||||||
sysdev_remove_file(s, &attr_pmc4);
|
sysdev_remove_file(s, &attr_pmc2);
|
||||||
sysdev_remove_file(s, &attr_pmc5);
|
if (cur_cpu_spec->num_pmcs >= 3)
|
||||||
sysdev_remove_file(s, &attr_pmc6);
|
sysdev_remove_file(s, &attr_pmc3);
|
||||||
|
if (cur_cpu_spec->num_pmcs >= 4)
|
||||||
if (cpu_has_feature(CPU_FTR_PMC8)) {
|
sysdev_remove_file(s, &attr_pmc4);
|
||||||
|
if (cur_cpu_spec->num_pmcs >= 5)
|
||||||
|
sysdev_remove_file(s, &attr_pmc5);
|
||||||
|
if (cur_cpu_spec->num_pmcs >= 6)
|
||||||
|
sysdev_remove_file(s, &attr_pmc6);
|
||||||
|
if (cur_cpu_spec->num_pmcs >= 7)
|
||||||
sysdev_remove_file(s, &attr_pmc7);
|
sysdev_remove_file(s, &attr_pmc7);
|
||||||
|
if (cur_cpu_spec->num_pmcs >= 8)
|
||||||
sysdev_remove_file(s, &attr_pmc8);
|
sysdev_remove_file(s, &attr_pmc8);
|
||||||
}
|
|
||||||
|
|
||||||
if (cpu_has_feature(CPU_FTR_SMT))
|
if (cpu_has_feature(CPU_FTR_SMT))
|
||||||
sysdev_remove_file(s, &attr_purr);
|
sysdev_remove_file(s, &attr_purr);
|
||||||
|
|
|
@ -52,6 +52,9 @@ struct cpu_spec {
|
||||||
unsigned int icache_bsize;
|
unsigned int icache_bsize;
|
||||||
unsigned int dcache_bsize;
|
unsigned int dcache_bsize;
|
||||||
|
|
||||||
|
/* number of performance monitor counters */
|
||||||
|
unsigned int num_pmcs;
|
||||||
|
|
||||||
/* this is called to initialize various CPU bits like L1 cache,
|
/* this is called to initialize various CPU bits like L1 cache,
|
||||||
* BHT, SPD, etc... from head.S before branching to identify_machine
|
* BHT, SPD, etc... from head.S before branching to identify_machine
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue