Commit 65987a85 authored by Russell King's avatar Russell King

ARM: split out processor lookup

Split out the lookup of the processor type and associated error handling
from the rest of setup_processor() - we will need to use this in the
secondary CPU bringup path for big.Little Spectre variant 2 mitigation.
Reviewed-by: default avatarJulien Thierry <julien.thierry@arm.com>
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
parent 899a42f8
...@@ -107,6 +107,7 @@ ...@@ -107,6 +107,7 @@
#define ARM_CPU_PART_SCORPION 0x510002d0 #define ARM_CPU_PART_SCORPION 0x510002d0
extern unsigned int processor_id; extern unsigned int processor_id;
struct proc_info_list *lookup_processor(u32 midr);
#ifdef CONFIG_CPU_CP15 #ifdef CONFIG_CPU_CP15
#define read_cpuid(reg) \ #define read_cpuid(reg) \
......
...@@ -667,22 +667,29 @@ static void __init smp_build_mpidr_hash(void) ...@@ -667,22 +667,29 @@ static void __init smp_build_mpidr_hash(void)
} }
#endif #endif
static void __init setup_processor(void) /*
* locate processor in the list of supported processor types. The linker
* builds this table for us from the entries in arch/arm/mm/proc-*.S
*/
struct proc_info_list *lookup_processor(u32 midr)
{ {
struct proc_info_list *list; struct proc_info_list *list = lookup_processor_type(midr);
/*
* locate processor in the list of supported processor
* types. The linker builds this table for us from the
* entries in arch/arm/mm/proc-*.S
*/
list = lookup_processor_type(read_cpuid_id());
if (!list) { if (!list) {
pr_err("CPU configuration botched (ID %08x), unable to continue.\n", pr_err("CPU%u: configuration botched (ID %08x), CPU halted\n",
read_cpuid_id()); smp_processor_id(), midr);
while (1); while (1)
/* can't use cpu_relax() here as it may require MMU setup */;
} }
return list;
}
static void __init setup_processor(void)
{
unsigned int midr = read_cpuid_id();
struct proc_info_list *list = lookup_processor(midr);
cpu_name = list->cpu_name; cpu_name = list->cpu_name;
__cpu_architecture = __get_cpu_architecture(); __cpu_architecture = __get_cpu_architecture();
...@@ -700,7 +707,7 @@ static void __init setup_processor(void) ...@@ -700,7 +707,7 @@ static void __init setup_processor(void)
#endif #endif
pr_info("CPU: %s [%08x] revision %d (ARMv%s), cr=%08lx\n", pr_info("CPU: %s [%08x] revision %d (ARMv%s), cr=%08lx\n",
cpu_name, read_cpuid_id(), read_cpuid_id() & 15, list->cpu_name, midr, midr & 15,
proc_arch[cpu_architecture()], get_cr()); proc_arch[cpu_architecture()], get_cr());
snprintf(init_utsname()->machine, __NEW_UTS_LEN + 1, "%s%c", snprintf(init_utsname()->machine, __NEW_UTS_LEN + 1, "%s%c",
......
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