Skip to content

Commit

Permalink
ARM: split out processor lookup
Browse files Browse the repository at this point in the history
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: Julien Thierry <julien.thierry@arm.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
  • Loading branch information
Russell King committed Nov 12, 2018
1 parent 899a42f commit 65987a8
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 12 deletions.
1 change: 1 addition & 0 deletions arch/arm/include/asm/cputype.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@
#define ARM_CPU_PART_SCORPION 0x510002d0

extern unsigned int processor_id;
struct proc_info_list *lookup_processor(u32 midr);

#ifdef CONFIG_CPU_CP15
#define read_cpuid(reg) \
Expand Down
31 changes: 19 additions & 12 deletions arch/arm/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -667,22 +667,29 @@ static void __init smp_build_mpidr_hash(void)
}
#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) {
pr_err("CPU configuration botched (ID %08x), unable to continue.\n",
read_cpuid_id());
while (1);
pr_err("CPU%u: configuration botched (ID %08x), CPU halted\n",
smp_processor_id(), midr);
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_architecture = __get_cpu_architecture();

Expand All @@ -700,7 +707,7 @@ static void __init setup_processor(void)
#endif

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());

snprintf(init_utsname()->machine, __NEW_UTS_LEN + 1, "%s%c",
Expand Down

0 comments on commit 65987a8

Please sign in to comment.