diff options
| author | Anton Blanchard <anton@samba.org> | 2005-09-06 00:57:52 -0400 |
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2005-09-06 02:09:21 -0400 |
| commit | 8fef0306f9164d4bfd0befb62e63e4d1167681b5 (patch) | |
| tree | 55158562dbbe4a9e16f9f5e600c2b7fcee21d38b | |
| parent | dca859329cee9b4cf02c8b7cb805b49973292ed2 (diff) | |
[PATCH] ppc64: Move oprofile_model into cpu feature struct
Move oprofile_model into cpu feature struct.
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
| -rw-r--r-- | arch/ppc64/kernel/cputable.c | 14 | ||||
| -rw-r--r-- | arch/ppc64/oprofile/common.c | 42 | ||||
| -rw-r--r-- | include/asm-ppc64/cputable.h | 4 |
3 files changed, 23 insertions, 37 deletions
diff --git a/arch/ppc64/kernel/cputable.c b/arch/ppc64/kernel/cputable.c index c022ec4d1e91..a18aa383f120 100644 --- a/arch/ppc64/kernel/cputable.c +++ b/arch/ppc64/kernel/cputable.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
| 21 | 21 | ||
| 22 | #include <asm/oprofile_impl.h> | ||
| 22 | #include <asm/cputable.h> | 23 | #include <asm/cputable.h> |
| 23 | 24 | ||
| 24 | struct cpu_spec* cur_cpu_spec = NULL; | 25 | struct cpu_spec* cur_cpu_spec = NULL; |
| @@ -61,6 +62,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 61 | .num_pmcs = 8, | 62 | .num_pmcs = 8, |
| 62 | .cpu_setup = __setup_cpu_power3, | 63 | .cpu_setup = __setup_cpu_power3, |
| 63 | .oprofile_cpu_type = "ppc64/power3", | 64 | .oprofile_cpu_type = "ppc64/power3", |
| 65 | .oprofile_model = &op_model_rs64, | ||
| 64 | }, | 66 | }, |
| 65 | { /* Power3+ */ | 67 | { /* Power3+ */ |
| 66 | .pvr_mask = 0xffff0000, | 68 | .pvr_mask = 0xffff0000, |
| @@ -74,6 +76,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 74 | .num_pmcs = 8, | 76 | .num_pmcs = 8, |
| 75 | .cpu_setup = __setup_cpu_power3, | 77 | .cpu_setup = __setup_cpu_power3, |
| 76 | .oprofile_cpu_type = "ppc64/power3", | 78 | .oprofile_cpu_type = "ppc64/power3", |
| 79 | .oprofile_model = &op_model_rs64, | ||
| 77 | }, | 80 | }, |
| 78 | { /* Northstar */ | 81 | { /* Northstar */ |
| 79 | .pvr_mask = 0xffff0000, | 82 | .pvr_mask = 0xffff0000, |
| @@ -88,6 +91,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 88 | .num_pmcs = 8, | 91 | .num_pmcs = 8, |
| 89 | .cpu_setup = __setup_cpu_power3, | 92 | .cpu_setup = __setup_cpu_power3, |
| 90 | .oprofile_cpu_type = "ppc64/rs64", | 93 | .oprofile_cpu_type = "ppc64/rs64", |
| 94 | .oprofile_model = &op_model_rs64, | ||
| 91 | }, | 95 | }, |
| 92 | { /* Pulsar */ | 96 | { /* Pulsar */ |
| 93 | .pvr_mask = 0xffff0000, | 97 | .pvr_mask = 0xffff0000, |
| @@ -102,6 +106,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 102 | .num_pmcs = 8, | 106 | .num_pmcs = 8, |
| 103 | .cpu_setup = __setup_cpu_power3, | 107 | .cpu_setup = __setup_cpu_power3, |
| 104 | .oprofile_cpu_type = "ppc64/rs64", | 108 | .oprofile_cpu_type = "ppc64/rs64", |
| 109 | .oprofile_model = &op_model_rs64, | ||
| 105 | }, | 110 | }, |
| 106 | { /* I-star */ | 111 | { /* I-star */ |
| 107 | .pvr_mask = 0xffff0000, | 112 | .pvr_mask = 0xffff0000, |
| @@ -116,6 +121,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 116 | .num_pmcs = 8, | 121 | .num_pmcs = 8, |
| 117 | .cpu_setup = __setup_cpu_power3, | 122 | .cpu_setup = __setup_cpu_power3, |
| 118 | .oprofile_cpu_type = "ppc64/rs64", | 123 | .oprofile_cpu_type = "ppc64/rs64", |
| 124 | .oprofile_model = &op_model_rs64, | ||
| 119 | }, | 125 | }, |
| 120 | { /* S-star */ | 126 | { /* S-star */ |
| 121 | .pvr_mask = 0xffff0000, | 127 | .pvr_mask = 0xffff0000, |
| @@ -130,6 +136,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 130 | .num_pmcs = 8, | 136 | .num_pmcs = 8, |
| 131 | .cpu_setup = __setup_cpu_power3, | 137 | .cpu_setup = __setup_cpu_power3, |
| 132 | .oprofile_cpu_type = "ppc64/rs64", | 138 | .oprofile_cpu_type = "ppc64/rs64", |
| 139 | .oprofile_model = &op_model_rs64, | ||
| 133 | }, | 140 | }, |
| 134 | { /* Power4 */ | 141 | { /* Power4 */ |
| 135 | .pvr_mask = 0xffff0000, | 142 | .pvr_mask = 0xffff0000, |
| @@ -144,6 +151,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 144 | .num_pmcs = 8, | 151 | .num_pmcs = 8, |
| 145 | .cpu_setup = __setup_cpu_power4, | 152 | .cpu_setup = __setup_cpu_power4, |
| 146 | .oprofile_cpu_type = "ppc64/power4", | 153 | .oprofile_cpu_type = "ppc64/power4", |
| 154 | .oprofile_model = &op_model_rs64, | ||
| 147 | }, | 155 | }, |
| 148 | { /* Power4+ */ | 156 | { /* Power4+ */ |
| 149 | .pvr_mask = 0xffff0000, | 157 | .pvr_mask = 0xffff0000, |
| @@ -158,6 +166,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 158 | .num_pmcs = 8, | 166 | .num_pmcs = 8, |
| 159 | .cpu_setup = __setup_cpu_power4, | 167 | .cpu_setup = __setup_cpu_power4, |
| 160 | .oprofile_cpu_type = "ppc64/power4", | 168 | .oprofile_cpu_type = "ppc64/power4", |
| 169 | .oprofile_model = &op_model_power4, | ||
| 161 | }, | 170 | }, |
| 162 | { /* PPC970 */ | 171 | { /* PPC970 */ |
| 163 | .pvr_mask = 0xffff0000, | 172 | .pvr_mask = 0xffff0000, |
| @@ -174,6 +183,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 174 | .num_pmcs = 8, | 183 | .num_pmcs = 8, |
| 175 | .cpu_setup = __setup_cpu_ppc970, | 184 | .cpu_setup = __setup_cpu_ppc970, |
| 176 | .oprofile_cpu_type = "ppc64/970", | 185 | .oprofile_cpu_type = "ppc64/970", |
| 186 | .oprofile_model = &op_model_power4, | ||
| 177 | }, | 187 | }, |
| 178 | { /* PPC970FX */ | 188 | { /* PPC970FX */ |
| 179 | .pvr_mask = 0xffff0000, | 189 | .pvr_mask = 0xffff0000, |
| @@ -190,6 +200,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 190 | .num_pmcs = 8, | 200 | .num_pmcs = 8, |
| 191 | .cpu_setup = __setup_cpu_ppc970, | 201 | .cpu_setup = __setup_cpu_ppc970, |
| 192 | .oprofile_cpu_type = "ppc64/970", | 202 | .oprofile_cpu_type = "ppc64/970", |
| 203 | .oprofile_model = &op_model_power4, | ||
| 193 | }, | 204 | }, |
| 194 | { /* PPC970MP */ | 205 | { /* PPC970MP */ |
| 195 | .pvr_mask = 0xffff0000, | 206 | .pvr_mask = 0xffff0000, |
| @@ -205,6 +216,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 205 | .dcache_bsize = 128, | 216 | .dcache_bsize = 128, |
| 206 | .cpu_setup = __setup_cpu_ppc970, | 217 | .cpu_setup = __setup_cpu_ppc970, |
| 207 | .oprofile_cpu_type = "ppc64/970", | 218 | .oprofile_cpu_type = "ppc64/970", |
| 219 | .oprofile_model = &op_model_power4, | ||
| 208 | }, | 220 | }, |
| 209 | { /* Power5 */ | 221 | { /* Power5 */ |
| 210 | .pvr_mask = 0xffff0000, | 222 | .pvr_mask = 0xffff0000, |
| @@ -221,6 +233,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 221 | .num_pmcs = 6, | 233 | .num_pmcs = 6, |
| 222 | .cpu_setup = __setup_cpu_power4, | 234 | .cpu_setup = __setup_cpu_power4, |
| 223 | .oprofile_cpu_type = "ppc64/power5", | 235 | .oprofile_cpu_type = "ppc64/power5", |
| 236 | .oprofile_model = &op_model_power4, | ||
| 224 | }, | 237 | }, |
| 225 | { /* Power5 */ | 238 | { /* Power5 */ |
| 226 | .pvr_mask = 0xffff0000, | 239 | .pvr_mask = 0xffff0000, |
| @@ -237,6 +250,7 @@ struct cpu_spec cpu_specs[] = { | |||
| 237 | .num_pmcs = 6, | 250 | .num_pmcs = 6, |
| 238 | .cpu_setup = __setup_cpu_power4, | 251 | .cpu_setup = __setup_cpu_power4, |
| 239 | .oprofile_cpu_type = "ppc64/power5", | 252 | .oprofile_cpu_type = "ppc64/power5", |
| 253 | .oprofile_model = &op_model_power4, | ||
| 240 | }, | 254 | }, |
| 241 | { /* BE DD1.x */ | 255 | { /* BE DD1.x */ |
| 242 | .pvr_mask = 0xffff0000, | 256 | .pvr_mask = 0xffff0000, |
diff --git a/arch/ppc64/oprofile/common.c b/arch/ppc64/oprofile/common.c index 3e8daabf1021..e5f572710aa0 100644 --- a/arch/ppc64/oprofile/common.c +++ b/arch/ppc64/oprofile/common.c | |||
| @@ -121,45 +121,13 @@ static int op_ppc64_create_files(struct super_block *sb, struct dentry *root) | |||
| 121 | 121 | ||
| 122 | int __init oprofile_arch_init(struct oprofile_operations *ops) | 122 | int __init oprofile_arch_init(struct oprofile_operations *ops) |
| 123 | { | 123 | { |
| 124 | unsigned int pvr; | 124 | if (!cur_cpu_spec->oprofile_model || !cur_cpu_spec->oprofile_cpu_type) |
| 125 | 125 | return -ENODEV; | |
| 126 | pvr = mfspr(SPRN_PVR); | ||
| 127 | |||
| 128 | switch (PVR_VER(pvr)) { | ||
| 129 | case PV_630: | ||
| 130 | case PV_630p: | ||
| 131 | model = &op_model_rs64; | ||
| 132 | break; | ||
| 133 | |||
| 134 | case PV_NORTHSTAR: | ||
| 135 | case PV_PULSAR: | ||
| 136 | case PV_ICESTAR: | ||
| 137 | case PV_SSTAR: | ||
| 138 | model = &op_model_rs64; | ||
| 139 | break; | ||
| 140 | |||
| 141 | case PV_POWER4: | ||
| 142 | case PV_POWER4p: | ||
| 143 | model = &op_model_power4; | ||
| 144 | break; | ||
| 145 | |||
| 146 | case PV_970: | ||
| 147 | case PV_970FX: | ||
| 148 | case PV_970MP: | ||
| 149 | model = &op_model_power4; | ||
| 150 | break; | ||
| 151 | |||
| 152 | case PV_POWER5: | ||
| 153 | case PV_POWER5p: | ||
| 154 | model = &op_model_power4; | ||
| 155 | break; | ||
| 156 | |||
| 157 | default: | ||
| 158 | return -ENODEV; | ||
| 159 | } | ||
| 160 | 126 | ||
| 161 | ops->cpu_type = cur_cpu_spec->oprofile_cpu_type; | 127 | model = cur_cpu_spec->oprofile_model; |
| 162 | model->num_counters = cur_cpu_spec->num_pmcs; | 128 | model->num_counters = cur_cpu_spec->num_pmcs; |
| 129 | |||
| 130 | ops->cpu_type = cur_cpu_spec->oprofile_cpu_type; | ||
| 163 | ops->create_files = op_ppc64_create_files; | 131 | ops->create_files = op_ppc64_create_files; |
| 164 | ops->setup = op_ppc64_setup; | 132 | ops->setup = op_ppc64_setup; |
| 165 | ops->shutdown = op_ppc64_shutdown; | 133 | ops->shutdown = op_ppc64_shutdown; |
diff --git a/include/asm-ppc64/cputable.h b/include/asm-ppc64/cputable.h index 445727ae2baa..acc9b4d6c168 100644 --- a/include/asm-ppc64/cputable.h +++ b/include/asm-ppc64/cputable.h | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | * via the mkdefs mechanism. | 36 | * via the mkdefs mechanism. |
| 37 | */ | 37 | */ |
| 38 | struct cpu_spec; | 38 | struct cpu_spec; |
| 39 | struct op_ppc64_model; | ||
| 39 | 40 | ||
| 40 | typedef void (*cpu_setup_t)(unsigned long offset, struct cpu_spec* spec); | 41 | typedef void (*cpu_setup_t)(unsigned long offset, struct cpu_spec* spec); |
| 41 | 42 | ||
| @@ -62,6 +63,9 @@ struct cpu_spec { | |||
| 62 | 63 | ||
| 63 | /* Used by oprofile userspace to select the right counters */ | 64 | /* Used by oprofile userspace to select the right counters */ |
| 64 | char *oprofile_cpu_type; | 65 | char *oprofile_cpu_type; |
| 66 | |||
| 67 | /* Processor specific oprofile operations */ | ||
| 68 | struct op_ppc64_model *oprofile_model; | ||
| 65 | }; | 69 | }; |
| 66 | 70 | ||
| 67 | extern struct cpu_spec cpu_specs[]; | 71 | extern struct cpu_spec cpu_specs[]; |
