提交 666435bb 编写于 作者: M Michael Ellerman 提交者: Benjamin Herrenschmidt

powerpc: Deindentify identify_cpu()

The for-loop body of identify_cpu() has gotten a little big, so move the
loop body logic into a separate function. No other changes.
Signed-off-by: NMichael Ellerman <michael@ellerman.id.au>
Acked-by: NDave Kleikamp <shaggy@linux.vnet.ibm.com>
Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
上级 1cdab55d
...@@ -1785,74 +1785,80 @@ static struct cpu_spec __initdata cpu_specs[] = { ...@@ -1785,74 +1785,80 @@ static struct cpu_spec __initdata cpu_specs[] = {
static struct cpu_spec the_cpu_spec; static struct cpu_spec the_cpu_spec;
struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr) static void __init setup_cpu_spec(unsigned long offset, struct cpu_spec *s)
{ {
struct cpu_spec *s = cpu_specs;
struct cpu_spec *t = &the_cpu_spec; struct cpu_spec *t = &the_cpu_spec;
int i;
s = PTRRELOC(s);
t = PTRRELOC(t); t = PTRRELOC(t);
for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++) /*
if ((pvr & s->pvr_mask) == s->pvr_value) { * If we are overriding a previous value derived from the real
/* * PVR with a new value obtained using a logical PVR value,
* If we are overriding a previous value derived * don't modify the performance monitor fields.
* from the real PVR with a new value obtained */
* using a logical PVR value, don't modify the if (t->num_pmcs && !s->num_pmcs) {
* performance monitor fields. t->cpu_name = s->cpu_name;
*/ t->cpu_features = s->cpu_features;
if (t->num_pmcs && !s->num_pmcs) { t->cpu_user_features = s->cpu_user_features;
t->cpu_name = s->cpu_name; t->icache_bsize = s->icache_bsize;
t->cpu_features = s->cpu_features; t->dcache_bsize = s->dcache_bsize;
t->cpu_user_features = s->cpu_user_features; t->cpu_setup = s->cpu_setup;
t->icache_bsize = s->icache_bsize; t->cpu_restore = s->cpu_restore;
t->dcache_bsize = s->dcache_bsize; t->platform = s->platform;
t->cpu_setup = s->cpu_setup; /*
t->cpu_restore = s->cpu_restore; * If we have passed through this logic once before and
t->platform = s->platform; * have pulled the default case because the real PVR was
/* * not found inside cpu_specs[], then we are possibly
* If we have passed through this logic once * running in compatibility mode. In that case, let the
* before and have pulled the default case * oprofiler know which set of compatibility counters to
* because the real PVR was not found inside * pull from by making sure the oprofile_cpu_type string
* cpu_specs[], then we are possibly running in * is set to that of compatibility mode. If the
* compatibility mode. In that case, let the * oprofile_cpu_type already has a value, then we are
* oprofiler know which set of compatibility * possibly overriding a real PVR with a logical one,
* counters to pull from by making sure the * and, in that case, keep the current value for
* oprofile_cpu_type string is set to that of * oprofile_cpu_type.
* compatibility mode. If the oprofile_cpu_type */
* already has a value, then we are possibly if (t->oprofile_cpu_type == NULL)
* overriding a real PVR with a logical one, and, t->oprofile_cpu_type = s->oprofile_cpu_type;
* in that case, keep the current value for } else
* oprofile_cpu_type. *t = *s;
*/
if (t->oprofile_cpu_type == NULL) *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec;
t->oprofile_cpu_type = s->oprofile_cpu_type;
} else
*t = *s;
*PTRRELOC(&cur_cpu_spec) = &the_cpu_spec;
/* /*
* Set the base platform string once; assumes * Set the base platform string once; assumes
* we're called with real pvr first. * we're called with real pvr first.
*/ */
if (*PTRRELOC(&powerpc_base_platform) == NULL) if (*PTRRELOC(&powerpc_base_platform) == NULL)
*PTRRELOC(&powerpc_base_platform) = t->platform; *PTRRELOC(&powerpc_base_platform) = t->platform;
#if defined(CONFIG_PPC64) || defined(CONFIG_BOOKE) #if defined(CONFIG_PPC64) || defined(CONFIG_BOOKE)
/* ppc64 and booke expect identify_cpu to also call /* ppc64 and booke expect identify_cpu to also call setup_cpu for
* setup_cpu for that processor. I will consolidate * that processor. I will consolidate that at a later time, for now,
* that at a later time, for now, just use #ifdef. * just use #ifdef. We also don't need to PTRRELOC the function
* we also don't need to PTRRELOC the function pointer * pointer on ppc64 and booke as we are running at 0 in real mode
* on ppc64 and booke as we are running at 0 in real * on ppc64 and reloc_offset is always 0 on booke.
* mode on ppc64 and reloc_offset is always 0 on booke. */
*/ if (s->cpu_setup) {
if (s->cpu_setup) { s->cpu_setup(offset, s);
s->cpu_setup(offset, s); }
}
#endif /* CONFIG_PPC64 || CONFIG_BOOKE */ #endif /* CONFIG_PPC64 || CONFIG_BOOKE */
}
struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr)
{
struct cpu_spec *s = cpu_specs;
int i;
s = PTRRELOC(s);
for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++) {
if ((pvr & s->pvr_mask) == s->pvr_value) {
setup_cpu_spec(offset, s);
return s; return s;
} }
}
BUG(); BUG();
return NULL; return NULL;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册